blob: 5515dfba2fdbb421baee7ccb50ce5cd731ae5b6c [file] [log] [blame]
Chris Lattner7d9801d2007-02-13 00:58:01 +00001/* A Bison parser, made by GNU Bison 2.3. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Chris Lattner7d9801d2007-02-13 00:58:01 +00003/* Skeleton implementation for Bison's Yacc-like parsers in C
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004
Chris Lattner7d9801d2007-02-13 00:58:01 +00005 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
6 Free Software Foundation, Inc.
Anton Korobeynikov178a3522007-01-12 19:22:51 +00007
Chris Lattner7d9801d2007-02-13 00:58:01 +00008 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
22
23/* As a special exception, you may create a larger work that contains
24 part or all of the Bison parser skeleton and distribute that work
25 under terms of your choice, so long as that work isn't itself a
26 parser generator using the skeleton or a modified version thereof
27 as a parser skeleton. Alternatively, if you modify or redistribute
28 the parser skeleton itself, you may (at your option) remove this
29 special exception, which will cause the skeleton and the resulting
30 Bison output files to be licensed under the GNU General Public
31 License without this special exception.
32
33 This special exception was added by the Free Software Foundation in
34 version 2.2 of Bison. */
35
36/* C LALR(1) parser skeleton written by Richard Stallman, by
37 simplifying the original so-called "semantic" parser. */
38
39/* All symbols defined below should begin with yy or YY, to avoid
40 infringing on user name space. This should be done even for local
41 variables, as they might otherwise be expanded by user macros.
42 There are some unavoidable exceptions within include files to
43 define necessary library symbols; they are noted "INFRINGES ON
44 USER NAME SPACE" below. */
45
46/* Identify Bison output. */
47#define YYBISON 1
48
49/* Bison version. */
50#define YYBISON_VERSION "2.3"
51
52/* Skeleton name. */
53#define YYSKELETON_NAME "yacc.c"
54
55/* Pure parsers. */
56#define YYPURE 0
57
58/* Using locations. */
59#define YYLSP_NEEDED 0
60
61/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000062#define yyparse llvmAsmparse
Chris Lattner7d9801d2007-02-13 00:58:01 +000063#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000064#define yyerror llvmAsmerror
Chris Lattner7d9801d2007-02-13 00:58:01 +000065#define yylval llvmAsmlval
66#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000067#define yydebug llvmAsmdebug
68#define yynerrs llvmAsmnerrs
69
Chris Lattner7d9801d2007-02-13 00:58:01 +000070
71/* Tokens. */
72#ifndef YYTOKENTYPE
73# define YYTOKENTYPE
74 /* Put the tokens into the symbol table, so that GDB and other debuggers
75 know about them. */
76 enum yytokentype {
77 ESINT64VAL = 258,
78 EUINT64VAL = 259,
79 LOCALVAL_ID = 260,
80 GLOBALVAL_ID = 261,
81 FPVAL = 262,
82 VOID = 263,
83 INTTYPE = 264,
84 FLOAT = 265,
85 DOUBLE = 266,
86 LABEL = 267,
87 TYPE = 268,
88 LOCALVAR = 269,
89 GLOBALVAR = 270,
90 LABELSTR = 271,
91 STRINGCONSTANT = 272,
92 ATSTRINGCONSTANT = 273,
93 IMPLEMENTATION = 274,
94 ZEROINITIALIZER = 275,
95 TRUETOK = 276,
96 FALSETOK = 277,
97 BEGINTOK = 278,
98 ENDTOK = 279,
99 DECLARE = 280,
100 DEFINE = 281,
101 GLOBAL = 282,
102 CONSTANT = 283,
103 SECTION = 284,
104 VOLATILE = 285,
105 TO = 286,
106 DOTDOTDOT = 287,
107 NULL_TOK = 288,
108 UNDEF = 289,
109 INTERNAL = 290,
110 LINKONCE = 291,
111 WEAK = 292,
112 APPENDING = 293,
113 DLLIMPORT = 294,
114 DLLEXPORT = 295,
115 EXTERN_WEAK = 296,
116 OPAQUE = 297,
117 EXTERNAL = 298,
118 TARGET = 299,
119 TRIPLE = 300,
120 ALIGN = 301,
121 DEPLIBS = 302,
122 CALL = 303,
123 TAIL = 304,
124 ASM_TOK = 305,
125 MODULE = 306,
126 SIDEEFFECT = 307,
127 CC_TOK = 308,
128 CCC_TOK = 309,
129 FASTCC_TOK = 310,
130 COLDCC_TOK = 311,
131 X86_STDCALLCC_TOK = 312,
132 X86_FASTCALLCC_TOK = 313,
133 DATALAYOUT = 314,
134 RET = 315,
135 BR = 316,
136 SWITCH = 317,
137 INVOKE = 318,
138 UNWIND = 319,
139 UNREACHABLE = 320,
140 ADD = 321,
141 SUB = 322,
142 MUL = 323,
143 UDIV = 324,
144 SDIV = 325,
145 FDIV = 326,
146 UREM = 327,
147 SREM = 328,
148 FREM = 329,
149 AND = 330,
150 OR = 331,
151 XOR = 332,
152 SHL = 333,
153 LSHR = 334,
154 ASHR = 335,
155 ICMP = 336,
156 FCMP = 337,
157 EQ = 338,
158 NE = 339,
159 SLT = 340,
160 SGT = 341,
161 SLE = 342,
162 SGE = 343,
163 ULT = 344,
164 UGT = 345,
165 ULE = 346,
166 UGE = 347,
167 OEQ = 348,
168 ONE = 349,
169 OLT = 350,
170 OGT = 351,
171 OLE = 352,
172 OGE = 353,
173 ORD = 354,
174 UNO = 355,
175 UEQ = 356,
176 UNE = 357,
177 MALLOC = 358,
178 ALLOCA = 359,
179 FREE = 360,
180 LOAD = 361,
181 STORE = 362,
182 GETELEMENTPTR = 363,
183 TRUNC = 364,
184 ZEXT = 365,
185 SEXT = 366,
186 FPTRUNC = 367,
187 FPEXT = 368,
188 BITCAST = 369,
189 UITOFP = 370,
190 SITOFP = 371,
191 FPTOUI = 372,
192 FPTOSI = 373,
193 INTTOPTR = 374,
194 PTRTOINT = 375,
195 PHI_TOK = 376,
196 SELECT = 377,
197 VAARG = 378,
198 EXTRACTELEMENT = 379,
199 INSERTELEMENT = 380,
200 SHUFFLEVECTOR = 381,
201 NORETURN = 382,
202 INREG = 383,
203 SRET = 384,
204 DEFAULT = 385,
205 HIDDEN = 386
206 };
207#endif
208/* Tokens. */
209#define ESINT64VAL 258
210#define EUINT64VAL 259
211#define LOCALVAL_ID 260
212#define GLOBALVAL_ID 261
213#define FPVAL 262
214#define VOID 263
215#define INTTYPE 264
216#define FLOAT 265
217#define DOUBLE 266
218#define LABEL 267
219#define TYPE 268
220#define LOCALVAR 269
221#define GLOBALVAR 270
222#define LABELSTR 271
223#define STRINGCONSTANT 272
224#define ATSTRINGCONSTANT 273
225#define IMPLEMENTATION 274
226#define ZEROINITIALIZER 275
227#define TRUETOK 276
228#define FALSETOK 277
229#define BEGINTOK 278
230#define ENDTOK 279
231#define DECLARE 280
232#define DEFINE 281
233#define GLOBAL 282
234#define CONSTANT 283
235#define SECTION 284
236#define VOLATILE 285
237#define TO 286
238#define DOTDOTDOT 287
239#define NULL_TOK 288
240#define UNDEF 289
241#define INTERNAL 290
242#define LINKONCE 291
243#define WEAK 292
244#define APPENDING 293
245#define DLLIMPORT 294
246#define DLLEXPORT 295
247#define EXTERN_WEAK 296
248#define OPAQUE 297
249#define EXTERNAL 298
250#define TARGET 299
251#define TRIPLE 300
252#define ALIGN 301
253#define DEPLIBS 302
254#define CALL 303
255#define TAIL 304
256#define ASM_TOK 305
257#define MODULE 306
258#define SIDEEFFECT 307
259#define CC_TOK 308
260#define CCC_TOK 309
261#define FASTCC_TOK 310
262#define COLDCC_TOK 311
263#define X86_STDCALLCC_TOK 312
264#define X86_FASTCALLCC_TOK 313
265#define DATALAYOUT 314
266#define RET 315
267#define BR 316
268#define SWITCH 317
269#define INVOKE 318
270#define UNWIND 319
271#define UNREACHABLE 320
272#define ADD 321
273#define SUB 322
274#define MUL 323
275#define UDIV 324
276#define SDIV 325
277#define FDIV 326
278#define UREM 327
279#define SREM 328
280#define FREM 329
281#define AND 330
282#define OR 331
283#define XOR 332
284#define SHL 333
285#define LSHR 334
286#define ASHR 335
287#define ICMP 336
288#define FCMP 337
289#define EQ 338
290#define NE 339
291#define SLT 340
292#define SGT 341
293#define SLE 342
294#define SGE 343
295#define ULT 344
296#define UGT 345
297#define ULE 346
298#define UGE 347
299#define OEQ 348
300#define ONE 349
301#define OLT 350
302#define OGT 351
303#define OLE 352
304#define OGE 353
305#define ORD 354
306#define UNO 355
307#define UEQ 356
308#define UNE 357
309#define MALLOC 358
310#define ALLOCA 359
311#define FREE 360
312#define LOAD 361
313#define STORE 362
314#define GETELEMENTPTR 363
315#define TRUNC 364
316#define ZEXT 365
317#define SEXT 366
318#define FPTRUNC 367
319#define FPEXT 368
320#define BITCAST 369
321#define UITOFP 370
322#define SITOFP 371
323#define FPTOUI 372
324#define FPTOSI 373
325#define INTTOPTR 374
326#define PTRTOINT 375
327#define PHI_TOK 376
328#define SELECT 377
329#define VAARG 378
330#define EXTRACTELEMENT 379
331#define INSERTELEMENT 380
332#define SHUFFLEVECTOR 381
333#define NORETURN 382
334#define INREG 383
335#define SRET 384
336#define DEFAULT 385
337#define HIDDEN 386
338
339
340
341
342/* Copy the first part of user declarations. */
343#line 14 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000344
345#include "ParserInternals.h"
346#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000347#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000348#include "llvm/Instructions.h"
349#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000350#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000351#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000352#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000353#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000354#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000355#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000356#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000357#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000358#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000359#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000360#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000361#ifndef NDEBUG
362#define YYDEBUG 1
363#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000364
Reid Spencere4f47592006-08-18 17:32:55 +0000365// The following is a gross hack. In order to rid the libAsmParser library of
366// exceptions, we have to have a way of getting the yyparse function to go into
367// an error situation. So, whenever we want an error to occur, the GenerateError
368// function (see bottom of file) sets TriggerError. Then, at the end of each
369// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
370// (a goto) to put YACC in error state. Furthermore, several calls to
371// GenerateError are made from inside productions and they must simulate the
372// previous exception behavior by exiting the production immediately. We have
373// replaced these with the GEN_ERROR macro which calls GeneratError and then
374// immediately invokes YYERROR. This would be so much cleaner if it was a
375// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000376static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000377#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000378#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
379
Reid Spencer68a24bd2005-08-27 18:50:39 +0000380int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
381int yylex(); // declaration" of xxx warnings.
382int yyparse();
383
384namespace llvm {
385 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000386#if YYDEBUG
387static cl::opt<bool>
388Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
389 cl::Hidden, cl::init(false));
390#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000391}
392using namespace llvm;
393
394static Module *ParserResult;
395
396// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
397// relating to upreferences in the input stream.
398//
399//#define DEBUG_UPREFS 1
400#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000401#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000402#else
403#define UR_OUT(X)
404#endif
405
406#define YYERROR_VERBOSE 1
407
Chris Lattnerb475c422005-11-12 18:22:38 +0000408static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000409
410
411// This contains info used when building the body of a function. It is
412// destroyed when the function is completed.
413//
414typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000415
Reid Spencer68a24bd2005-08-27 18:50:39 +0000416static void
417ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
418 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
419
420static struct PerModuleInfo {
421 Module *CurrentModule;
422 std::map<const Type *, ValueList> Values; // Module level numbered definitions
423 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000424 std::vector<PATypeHolder> Types;
425 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000426
427 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000428 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000429 /// that we can resolve them later and print error messages as appropriate.
430 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
431
432 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
433 // references to global values. Global values may be referenced before they
434 // are defined, and if so, the temporary object that they represent is held
435 // here. This is used for forward references of GlobalValues.
436 //
437 typedef std::map<std::pair<const PointerType *,
438 ValID>, GlobalValue*> GlobalRefsType;
439 GlobalRefsType GlobalRefs;
440
441 void ModuleDone() {
442 // If we could not resolve some functions at function compilation time
443 // (calls to functions before they are defined), resolve them now... Types
444 // are resolved when the constant pool has been completely parsed.
445 //
446 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000447 if (TriggerError)
448 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000449
450 // Check to make sure that all global value forward references have been
451 // resolved!
452 //
453 if (!GlobalRefs.empty()) {
454 std::string UndefinedReferences = "Unresolved global references exist:\n";
455
456 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
457 I != E; ++I) {
458 UndefinedReferences += " " + I->first.first->getDescription() + " " +
459 I->first.second.getName() + "\n";
460 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000461 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000462 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000463 }
464
465 Values.clear(); // Clear out function local definitions
466 Types.clear();
467 CurrentModule = 0;
468 }
469
Reid Spencer68a24bd2005-08-27 18:50:39 +0000470 // GetForwardRefForGlobal - Check to see if there is a forward reference
471 // for this global. If so, remove it from the GlobalRefs map and return it.
472 // If not, just return null.
473 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
474 // Check to see if there is a forward reference to this global variable...
475 // if there is, eliminate it and patch the reference to use the new def'n.
476 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
477 GlobalValue *Ret = 0;
478 if (I != GlobalRefs.end()) {
479 Ret = I->second;
480 GlobalRefs.erase(I);
481 }
482 return Ret;
483 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000484
485 bool TypeIsUnresolved(PATypeHolder* PATy) {
486 // If it isn't abstract, its resolved
487 const Type* Ty = PATy->get();
488 if (!Ty->isAbstract())
489 return false;
490 // Traverse the type looking for abstract types. If it isn't abstract then
491 // we don't need to traverse that leg of the type.
492 std::vector<const Type*> WorkList, SeenList;
493 WorkList.push_back(Ty);
494 while (!WorkList.empty()) {
495 const Type* Ty = WorkList.back();
496 SeenList.push_back(Ty);
497 WorkList.pop_back();
498 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
499 // Check to see if this is an unresolved type
500 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
501 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
502 for ( ; I != E; ++I) {
503 if (I->second.get() == OpTy)
504 return true;
505 }
506 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
507 const Type* TheTy = SeqTy->getElementType();
508 if (TheTy->isAbstract() && TheTy != Ty) {
509 std::vector<const Type*>::iterator I = SeenList.begin(),
510 E = SeenList.end();
511 for ( ; I != E; ++I)
512 if (*I == TheTy)
513 break;
514 if (I == E)
515 WorkList.push_back(TheTy);
516 }
517 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
518 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
519 const Type* TheTy = StrTy->getElementType(i);
520 if (TheTy->isAbstract() && TheTy != Ty) {
521 std::vector<const Type*>::iterator I = SeenList.begin(),
522 E = SeenList.end();
523 for ( ; I != E; ++I)
524 if (*I == TheTy)
525 break;
526 if (I == E)
527 WorkList.push_back(TheTy);
528 }
529 }
530 }
531 }
532 return false;
533 }
534
535
Reid Spencer68a24bd2005-08-27 18:50:39 +0000536} CurModule;
537
538static struct PerFunctionInfo {
539 Function *CurrentFunction; // Pointer to current function being created
540
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000541 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000542 std::map<const Type*, 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.
549 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
550 std::vector<BasicBlock*> NumberedBlocks;
551 unsigned NextBBNum;
552
553 inline PerFunctionInfo() {
554 CurrentFunction = 0;
555 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000556 Linkage = GlobalValue::ExternalLinkage;
557 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000558 }
559
560 inline void FunctionStart(Function *M) {
561 CurrentFunction = M;
562 NextBBNum = 0;
563 }
564
565 void FunctionDone() {
566 NumberedBlocks.clear();
567
568 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000569 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000570 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000571 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000572 return;
573 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000574
575 // Resolve all forward references now.
576 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
577
578 Values.clear(); // Clear out function local definitions
579 CurrentFunction = 0;
580 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000581 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000582 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000583 }
584} CurFun; // Info for the current function...
585
586static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
587
588
589//===----------------------------------------------------------------------===//
590// Code to handle definitions of all the types
591//===----------------------------------------------------------------------===//
592
593static int InsertValue(Value *V,
594 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
595 if (V->hasName()) return -1; // Is this a numbered definition?
596
597 // Yes, insert the value into the value table...
598 ValueList &List = ValueTab[V->getType()];
599 List.push_back(V);
600 return List.size()-1;
601}
602
603static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
604 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000605 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000606 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000607 if (D.Num < CurModule.Types.size())
608 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000609 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000610 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000611 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
612 D.destroy(); // Free old strdup'd memory...
613 return N;
614 }
615 break;
616 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000617 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000618 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000619 }
620
621 // If we reached here, we referenced either a symbol that we don't know about
622 // or an id number that hasn't been read yet. We may be referencing something
623 // forward, so just create an entry to be resolved later and get to it...
624 //
625 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
626
627
628 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000629 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000630 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000631 return 0;
632 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000633 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000634 return 0;
635 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000636 }
637
Reid Spencer861d9d62006-11-28 07:29:44 +0000638 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000639 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000640 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000641
Reid Spencer861d9d62006-11-28 07:29:44 +0000642 Type *Typ = OpaqueType::get();
643 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
644 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000645 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000646
Reid Spencer68a24bd2005-08-27 18:50:39 +0000647// getValNonImprovising - Look up the value specified by the provided type and
648// the provided ValID. If the value exists and has already been defined, return
649// it. Otherwise return null.
650//
651static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000652 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000653 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000654 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000655 return 0;
656 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000657
658 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000659 case ValID::LocalID: { // Is it a numbered definition?
660 // Module constants occupy the lowest numbered slots.
661 std::map<const Type*,ValueList>::iterator VI = CurFun.Values.find(Ty);
662 // Make sure that our type is within bounds.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000663 if (VI == CurFun.Values.end()) return 0;
664
Reid Spencer41dff5e2007-01-26 08:05:27 +0000665 // Check that the number is within bounds.
666 if (D.Num >= VI->second.size()) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000667
Reid Spencer41dff5e2007-01-26 08:05:27 +0000668 return VI->second[D.Num];
669 }
670 case ValID::GlobalID: { // Is it a numbered definition?
671 unsigned Num = D.Num;
672
673 // Module constants occupy the lowest numbered slots...
674 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
Reid Spenceref9b9a72007-02-05 20:47:22 +0000675 if (VI == CurModule.Values.end())
676 return 0;
677 if (D.Num >= VI->second.size())
678 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000679 return VI->second[Num];
680 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000681
682 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000683 if (!inFunctionScope())
684 return 0;
685 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
686 Value *N = SymTab.lookup(D.Name);
687 if (N == 0)
688 return 0;
689 if (N->getType() != Ty)
690 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000691
692 D.destroy(); // Free old strdup'd memory...
693 return N;
694 }
695 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000696 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
697 Value *N = SymTab.lookup(D.Name);
698 if (N == 0)
699 return 0;
700 if (N->getType() != Ty)
701 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000702
703 D.destroy(); // Free old strdup'd memory...
704 return N;
705 }
706
707 // Check to make sure that "Ty" is an integral type, and that our
708 // value will fit into the specified type...
709 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000710 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000711 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000712 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000713 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000714 return 0;
715 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000716 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000717
718 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000719 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
720 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000721 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000722 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000723 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000724 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000725 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000726 }
727 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000728 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000729 }
730
731 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000732 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000733 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000734 return 0;
735 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000736 return ConstantFP::get(Ty, D.ConstPoolFP);
737
738 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000739 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000740 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000741 return 0;
742 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000743 return ConstantPointerNull::get(cast<PointerType>(Ty));
744
745 case ValID::ConstUndefVal: // Is it an undef value?
746 return UndefValue::get(Ty);
747
Chris Lattner7aa61892005-12-21 17:53:23 +0000748 case ValID::ConstZeroVal: // Is it a zero value?
749 return Constant::getNullValue(Ty);
750
Reid Spencer68a24bd2005-08-27 18:50:39 +0000751 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000752 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000753 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000754 return 0;
755 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000756 return D.ConstantValue;
757
Chris Lattner0e9c3762006-01-25 22:27:16 +0000758 case ValID::InlineAsmVal: { // Inline asm expression
759 const PointerType *PTy = dyn_cast<PointerType>(Ty);
760 const FunctionType *FTy =
761 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000762 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000763 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000764 return 0;
765 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000766 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
767 D.IAD->HasSideEffects);
768 D.destroy(); // Free InlineAsmDescriptor.
769 return IA;
770 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000771 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000772 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000773 return 0;
774 } // End of switch
775
Reid Spencera9720f52007-02-05 17:04:00 +0000776 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000777 return 0;
778}
779
780// getVal - This function is identical to getValNonImprovising, except that if a
781// value is not already defined, it "improvises" by creating a placeholder var
782// that looks and acts just like the requested variable. When the value is
783// defined later, all uses of the placeholder variable are replaced with the
784// real thing.
785//
786static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000787 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000788 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000789 return 0;
790 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000791
792 // See if the value has already been defined.
793 Value *V = getValNonImprovising(Ty, ID);
794 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000795 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000796
Reid Spencer5b7e7532006-09-28 19:28:24 +0000797 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000798 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000799 return 0;
800 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000801
802 // If we reached here, we referenced either a symbol that we don't know about
803 // or an id number that hasn't been read yet. We may be referencing something
804 // forward, so just create an entry to be resolved later and get to it...
805 //
806 V = new Argument(Ty);
807
808 // Remember where this forward reference came from. FIXME, shouldn't we try
809 // to recycle these things??
810 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
811 llvmAsmlineno)));
812
813 if (inFunctionScope())
814 InsertValue(V, CurFun.LateResolveValues);
815 else
816 InsertValue(V, CurModule.LateResolveValues);
817 return V;
818}
819
820/// getBBVal - This is used for two purposes:
821/// * If isDefinition is true, a new basic block with the specified ID is being
822/// defined.
823/// * If isDefinition is true, this is a reference to a basic block, which may
824/// or may not be a forward reference.
825///
826static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
Reid Spencera9720f52007-02-05 17:04:00 +0000827 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000828
829 std::string Name;
830 BasicBlock *BB = 0;
831 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000832 default:
833 GenerateError("Illegal label reference " + ID.getName());
834 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000835 case ValID::LocalID: // Is it a numbered definition?
836 if (ID.Num >= CurFun.NumberedBlocks.size())
Reid Spencer68a24bd2005-08-27 18:50:39 +0000837 CurFun.NumberedBlocks.resize(ID.Num+1);
838 BB = CurFun.NumberedBlocks[ID.Num];
839 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000840 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000841 Name = ID.Name;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000842 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
843 if (N && N->getType()->getTypeID() == Type::LabelTyID)
Reid Spencer68a24bd2005-08-27 18:50:39 +0000844 BB = cast<BasicBlock>(N);
845 break;
846 }
847
848 // See if the block has already been defined.
849 if (BB) {
850 // If this is the definition of the block, make sure the existing value was
851 // just a forward reference. If it was a forward reference, there will be
852 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000853 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000854 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000855 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000856 return 0;
857 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000858
859 ID.destroy(); // Free strdup'd memory.
860 return BB;
861 }
862
863 // Otherwise this block has not been seen before.
864 BB = new BasicBlock("", CurFun.CurrentFunction);
Reid Spencer41dff5e2007-01-26 08:05:27 +0000865 if (ID.Type == ValID::LocalName) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000866 BB->setName(ID.Name);
867 } else {
868 CurFun.NumberedBlocks[ID.Num] = BB;
869 }
870
871 // If this is not a definition, keep track of it so we can use it as a forward
872 // reference.
873 if (!isDefinition) {
874 // Remember where this forward reference came from.
875 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
876 } else {
877 // The forward declaration could have been inserted anywhere in the
878 // function: insert it into the correct place now.
879 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
880 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
881 }
882 ID.destroy();
883 return BB;
884}
885
886
887//===----------------------------------------------------------------------===//
888// Code to handle forward references in instructions
889//===----------------------------------------------------------------------===//
890//
891// This code handles the late binding needed with statements that reference
892// values not defined yet... for example, a forward branch, or the PHI node for
893// a loop body.
894//
895// This keeps a table (CurFun.LateResolveValues) of all such forward references
896// and back patchs after we are done.
897//
898
899// ResolveDefinitions - If we could not resolve some defs at parsing
900// time (forward branches, phi functions for loops, etc...) resolve the
901// defs now...
902//
903static void
904ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
905 std::map<const Type*,ValueList> *FutureLateResolvers) {
906 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
907 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
908 E = LateResolvers.end(); LRI != E; ++LRI) {
909 ValueList &List = LRI->second;
910 while (!List.empty()) {
911 Value *V = List.back();
912 List.pop_back();
913
914 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
915 CurModule.PlaceHolderInfo.find(V);
Reid Spencera9720f52007-02-05 17:04:00 +0000916 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000917
918 ValID &DID = PHI->second.first;
919
920 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000921 if (TriggerError)
922 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000923 if (TheRealValue) {
924 V->replaceAllUsesWith(TheRealValue);
925 delete V;
926 CurModule.PlaceHolderInfo.erase(PHI);
927 } else if (FutureLateResolvers) {
928 // Functions have their unresolved items forwarded to the module late
929 // resolver table
930 InsertValue(V, *FutureLateResolvers);
931 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000932 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000933 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000934 "' of type '" + V->getType()->getDescription() + "'",
935 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000936 return;
937 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000938 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000939 itostr(DID.Num) + " of type '" +
940 V->getType()->getDescription() + "'",
941 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000942 return;
943 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000944 }
945 }
946 }
947
948 LateResolvers.clear();
949}
950
951// ResolveTypeTo - A brand new type was just declared. This means that (if
952// name is not null) things referencing Name can be resolved. Otherwise, things
953// refering to the number can be resolved. Do this now.
954//
955static void ResolveTypeTo(char *Name, const Type *ToTy) {
956 ValID D;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000957 if (Name) D = ValID::createLocalName(Name);
958 else D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +0000959
Reid Spencer861d9d62006-11-28 07:29:44 +0000960 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000961 CurModule.LateResolveTypes.find(D);
962 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000963 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000964 CurModule.LateResolveTypes.erase(I);
965 }
966}
967
968// setValueName - Set the specified value to the name given. The name may be
969// null potentially, in which case this is a noop. The string passed in is
970// assumed to be a malloc'd string buffer, and is free'd by this function.
971//
972static void setValueName(Value *V, char *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000973 if (!NameStr) return;
974 std::string Name(NameStr); // Copy string
975 free(NameStr); // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +0000976
Reid Spencer41dff5e2007-01-26 08:05:27 +0000977 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000978 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +0000979 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000980 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000981
Reid Spencera9720f52007-02-05 17:04:00 +0000982 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000983 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
984 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000985 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000986 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +0000987 return;
988 }
989
990 // Set the name.
991 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000992}
993
994/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
995/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000996static GlobalVariable *
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000997ParseGlobalVariable(char *NameStr,
998 GlobalValue::LinkageTypes Linkage,
999 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001000 bool isConstantGlobal, const Type *Ty,
1001 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001002 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001003 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001004 return 0;
1005 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001006
1007 const PointerType *PTy = PointerType::get(Ty);
1008
1009 std::string Name;
1010 if (NameStr) {
1011 Name = NameStr; // Copy string
1012 free(NameStr); // Free old string
1013 }
1014
1015 // See if this global value was forward referenced. If so, recycle the
1016 // object.
1017 ValID ID;
1018 if (!Name.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001019 ID = ValID::createGlobalName((char*)Name.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001020 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001021 ID = ValID::createGlobalID(CurModule.Values[PTy].size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001022 }
1023
1024 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1025 // Move the global to the end of the list, from whereever it was
1026 // previously inserted.
1027 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1028 CurModule.CurrentModule->getGlobalList().remove(GV);
1029 CurModule.CurrentModule->getGlobalList().push_back(GV);
1030 GV->setInitializer(Initializer);
1031 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001032 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001033 GV->setConstant(isConstantGlobal);
1034 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001035 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001036 }
1037
Reid Spenceref9b9a72007-02-05 20:47:22 +00001038 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001039 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001040 // if the global we're parsing has an initializer (is a definition) and
1041 // has external linkage.
1042 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1043 // If there is already a global with external linkage with this name
1044 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1045 // If we allow this GVar to get created, it will be renamed in the
1046 // symbol table because it conflicts with an existing GVar. We can't
1047 // allow redefinition of GVars whose linking indicates that their name
1048 // must stay the same. Issue the error.
1049 GenerateError("Redefinition of global variable named '" + Name +
1050 "' of type '" + Ty->getDescription() + "'");
1051 return 0;
1052 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001053 }
1054
1055 // Otherwise there is no existing GV to use, create one now.
1056 GlobalVariable *GV =
1057 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1058 CurModule.CurrentModule);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001059 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001060 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001061 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001062}
1063
1064// setTypeName - Set the specified type to the name given. The name may be
1065// null potentially, in which case this is a noop. The string passed in is
1066// assumed to be a malloc'd string buffer, and is freed by this function.
1067//
1068// This function returns true if the type has already been defined, but is
1069// allowed to be redefined in the specified context. If the name is a new name
1070// for the type plane, it is inserted and false is returned.
1071static bool setTypeName(const Type *T, char *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001072 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001073 if (NameStr == 0) return false;
1074
1075 std::string Name(NameStr); // Copy string
1076 free(NameStr); // Free old string
1077
1078 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001079 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001080 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001081 return false;
1082 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001083
1084 // Set the type name, checking for conflicts as we do so.
1085 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1086
1087 if (AlreadyExists) { // Inserting a name that is already defined???
1088 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001089 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090
1091 // There is only one case where this is allowed: when we are refining an
1092 // opaque type. In this case, Existing will be an opaque type.
1093 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1094 // We ARE replacing an opaque type!
1095 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1096 return true;
1097 }
1098
1099 // Otherwise, this is an attempt to redefine a type. That's okay if
1100 // the redefinition is identical to the original. This will be so if
1101 // Existing and T point to the same Type object. In this one case we
1102 // allow the equivalent redefinition.
1103 if (Existing == T) return true; // Yes, it's equal.
1104
1105 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001106 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001107 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001108 }
1109
1110 return false;
1111}
1112
1113//===----------------------------------------------------------------------===//
1114// Code for handling upreferences in type names...
1115//
1116
1117// TypeContains - Returns true if Ty directly contains E in it.
1118//
1119static bool TypeContains(const Type *Ty, const Type *E) {
1120 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1121 E) != Ty->subtype_end();
1122}
1123
1124namespace {
1125 struct UpRefRecord {
1126 // NestingLevel - The number of nesting levels that need to be popped before
1127 // this type is resolved.
1128 unsigned NestingLevel;
1129
1130 // LastContainedTy - This is the type at the current binding level for the
1131 // type. Every time we reduce the nesting level, this gets updated.
1132 const Type *LastContainedTy;
1133
1134 // UpRefTy - This is the actual opaque type that the upreference is
1135 // represented with.
1136 OpaqueType *UpRefTy;
1137
1138 UpRefRecord(unsigned NL, OpaqueType *URTy)
1139 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1140 };
1141}
1142
1143// UpRefs - A list of the outstanding upreferences that need to be resolved.
1144static std::vector<UpRefRecord> UpRefs;
1145
1146/// HandleUpRefs - Every time we finish a new layer of types, this function is
1147/// called. It loops through the UpRefs vector, which is a list of the
1148/// currently active types. For each type, if the up reference is contained in
1149/// the newly completed type, we decrement the level count. When the level
1150/// count reaches zero, the upreferenced type is the type that is passed in:
1151/// thus we can complete the cycle.
1152///
1153static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001154 // If Ty isn't abstract, or if there are no up-references in it, then there is
1155 // nothing to resolve here.
1156 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1157
Reid Spencer68a24bd2005-08-27 18:50:39 +00001158 PATypeHolder Ty(ty);
1159 UR_OUT("Type '" << Ty->getDescription() <<
1160 "' newly formed. Resolving upreferences.\n" <<
1161 UpRefs.size() << " upreferences active!\n");
1162
1163 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1164 // to zero), we resolve them all together before we resolve them to Ty. At
1165 // the end of the loop, if there is anything to resolve to Ty, it will be in
1166 // this variable.
1167 OpaqueType *TypeToResolve = 0;
1168
1169 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1170 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1171 << UpRefs[i].second->getDescription() << ") = "
1172 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1173 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1174 // Decrement level of upreference
1175 unsigned Level = --UpRefs[i].NestingLevel;
1176 UpRefs[i].LastContainedTy = Ty;
1177 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1178 if (Level == 0) { // Upreference should be resolved!
1179 if (!TypeToResolve) {
1180 TypeToResolve = UpRefs[i].UpRefTy;
1181 } else {
1182 UR_OUT(" * Resolving upreference for "
1183 << UpRefs[i].second->getDescription() << "\n";
1184 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1185 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1186 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1187 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1188 }
1189 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1190 --i; // Do not skip the next element...
1191 }
1192 }
1193 }
1194
1195 if (TypeToResolve) {
1196 UR_OUT(" * Resolving upreference for "
1197 << UpRefs[i].second->getDescription() << "\n";
1198 std::string OldName = TypeToResolve->getDescription());
1199 TypeToResolve->refineAbstractTypeTo(Ty);
1200 }
1201
1202 return Ty;
1203}
1204
Reid Spencer68a24bd2005-08-27 18:50:39 +00001205//===----------------------------------------------------------------------===//
1206// RunVMAsmParser - Define an interface to this parser
1207//===----------------------------------------------------------------------===//
1208//
Reid Spencer14310612006-12-31 05:40:51 +00001209static Module* RunParser(Module * M);
1210
Reid Spencer68a24bd2005-08-27 18:50:39 +00001211Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1212 set_scan_file(F);
1213
1214 CurFilename = Filename;
1215 return RunParser(new Module(CurFilename));
1216}
1217
1218Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1219 set_scan_string(AsmString);
1220
1221 CurFilename = "from_memory";
1222 if (M == NULL) {
1223 return RunParser(new Module (CurFilename));
1224 } else {
1225 return RunParser(M);
1226 }
1227}
1228
1229
Chris Lattner7d9801d2007-02-13 00:58:01 +00001230
1231/* Enabling traces. */
1232#ifndef YYDEBUG
1233# define YYDEBUG 0
1234#endif
1235
1236/* Enabling verbose error messages. */
1237#ifdef YYERROR_VERBOSE
1238# undef YYERROR_VERBOSE
1239# define YYERROR_VERBOSE 1
1240#else
1241# define YYERROR_VERBOSE 0
1242#endif
1243
1244/* Enabling the token table. */
1245#ifndef YYTOKEN_TABLE
1246# define YYTOKEN_TABLE 0
1247#endif
1248
1249#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
1250typedef union YYSTYPE
1251#line 901 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
1252{
Reid Spencer68a24bd2005-08-27 18:50:39 +00001253 llvm::Module *ModuleVal;
1254 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001255 llvm::BasicBlock *BasicBlockVal;
1256 llvm::TerminatorInst *TermInstVal;
1257 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001258 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001259
Reid Spencera132e042006-12-03 05:46:11 +00001260 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001261 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001262 llvm::PATypeHolder *TypeVal;
1263 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001264 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001265 llvm::ArgListType *ArgList;
1266 llvm::TypeWithAttrs TypeWithAttrs;
1267 llvm::TypeWithAttrsList *TypeWithAttrsList;
1268 llvm::ValueRefList *ValueRefList;
1269
Reid Spencer68a24bd2005-08-27 18:50:39 +00001270 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001271 std::list<std::pair<llvm::Value*,
1272 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001273 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001274 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001275
1276 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001277 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer14310612006-12-31 05:40:51 +00001278 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001279 int64_t SInt64Val;
1280 uint64_t UInt64Val;
1281 int SIntVal;
1282 unsigned UIntVal;
1283 double FPVal;
1284 bool BoolVal;
1285
1286 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001287 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001288
Reid Spencera132e042006-12-03 05:46:11 +00001289 llvm::Instruction::BinaryOps BinaryOpVal;
1290 llvm::Instruction::TermOps TermOpVal;
1291 llvm::Instruction::MemoryOps MemOpVal;
1292 llvm::Instruction::CastOps CastOpVal;
1293 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001294 llvm::ICmpInst::Predicate IPredicate;
1295 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner7d9801d2007-02-13 00:58:01 +00001296}
1297/* Line 193 of yacc.c. */
1298#line 1299 "llvmAsmParser.tab.c"
1299 YYSTYPE;
1300# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1301# define YYSTYPE_IS_DECLARED 1
1302# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001303#endif
1304
Reid Spencer41dff5e2007-01-26 08:05:27 +00001305
Reid Spencer68a24bd2005-08-27 18:50:39 +00001306
Chris Lattner7d9801d2007-02-13 00:58:01 +00001307/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001308
1309
Chris Lattner7d9801d2007-02-13 00:58:01 +00001310/* Line 216 of yacc.c. */
1311#line 1312 "llvmAsmParser.tab.c"
Reid Spencer41dff5e2007-01-26 08:05:27 +00001312
Chris Lattner7d9801d2007-02-13 00:58:01 +00001313#ifdef short
1314# undef short
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001315#endif
1316
Chris Lattner7d9801d2007-02-13 00:58:01 +00001317#ifdef YYTYPE_UINT8
1318typedef YYTYPE_UINT8 yytype_uint8;
Reid Spencer5cbf9852007-01-30 20:08:39 +00001319#else
Chris Lattner7d9801d2007-02-13 00:58:01 +00001320typedef unsigned char yytype_uint8;
Reid Spencer5cbf9852007-01-30 20:08:39 +00001321#endif
1322
Chris Lattner7d9801d2007-02-13 00:58:01 +00001323#ifdef YYTYPE_INT8
1324typedef YYTYPE_INT8 yytype_int8;
1325#elif (defined __STDC__ || defined __C99__FUNC__ \
1326 || defined __cplusplus || defined _MSC_VER)
1327typedef signed char yytype_int8;
1328#else
1329typedef short int yytype_int8;
1330#endif
1331
1332#ifdef YYTYPE_UINT16
1333typedef YYTYPE_UINT16 yytype_uint16;
1334#else
1335typedef unsigned short int yytype_uint16;
1336#endif
1337
1338#ifdef YYTYPE_INT16
1339typedef YYTYPE_INT16 yytype_int16;
1340#else
1341typedef short int yytype_int16;
1342#endif
1343
1344#ifndef YYSIZE_T
1345# ifdef __SIZE_TYPE__
1346# define YYSIZE_T __SIZE_TYPE__
1347# elif defined size_t
1348# define YYSIZE_T size_t
1349# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
1350 || defined __cplusplus || defined _MSC_VER)
1351# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1352# define YYSIZE_T size_t
1353# else
1354# define YYSIZE_T unsigned int
1355# endif
1356#endif
1357
1358#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
1359
1360#ifndef YY_
1361# if YYENABLE_NLS
1362# if ENABLE_NLS
1363# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1364# define YY_(msgid) dgettext ("bison-runtime", msgid)
1365# endif
1366# endif
1367# ifndef YY_
1368# define YY_(msgid) msgid
1369# endif
1370#endif
1371
1372/* Suppress unused-variable warnings by "using" E. */
1373#if ! defined lint || defined __GNUC__
1374# define YYUSE(e) ((void) (e))
1375#else
1376# define YYUSE(e) /* empty */
1377#endif
1378
1379/* Identity function, used to suppress warnings about constant conditions. */
1380#ifndef lint
1381# define YYID(n) (n)
1382#else
1383#if (defined __STDC__ || defined __C99__FUNC__ \
1384 || defined __cplusplus || defined _MSC_VER)
1385static int
1386YYID (int i)
1387#else
1388static int
1389YYID (i)
1390 int i;
1391#endif
1392{
1393 return i;
1394}
1395#endif
1396
1397#if ! defined yyoverflow || YYERROR_VERBOSE
1398
1399/* The parser invokes alloca or malloc; define the necessary symbols. */
1400
1401# ifdef YYSTACK_USE_ALLOCA
1402# if YYSTACK_USE_ALLOCA
1403# ifdef __GNUC__
1404# define YYSTACK_ALLOC __builtin_alloca
1405# elif defined __BUILTIN_VA_ARG_INCR
1406# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1407# elif defined _AIX
1408# define YYSTACK_ALLOC __alloca
1409# elif defined _MSC_VER
1410# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1411# define alloca _alloca
1412# else
1413# define YYSTACK_ALLOC alloca
1414# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1415 || defined __cplusplus || defined _MSC_VER)
1416# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1417# ifndef _STDLIB_H
1418# define _STDLIB_H 1
1419# endif
1420# endif
1421# endif
1422# endif
1423# endif
1424
1425# ifdef YYSTACK_ALLOC
1426 /* Pacify GCC's `empty if-body' warning. */
1427# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
1428# ifndef YYSTACK_ALLOC_MAXIMUM
1429 /* The OS might guarantee only one guard page at the bottom of the stack,
1430 and a page size can be as small as 4096 bytes. So we cannot safely
1431 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1432 to allow for a few compiler-allocated temporary stack slots. */
1433# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1434# endif
1435# else
1436# define YYSTACK_ALLOC YYMALLOC
1437# define YYSTACK_FREE YYFREE
1438# ifndef YYSTACK_ALLOC_MAXIMUM
1439# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1440# endif
1441# if (defined __cplusplus && ! defined _STDLIB_H \
1442 && ! ((defined YYMALLOC || defined malloc) \
1443 && (defined YYFREE || defined free)))
1444# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1445# ifndef _STDLIB_H
1446# define _STDLIB_H 1
1447# endif
1448# endif
1449# ifndef YYMALLOC
1450# define YYMALLOC malloc
1451# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1452 || defined __cplusplus || defined _MSC_VER)
1453void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1454# endif
1455# endif
1456# ifndef YYFREE
1457# define YYFREE free
1458# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
1459 || defined __cplusplus || defined _MSC_VER)
1460void free (void *); /* INFRINGES ON USER NAME SPACE */
1461# endif
1462# endif
1463# endif
1464#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
1465
1466
1467#if (! defined yyoverflow \
1468 && (! defined __cplusplus \
1469 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1470
1471/* A type that is properly aligned for any stack member. */
1472union yyalloc
1473{
1474 yytype_int16 yyss;
1475 YYSTYPE yyvs;
1476 };
1477
1478/* The size of the maximum gap between one aligned stack and the next. */
1479# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1480
1481/* The size of an array large to enough to hold all stacks, each with
1482 N elements. */
1483# define YYSTACK_BYTES(N) \
1484 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
1485 + YYSTACK_GAP_MAXIMUM)
1486
1487/* Copy COUNT objects from FROM to TO. The source and destination do
1488 not overlap. */
1489# ifndef YYCOPY
1490# if defined __GNUC__ && 1 < __GNUC__
1491# define YYCOPY(To, From, Count) \
1492 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1493# else
1494# define YYCOPY(To, From, Count) \
1495 do \
1496 { \
1497 YYSIZE_T yyi; \
1498 for (yyi = 0; yyi < (Count); yyi++) \
1499 (To)[yyi] = (From)[yyi]; \
1500 } \
1501 while (YYID (0))
1502# endif
1503# endif
1504
1505/* Relocate STACK from its old location to the new one. The
1506 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1507 elements in the stack, and YYPTR gives the new location of the
1508 stack. Advance YYPTR to a properly aligned location for the next
1509 stack. */
1510# define YYSTACK_RELOCATE(Stack) \
1511 do \
1512 { \
1513 YYSIZE_T yynewbytes; \
1514 YYCOPY (&yyptr->Stack, Stack, yysize); \
1515 Stack = &yyptr->Stack; \
1516 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1517 yyptr += yynewbytes / sizeof (*yyptr); \
1518 } \
1519 while (YYID (0))
1520
1521#endif
1522
1523/* YYFINAL -- State number of the termination state. */
1524#define YYFINAL 40
1525/* YYLAST -- Last index in YYTABLE. */
1526#define YYLAST 1439
1527
1528/* YYNTOKENS -- Number of terminals. */
1529#define YYNTOKENS 146
1530/* YYNNTS -- Number of nonterminals. */
1531#define YYNNTS 78
1532/* YYNRULES -- Number of rules. */
1533#define YYNRULES 284
1534/* YYNRULES -- Number of states. */
1535#define YYNSTATES 557
1536
1537/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1538#define YYUNDEFTOK 2
1539#define YYMAXUTOK 386
1540
1541#define YYTRANSLATE(YYX) \
1542 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1543
1544/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1545static const yytype_uint8 yytranslate[] =
1546{
1547 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1549 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1551 136, 137, 134, 2, 133, 2, 2, 2, 2, 2,
1552 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1553 141, 132, 142, 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, 138, 135, 140, 2, 2, 2, 2, 2, 145,
1557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1559 139, 2, 2, 143, 2, 144, 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, 2, 2, 2, 2,
1564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1568 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1570 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1572 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1573 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1574 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1575 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1576 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1577 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1578 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1579 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1580 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1581 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1582 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1583 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1584 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1585 125, 126, 127, 128, 129, 130, 131
1586};
1587
1588#if YYDEBUG
1589/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1590 YYRHS. */
1591static const yytype_uint16 yyprhs[] =
1592{
1593 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1594 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1595 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1596 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1597 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1598 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1599 119, 121, 122, 125, 126, 128, 130, 133, 134, 136,
1600 138, 140, 142, 144, 146, 148, 150, 151, 153, 154,
1601 156, 158, 159, 161, 163, 165, 167, 168, 170, 172,
1602 174, 176, 178, 181, 183, 185, 187, 189, 190, 193,
1603 195, 197, 198, 201, 202, 205, 206, 210, 213, 214,
1604 216, 217, 221, 223, 226, 228, 230, 232, 234, 236,
1605 238, 241, 243, 246, 252, 258, 264, 270, 274, 277,
1606 283, 288, 291, 293, 295, 297, 301, 303, 307, 309,
1607 310, 312, 316, 321, 325, 329, 334, 339, 343, 350,
1608 356, 359, 362, 365, 368, 371, 374, 377, 380, 383,
1609 386, 393, 399, 408, 415, 422, 430, 438, 445, 454,
1610 463, 467, 469, 471, 473, 475, 476, 478, 481, 482,
1611 486, 487, 491, 495, 497, 501, 505, 506, 513, 514,
1612 522, 523, 531, 534, 538, 540, 544, 548, 552, 556,
1613 558, 559, 565, 569, 571, 575, 577, 578, 588, 590,
1614 592, 597, 599, 601, 604, 608, 609, 611, 613, 615,
1615 617, 619, 621, 623, 625, 627, 631, 633, 639, 641,
1616 643, 645, 647, 649, 651, 654, 657, 660, 664, 667,
1617 668, 670, 673, 676, 680, 690, 700, 709, 724, 726,
1618 728, 735, 741, 744, 751, 759, 763, 769, 770, 771,
1619 775, 778, 780, 786, 792, 799, 806, 811, 818, 823,
1620 828, 835, 842, 845, 854, 856, 858, 859, 863, 870,
1621 874, 881, 884, 889, 896
1622};
1623
1624/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1625static const yytype_int16 yyrhs[] =
1626{
1627 186, 0, -1, 66, -1, 67, -1, 68, -1, 69,
1628 -1, 70, -1, 71, -1, 72, -1, 73, -1, 74,
1629 -1, 78, -1, 79, -1, 80, -1, 75, -1, 76,
1630 -1, 77, -1, 109, -1, 110, -1, 111, -1, 112,
1631 -1, 113, -1, 114, -1, 115, -1, 116, -1, 117,
1632 -1, 118, -1, 119, -1, 120, -1, 83, -1, 84,
1633 -1, 85, -1, 86, -1, 87, -1, 88, -1, 89,
1634 -1, 90, -1, 91, -1, 92, -1, 93, -1, 94,
1635 -1, 95, -1, 96, -1, 97, -1, 98, -1, 99,
1636 -1, 100, -1, 101, -1, 102, -1, 89, -1, 90,
1637 -1, 91, -1, 92, -1, 21, -1, 22, -1, 9,
1638 -1, 10, -1, 11, -1, 14, -1, 17, -1, 154,
1639 -1, -1, 154, 132, -1, -1, 15, -1, 18, -1,
1640 157, 132, -1, -1, 35, -1, 37, -1, 36, -1,
1641 38, -1, 40, -1, 39, -1, 41, -1, 43, -1,
1642 -1, 131, -1, -1, 39, -1, 41, -1, -1, 35,
1643 -1, 36, -1, 37, -1, 40, -1, -1, 54, -1,
1644 55, -1, 56, -1, 57, -1, 58, -1, 53, 4,
1645 -1, 110, -1, 111, -1, 128, -1, 129, -1, -1,
1646 166, 165, -1, 127, -1, 165, -1, -1, 168, 167,
1647 -1, -1, 46, 4, -1, -1, 133, 46, 4, -1,
1648 29, 17, -1, -1, 171, -1, -1, 133, 174, 173,
1649 -1, 171, -1, 46, 4, -1, 9, -1, 10, -1,
1650 11, -1, 12, -1, 42, -1, 175, -1, 176, 134,
1651 -1, 208, -1, 135, 4, -1, 176, 136, 180, 137,
1652 168, -1, 8, 136, 180, 137, 168, -1, 138, 4,
1653 139, 176, 140, -1, 141, 4, 139, 176, 142, -1,
1654 143, 181, 144, -1, 143, 144, -1, 141, 143, 181,
1655 144, 142, -1, 141, 143, 144, 142, -1, 176, 166,
1656 -1, 176, -1, 8, -1, 177, -1, 179, 133, 177,
1657 -1, 179, -1, 179, 133, 32, -1, 32, -1, -1,
1658 176, -1, 181, 133, 176, -1, 176, 138, 184, 140,
1659 -1, 176, 138, 140, -1, 176, 145, 17, -1, 176,
1660 141, 184, 142, -1, 176, 143, 184, 144, -1, 176,
1661 143, 144, -1, 176, 141, 143, 184, 144, 142, -1,
1662 176, 141, 143, 144, 142, -1, 176, 33, -1, 176,
1663 34, -1, 176, 208, -1, 176, 183, -1, 176, 20,
1664 -1, 152, 3, -1, 152, 4, -1, 9, 21, -1,
1665 9, 22, -1, 153, 7, -1, 149, 136, 182, 31,
1666 176, 137, -1, 108, 136, 182, 219, 137, -1, 122,
1667 136, 182, 133, 182, 133, 182, 137, -1, 147, 136,
1668 182, 133, 182, 137, -1, 148, 136, 182, 133, 182,
1669 137, -1, 81, 150, 136, 182, 133, 182, 137, -1,
1670 82, 151, 136, 182, 133, 182, 137, -1, 124, 136,
1671 182, 133, 182, 137, -1, 125, 136, 182, 133, 182,
1672 133, 182, 137, -1, 126, 136, 182, 133, 182, 133,
1673 182, 137, -1, 184, 133, 182, -1, 182, -1, 27,
1674 -1, 28, -1, 187, -1, -1, 188, -1, 187, 188,
1675 -1, -1, 26, 189, 204, -1, -1, 25, 190, 205,
1676 -1, 51, 50, 194, -1, 19, -1, 156, 13, 176,
1677 -1, 156, 13, 8, -1, -1, 158, 161, 185, 182,
1678 191, 173, -1, -1, 158, 159, 161, 185, 182, 192,
1679 173, -1, -1, 158, 160, 161, 185, 176, 193, 173,
1680 -1, 44, 195, -1, 47, 132, 196, -1, 17, -1,
1681 45, 132, 17, -1, 59, 132, 17, -1, 138, 197,
1682 140, -1, 197, 133, 17, -1, 17, -1, -1, 198,
1683 133, 176, 166, 155, -1, 176, 166, 155, -1, 198,
1684 -1, 198, 133, 32, -1, 32, -1, -1, 164, 178,
1685 157, 136, 199, 137, 168, 172, 169, -1, 23, -1,
1686 143, -1, 163, 161, 200, 201, -1, 24, -1, 144,
1687 -1, 211, 203, -1, 162, 161, 200, -1, -1, 52,
1688 -1, 3, -1, 4, -1, 7, -1, 21, -1, 22,
1689 -1, 33, -1, 34, -1, 20, -1, 141, 184, 142,
1690 -1, 183, -1, 50, 206, 17, 133, 17, -1, 5,
1691 -1, 6, -1, 154, -1, 157, -1, 208, -1, 207,
1692 -1, 176, 209, -1, 211, 212, -1, 202, 212, -1,
1693 213, 156, 214, -1, 213, 216, -1, -1, 16, -1,
1694 60, 210, -1, 60, 8, -1, 61, 12, 209, -1,
1695 61, 9, 209, 133, 12, 209, 133, 12, 209, -1,
1696 62, 152, 209, 133, 12, 209, 138, 215, 140, -1,
1697 62, 152, 209, 133, 12, 209, 138, 140, -1, 63,
1698 164, 178, 209, 136, 218, 137, 168, 31, 12, 209,
1699 64, 12, 209, -1, 64, -1, 65, -1, 215, 152,
1700 207, 133, 12, 209, -1, 152, 207, 133, 12, 209,
1701 -1, 156, 221, -1, 176, 138, 209, 133, 209, 140,
1702 -1, 217, 133, 138, 209, 133, 209, 140, -1, 176,
1703 209, 166, -1, 218, 133, 176, 209, 166, -1, -1,
1704 -1, 219, 133, 210, -1, 49, 48, -1, 48, -1,
1705 147, 176, 209, 133, 209, -1, 148, 176, 209, 133,
1706 209, -1, 81, 150, 176, 209, 133, 209, -1, 82,
1707 151, 176, 209, 133, 209, -1, 149, 210, 31, 176,
1708 -1, 122, 210, 133, 210, 133, 210, -1, 123, 210,
1709 133, 176, -1, 124, 210, 133, 210, -1, 125, 210,
1710 133, 210, 133, 210, -1, 126, 210, 133, 210, 133,
1711 210, -1, 121, 217, -1, 220, 164, 178, 209, 136,
1712 218, 137, 168, -1, 223, -1, 30, -1, -1, 103,
1713 176, 170, -1, 103, 176, 133, 9, 209, 170, -1,
1714 104, 176, 170, -1, 104, 176, 133, 9, 209, 170,
1715 -1, 105, 210, -1, 222, 106, 176, 209, -1, 222,
1716 107, 210, 133, 176, 209, -1, 108, 176, 209, 219,
1717 -1
1718};
1719
1720/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1721static const yytype_uint16 yyrline[] =
1722{
1723 0, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048,
1724 1048, 1049, 1049, 1049, 1049, 1049, 1049, 1050, 1050, 1050,
1725 1050, 1050, 1050, 1051, 1051, 1051, 1051, 1051, 1051, 1054,
1726 1054, 1055, 1055, 1056, 1056, 1057, 1057, 1058, 1058, 1062,
1727 1062, 1063, 1063, 1064, 1064, 1065, 1065, 1066, 1066, 1067,
1728 1067, 1068, 1068, 1069, 1070, 1075, 1076, 1076, 1078, 1078,
1729 1079, 1079, 1083, 1087, 1092, 1092, 1094, 1098, 1104, 1105,
1730 1106, 1107, 1108, 1112, 1113, 1114, 1118, 1119, 1123, 1124,
1731 1125, 1129, 1130, 1131, 1132, 1133, 1136, 1137, 1138, 1139,
1732 1140, 1141, 1142, 1149, 1150, 1151, 1152, 1155, 1156, 1161,
1733 1162, 1165, 1166, 1173, 1174, 1180, 1181, 1189, 1197, 1198,
1734 1203, 1204, 1205, 1210, 1223, 1223, 1223, 1223, 1226, 1230,
1735 1234, 1241, 1246, 1254, 1272, 1290, 1295, 1307, 1317, 1321,
1736 1331, 1338, 1345, 1352, 1357, 1362, 1369, 1370, 1377, 1384,
1737 1392, 1397, 1408, 1436, 1452, 1481, 1509, 1534, 1553, 1578,
1738 1597, 1609, 1616, 1682, 1692, 1702, 1708, 1714, 1719, 1724,
1739 1732, 1744, 1766, 1774, 1780, 1791, 1796, 1801, 1807, 1813,
1740 1822, 1826, 1834, 1834, 1845, 1850, 1858, 1859, 1863, 1863,
1741 1867, 1867, 1870, 1873, 1885, 1909, 1920, 1920, 1930, 1930,
1742 1938, 1938, 1948, 1951, 1957, 1970, 1974, 1979, 1981, 1986,
1743 1991, 2000, 2010, 2021, 2025, 2034, 2043, 2048, 2160, 2160,
1744 2162, 2171, 2171, 2173, 2178, 2190, 2194, 2199, 2203, 2207,
1745 2211, 2215, 2219, 2223, 2227, 2231, 2256, 2260, 2274, 2278,
1746 2282, 2286, 2292, 2292, 2298, 2307, 2311, 2320, 2330, 2339,
1747 2351, 2364, 2368, 2372, 2377, 2387, 2406, 2415, 2482, 2486,
1748 2493, 2504, 2517, 2527, 2538, 2548, 2556, 2564, 2567, 2568,
1749 2575, 2579, 2584, 2605, 2622, 2635, 2648, 2660, 2668, 2675,
1750 2681, 2687, 2693, 2708, 2772, 2777, 2781, 2788, 2795, 2803,
1751 2810, 2818, 2826, 2840, 2857
1752};
1753#endif
1754
1755#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1756/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1757 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1758static const char *const yytname[] =
1759{
1760 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL",
1761 "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE", "FLOAT",
1762 "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1763 "STRINGCONSTANT", "ATSTRINGCONSTANT", "IMPLEMENTATION",
1764 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1765 "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1766 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1767 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1768 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
1769 "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
1770 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1771 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1772 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
1773 "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
1774 "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
1775 "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
1776 "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
1777 "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
1778 "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
1779 "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "DEFAULT",
1780 "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
1781 "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
1782 "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType",
1783 "FPType", "LocalName", "OptLocalName", "OptLocalAssign", "GlobalName",
1784 "OptGlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
1785 "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
1786 "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
1787 "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
1788 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
1789 "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
1790 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "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 yytype_uint16 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, 61, 44, 42, 92, 40, 41, 91, 120,
1821 93, 60, 62, 123, 125, 99
1822};
1823# endif
1824
1825/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1826static const yytype_uint8 yyr1[] =
1827{
1828 0, 146, 147, 147, 147, 147, 147, 147, 147, 147,
1829 147, 148, 148, 148, 148, 148, 148, 149, 149, 149,
1830 149, 149, 149, 149, 149, 149, 149, 149, 149, 150,
1831 150, 150, 150, 150, 150, 150, 150, 150, 150, 151,
1832 151, 151, 151, 151, 151, 151, 151, 151, 151, 151,
1833 151, 151, 151, 151, 151, 152, 153, 153, 154, 154,
1834 155, 155, 156, 156, 157, 157, 158, 158, 159, 159,
1835 159, 159, 159, 160, 160, 160, 161, 161, 162, 162,
1836 162, 163, 163, 163, 163, 163, 164, 164, 164, 164,
1837 164, 164, 164, 165, 165, 165, 165, 166, 166, 167,
1838 167, 168, 168, 169, 169, 170, 170, 171, 172, 172,
1839 173, 173, 174, 174, 175, 175, 175, 175, 176, 176,
1840 176, 176, 176, 176, 176, 176, 176, 176, 176, 176,
1841 176, 177, 178, 178, 179, 179, 180, 180, 180, 180,
1842 181, 181, 182, 182, 182, 182, 182, 182, 182, 182,
1843 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
1844 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1845 184, 184, 185, 185, 186, 186, 187, 187, 189, 188,
1846 190, 188, 188, 188, 188, 188, 191, 188, 192, 188,
1847 193, 188, 188, 188, 194, 195, 195, 196, 197, 197,
1848 197, 198, 198, 199, 199, 199, 199, 200, 201, 201,
1849 202, 203, 203, 204, 205, 206, 206, 207, 207, 207,
1850 207, 207, 207, 207, 207, 207, 207, 207, 208, 208,
1851 208, 208, 209, 209, 210, 211, 211, 212, 213, 213,
1852 213, 214, 214, 214, 214, 214, 214, 214, 214, 214,
1853 215, 215, 216, 217, 217, 218, 218, 218, 219, 219,
1854 220, 220, 221, 221, 221, 221, 221, 221, 221, 221,
1855 221, 221, 221, 221, 221, 222, 222, 223, 223, 223,
1856 223, 223, 223, 223, 223
1857};
1858
1859/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1860static const yytype_uint8 yyr2[] =
1861{
1862 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1863 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1864 1, 1, 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, 0, 2, 0, 1, 1, 2, 0, 1, 1,
1869 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
1870 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
1871 1, 1, 2, 1, 1, 1, 1, 0, 2, 1,
1872 1, 0, 2, 0, 2, 0, 3, 2, 0, 1,
1873 0, 3, 1, 2, 1, 1, 1, 1, 1, 1,
1874 2, 1, 2, 5, 5, 5, 5, 3, 2, 5,
1875 4, 2, 1, 1, 1, 3, 1, 3, 1, 0,
1876 1, 3, 4, 3, 3, 4, 4, 3, 6, 5,
1877 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1878 6, 5, 8, 6, 6, 7, 7, 6, 8, 8,
1879 3, 1, 1, 1, 1, 0, 1, 2, 0, 3,
1880 0, 3, 3, 1, 3, 3, 0, 6, 0, 7,
1881 0, 7, 2, 3, 1, 3, 3, 3, 3, 1,
1882 0, 5, 3, 1, 3, 1, 0, 9, 1, 1,
1883 4, 1, 1, 2, 3, 0, 1, 1, 1, 1,
1884 1, 1, 1, 1, 1, 3, 1, 5, 1, 1,
1885 1, 1, 1, 1, 2, 2, 2, 3, 2, 0,
1886 1, 2, 2, 3, 9, 9, 8, 14, 1, 1,
1887 6, 5, 2, 6, 7, 3, 5, 0, 0, 3,
1888 2, 1, 5, 5, 6, 6, 4, 6, 4, 4,
1889 6, 6, 2, 8, 1, 1, 0, 3, 6, 3,
1890 6, 2, 4, 6, 4
1891};
1892
1893/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1894 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1895 means the default is an error. */
1896static const yytype_uint16 yydefact[] =
1897{
1898 67, 58, 64, 59, 65, 183, 180, 178, 0, 0,
1899 0, 0, 0, 0, 76, 0, 67, 176, 78, 81,
1900 0, 0, 192, 0, 0, 62, 0, 66, 68, 70,
1901 69, 71, 73, 72, 74, 75, 77, 76, 76, 0,
1902 1, 177, 79, 80, 76, 181, 82, 83, 84, 85,
1903 76, 239, 179, 239, 0, 0, 200, 193, 194, 182,
1904 228, 229, 185, 114, 115, 116, 117, 118, 0, 0,
1905 0, 0, 230, 231, 119, 184, 121, 0, 0, 172,
1906 173, 0, 86, 86, 240, 236, 63, 211, 212, 213,
1907 235, 195, 196, 199, 0, 139, 122, 0, 0, 0,
1908 0, 128, 140, 0, 120, 139, 0, 0, 114, 115,
1909 116, 0, 0, 0, 186, 0, 87, 88, 89, 90,
1910 91, 0, 214, 0, 276, 238, 0, 197, 138, 97,
1911 134, 136, 0, 0, 0, 0, 0, 0, 127, 0,
1912 188, 190, 157, 158, 155, 156, 159, 154, 150, 151,
1913 2, 3, 4, 5, 6, 7, 8, 9, 10, 14,
1914 15, 16, 11, 12, 13, 0, 0, 0, 17, 18,
1915 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1917 0, 153, 152, 110, 92, 133, 132, 0, 208, 209,
1918 210, 275, 261, 0, 0, 0, 0, 86, 248, 249,
1919 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1920 0, 0, 0, 0, 0, 237, 86, 252, 0, 274,
1921 198, 131, 0, 101, 0, 0, 130, 0, 141, 101,
1922 110, 110, 29, 30, 31, 32, 33, 34, 35, 36,
1923 37, 38, 0, 53, 54, 49, 50, 51, 52, 39,
1924 40, 41, 42, 43, 44, 45, 46, 47, 48, 0,
1925 0, 0, 0, 0, 0, 143, 171, 0, 0, 0,
1926 147, 0, 144, 0, 0, 0, 0, 187, 0, 260,
1927 242, 0, 241, 0, 0, 55, 0, 0, 0, 0,
1928 105, 105, 281, 0, 0, 272, 0, 0, 0, 0,
1929 0, 0, 0, 0, 0, 0, 0, 93, 94, 95,
1930 96, 98, 137, 135, 124, 125, 126, 129, 123, 189,
1931 191, 0, 0, 258, 0, 0, 0, 0, 0, 142,
1932 128, 140, 0, 145, 146, 0, 0, 0, 0, 0,
1933 112, 110, 206, 217, 218, 219, 224, 220, 221, 222,
1934 223, 215, 0, 226, 233, 232, 234, 0, 243, 0,
1935 0, 0, 0, 0, 277, 0, 279, 258, 0, 0,
1936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1937 0, 99, 100, 102, 0, 0, 0, 0, 0, 0,
1938 0, 170, 149, 0, 0, 0, 0, 107, 113, 111,
1939 205, 97, 203, 0, 216, 0, 0, 0, 0, 0,
1940 0, 0, 0, 0, 0, 284, 0, 0, 0, 268,
1941 269, 0, 0, 0, 0, 266, 0, 282, 0, 0,
1942 0, 0, 161, 0, 0, 0, 0, 148, 0, 0,
1943 0, 61, 0, 101, 0, 225, 0, 0, 257, 0,
1944 0, 105, 106, 105, 0, 0, 0, 0, 0, 262,
1945 263, 257, 0, 0, 0, 259, 0, 167, 0, 0,
1946 163, 164, 160, 60, 202, 204, 97, 108, 0, 0,
1947 0, 0, 0, 264, 265, 0, 278, 280, 0, 0,
1948 267, 270, 271, 0, 283, 165, 166, 0, 0, 0,
1949 61, 109, 103, 227, 0, 0, 97, 0, 101, 253,
1950 0, 101, 162, 168, 169, 201, 0, 207, 0, 246,
1951 0, 0, 255, 0, 0, 254, 273, 104, 244, 0,
1952 245, 0, 97, 0, 0, 0, 256, 0, 0, 0,
1953 0, 251, 0, 0, 250, 0, 247
1954};
1955
1956/* YYDEFGOTO[NTERM-NUM]. */
1957static const yytype_int16 yydefgoto[] =
1958{
1959 -1, 188, 189, 190, 252, 269, 111, 112, 72, 484,
1960 12, 73, 14, 37, 38, 39, 44, 50, 121, 321,
1961 231, 393, 324, 527, 374, 350, 512, 287, 351, 74,
1962 113, 130, 197, 131, 132, 103, 276, 363, 277, 81,
1963 15, 16, 17, 19, 18, 193, 240, 241, 59, 22,
1964 57, 94, 412, 413, 122, 200, 51, 89, 52, 45,
1965 415, 364, 76, 366, 292, 53, 85, 86, 225, 531,
1966 125, 305, 492, 396, 226, 227, 228, 229
1967};
1968
1969/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1970 STATE-NUM. */
1971#define YYPACT_NINF -399
1972static const yytype_int16 yypact[] =
1973{
1974 406, -399, -399, -399, -399, -399, -399, -399, -26, -114,
1975 -16, -53, 92, -11, 54, 136, 526, -399, 247, 173,
1976 43, 49, -399, 62, 194, -399, 814, -399, -399, -399,
1977 -399, -399, -399, -399, -399, -399, -399, 134, 134, 99,
1978 -399, -399, -399, -399, 134, -399, -399, -399, -399, -399,
1979 134, 212, -399, -1, 219, 225, 253, -399, -399, -399,
1980 -399, -399, 135, -399, -399, -399, -399, -399, 271, 275,
1981 3, 33, -399, -399, -399, 160, -399, 99, 99, -399,
1982 -399, 1029, 287, 287, -399, -399, 220, -399, -399, -399,
1983 -399, -399, -399, -399, 20, 1071, -399, 141, 148, 105,
1984 135, -399, 160, -75, -399, 1071, 1029, 1174, 32, 286,
1985 293, 151, 294, 590, -399, 298, -399, -399, -399, -399,
1986 -399, 1190, -399, -13, 1313, -399, 289, -399, -399, 160,
1987 -399, 170, 167, 1174, 1174, 165, -68, 1174, -399, 174,
1988 -399, 160, -399, -399, -399, -399, -399, -399, -399, -399,
1989 -399, -399, -399, -399, -399, -399, -399, -399, -399, -399,
1990 -399, -399, -399, -399, -399, 495, 591, 176, -399, -399,
1991 -399, -399, -399, -399, -399, -399, -399, -399, -399, -399,
1992 177, 178, 182, 183, 776, 1212, 123, 305, 187, 188,
1993 189, -399, -399, 193, -399, 135, 160, 266, -399, -399,
1994 -399, -399, -399, 284, 1229, 283, 325, 287, -399, -399,
1995 495, 591, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
1996 1174, 1174, 1174, 1174, 1174, -399, 287, -399, 144, -399,
1997 -399, -4, 1110, -399, -63, -110, -399, 204, 160, -399,
1998 193, 193, -399, -399, -399, -399, -399, -399, -399, -399,
1999 -399, -399, 211, -399, -399, -399, -399, -399, -399, -399,
2000 -399, -399, -399, -399, -399, -399, -399, -399, -399, 214,
2001 1029, 1029, 1029, 1029, 1029, -399, -399, 79, 494, -111,
2002 -399, -66, -399, 1029, 1029, 1029, 39, -399, 216, -399,
2003 135, 733, -399, 858, 858, -399, 858, 1190, 1174, 1174,
2004 50, 111, -399, 733, 97, 215, 230, 231, 232, 233,
2005 234, 733, 733, 322, 1190, 1174, 1174, -399, -399, -399,
2006 -399, -399, -399, -399, -27, -399, -399, -399, -27, -399,
2007 -399, 1029, 1029, -399, 235, 236, 239, 240, 1029, -399,
2008 237, 590, 26, -399, -399, 241, 242, 345, 360, 374,
2009 -399, 193, 1126, -399, -399, -399, -399, -399, -399, -399,
2010 -399, 328, 1029, -399, -399, -399, -399, 249, -399, 252,
2011 858, 733, 733, 11, -399, 18, -399, -399, 858, 250,
2012 1174, 1174, 1174, 1174, 1174, 256, 257, 1174, 858, 733,
2013 259, -399, -399, -399, 262, 264, -34, 1029, 1029, 1029,
2014 1029, -399, -399, 258, 1029, 1029, 1174, -399, -399, -399,
2015 -399, 160, 265, 267, -399, 384, -61, 390, 393, 272,
2016 281, 282, 858, 413, 858, 295, 296, 858, 297, 160,
2017 -399, 301, 302, 858, 858, 160, 300, -399, 1174, 1029,
2018 1029, 1174, -399, 304, 285, 306, 307, -399, 308, 310,
2019 118, 38, 1145, -399, 311, -399, 858, 858, 1174, 858,
2020 858, 315, -399, 315, 858, 316, 1174, 1174, 1174, -399,
2021 -399, 1174, 733, 317, 319, -399, 1029, -399, 1029, 1029,
2022 -399, -399, -399, -399, -399, -399, 160, 149, 421, 326,
2023 314, 733, 19, -399, -399, 412, -399, -399, 321, 858,
2024 -399, -399, -399, 36, -399, -399, -399, 327, 329, 330,
2025 38, -399, 416, -399, 451, 2, -399, 1174, -399, -399,
2026 333, -399, -399, -399, -399, -399, 461, -399, 858, -399,
2027 982, 5, -4, 733, 210, -399, -27, -399, -399, 335,
2028 -399, 982, -399, 457, 464, 344, -4, 858, 858, 468,
2029 417, -399, 858, 471, -399, 858, -399
2030};
2031
2032/* YYPGOTO[NTERM-NUM]. */
2033static const yytype_int16 yypgoto[] =
2034{
2035 -399, 361, 362, 363, 274, 279, -198, -399, 0, -19,
2036 407, 9, -399, -399, -399, 113, -399, -399, -177, -307,
2037 -398, -399, -236, -399, -299, 7, -399, -212, -399, -399,
2038 -25, 263, -210, -399, 391, 398, -69, -109, -180, 179,
2039 -399, -399, 482, -399, -399, -399, -399, -399, -399, -399,
2040 -399, -399, -399, -399, 418, -399, -399, -399, -399, -399,
2041 -399, -369, -73, 100, -158, -399, 454, -399, -399, -399,
2042 -399, -399, 42, 137, -399, -399, -399, -399
2043};
2044
2045/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2046 positive, shift that token. If negative, reduce the rule which
2047 number is the opposite. If zero, do what YYDEFACT says.
2048 If YYTABLE_NINF, syntax error. */
2049#define YYTABLE_NINF -176
2050static const yytype_int16 yytable[] =
2051{
2052 11, 75, 376, 328, 191, 279, 281, 98, 296, 13,
2053 198, 295, 114, 451, 295, 84, 11, 392, 23, 20,
2054 422, 392, 338, 87, 104, 13, 105, 424, 329, 330,
2055 297, 343, 326, 21, 24, -55, -55, 140, 60, 61,
2056 192, 100, 63, 64, 65, 66, 102, 1, 2, 314,
2057 3, 4, 1, 142, 143, 3, 302, 423, 137, 306,
2058 307, 308, 309, 310, 423, 137, 313, 338, 348, 138,
2059 129, 104, 338, 105, 102, 67, 237, 325, 344, 25,
2060 129, 455, 141, 317, 318, 349, 11, 370, 510, 28,
2061 29, 30, 31, 32, 33, 34, 196, 35, 342, 441,
2062 391, 319, 320, 442, 388, 26, 317, 318, 234, 235,
2063 60, 61, 238, 100, 63, 64, 65, 66, 532, 1,
2064 2, 27, 3, 4, 319, 320, 79, 80, 60, 61,
2065 199, 100, 108, 109, 110, 66, 40, 1, 2, 409,
2066 3, 4, 529, 88, 546, 540, 99, 67, 317, 318,
2067 77, 78, 517, 126, 144, 145, 518, 82, 390, 338,
2068 127, 539, 496, 83, 497, 67, 319, 320, 68, 517,
2069 403, 69, 545, 521, 70, 54, 71, 101, 348, 291,
2070 392, 55, 416, 373, 104, 36, 105, 300, 301, 291,
2071 303, 304, 291, 291, 291, 291, 291, 311, 312, 291,
2072 56, 333, 334, 335, 336, 337, 288, 129, 46, 47,
2073 48, 58, 338, 49, 345, 346, 347, 487, 365, 339,
2074 365, 365, 428, 365, 430, 431, 432, 392, 84, 392,
2075 365, 104, 191, 105, 1, 378, 91, 3, 365, 365,
2076 68, 543, 92, 69, 375, 104, 70, 105, 71, 135,
2077 315, 316, 104, 341, 105, 482, 106, 107, 68, 317,
2078 318, 69, 394, 395, 70, 36, 71, 280, 192, 401,
2079 93, 95, 196, 371, 372, 96, 391, 319, 320, 97,
2080 133, 2, 534, 475, 4, 536, 42, 134, 43, 196,
2081 389, 291, 293, -56, 104, 294, 105, 365, 365, 365,
2082 -57, 146, 194, 232, 233, 365, 230, 236, 500, 501,
2083 502, 239, 270, 271, 272, 365, 365, 530, 273, 274,
2084 317, 318, 282, 283, 284, 285, 286, 411, 443, 444,
2085 445, 446, 289, 541, 295, 448, 449, 391, 319, 320,
2086 115, 116, 117, 118, 119, 120, 327, 331, 379, 365,
2087 332, 365, 352, 387, 365, 291, 429, 291, 291, 291,
2088 365, 365, 435, 380, 381, 382, 383, 384, 397, 398,
2089 473, 474, 399, 400, 404, 405, 406, 407, 408, 402,
2090 414, 450, 417, 365, 365, 418, 365, 365, 427, 433,
2091 434, 365, 438, 367, 368, 439, 369, 440, 452, 365,
2092 447, 454, 456, 377, 453, 457, -175, 507, 458, 508,
2093 509, 385, 386, 472, 459, 460, 291, 462, 365, -63,
2094 1, 2, 477, 3, 4, 5, 365, 486, 441, 464,
2095 466, 6, 7, 491, 467, 468, 471, 476, 513, 478,
2096 479, 291, 291, 291, 488, 480, 491, 481, 495, 499,
2097 8, 483, 515, 9, 505, 365, 506, 10, 423, 514,
2098 365, 519, 526, 528, 522, 537, 523, 524, 544, 547,
2099 419, 420, 421, 535, 365, 365, 548, 549, 426, 365,
2100 552, 553, 365, 555, 298, 222, 223, 224, 436, 437,
2101 299, 525, 533, 124, 511, 323, 139, 136, 41, 60,
2102 61, 123, 100, 108, 109, 110, 66, 90, 1, 2,
2103 483, 3, 4, 503, 425, 0, 0, 0, 0, 0,
2104 0, 0, 461, 0, 463, 0, -174, 465, 0, 0,
2105 0, 0, 0, 469, 470, 0, 67, 0, 0, -63,
2106 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2107 0, 6, 7, 0, 0, 0, 489, 490, 0, 493,
2108 494, 0, 0, 0, 498, 0, 0, 0, 0, 0,
2109 8, 0, 504, 9, 0, 0, 0, 10, 242, 243,
2110 244, 245, 246, 247, 248, 249, 250, 251, 0, 0,
2111 0, 516, 0, 0, 0, 60, 61, 0, 0, 520,
2112 0, 0, 0, 0, 1, 2, 0, 3, 4, 0,
2113 147, 0, 253, 254, 0, 0, 0, 0, 0, 0,
2114 0, 0, 0, 148, 149, 0, 0, 0, 538, 68,
2115 0, 0, 69, 542, 0, 70, 0, 71, 340, 0,
2116 0, 0, 0, 0, 0, 0, 0, 550, 551, 0,
2117 0, 0, 554, 0, 0, 556, 150, 151, 152, 153,
2118 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2119 164, 165, 166, 0, 0, 0, 0, 0, 0, 0,
2120 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
2121 265, 266, 267, 268, 0, 0, 0, 0, 167, 168,
2122 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
2123 179, 0, 180, 0, 181, 182, 183, 0, 0, 0,
2124 0, 0, 0, 0, 104, 0, 105, 0, 184, 0,
2125 0, 185, 0, 186, 0, 187, 353, 354, 60, 61,
2126 355, 0, 0, 0, 0, 0, 0, 1, 2, 0,
2127 3, 4, 0, 356, 357, 358, 0, 0, 0, 0,
2128 0, 0, 0, 0, 0, 0, 359, 360, 0, 0,
2129 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2130 0, 60, 61, 361, 100, 108, 109, 110, 66, 0,
2131 1, 2, 0, 3, 4, 0, 0, 0, 0, 150,
2132 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
2133 161, 162, 163, 164, 165, 166, 0, 0, 67, 60,
2134 61, 0, 62, 63, 64, 65, 66, 0, 1, 2,
2135 0, 3, 4, 0, 0, 0, 0, 0, 0, 0,
2136 0, 167, 168, 169, 170, 171, 172, 173, 174, 175,
2137 176, 177, 178, 179, 0, 180, 67, 181, 182, 183,
2138 0, 353, 354, 60, 61, 355, 0, 104, 0, 105,
2139 0, 0, 1, 2, 362, 3, 4, 0, 356, 357,
2140 358, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2141 0, 359, 360, 0, 0, 0, 0, 0, 0, 0,
2142 0, 0, 0, 0, 0, 0, 0, 0, 361, 0,
2143 0, 68, 0, 0, 69, 0, 275, 70, 0, 71,
2144 0, 0, 0, 0, 150, 151, 152, 153, 154, 155,
2145 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
2146 166, 0, 0, 0, 0, 0, 0, 0, 0, 68,
2147 0, 0, 69, 0, 0, 70, 0, 71, 0, 0,
2148 0, 0, 0, 0, 0, 0, 167, 168, 169, 170,
2149 171, 172, 173, 174, 175, 176, 177, 178, 179, 0,
2150 180, 0, 181, 182, 183, 353, 354, 0, 0, 355,
2151 0, 0, 0, 0, 0, 0, 0, 0, 0, 362,
2152 0, 0, 356, 357, 358, 0, 0, 0, 0, 0,
2153 0, 0, 0, 0, 0, 359, 360, 0, 0, 0,
2154 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2155 0, 0, 361, 0, 60, 61, 0, 100, 108, 109,
2156 110, 66, 0, 1, 2, 0, 3, 4, 150, 151,
2157 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
2158 162, 163, 164, 165, 166, 0, 0, 0, 0, 0,
2159 0, 67, 0, 0, 0, 0, 60, 61, 0, 100,
2160 63, 64, 65, 66, 0, 1, 2, 0, 3, 4,
2161 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
2162 177, 178, 179, 128, 180, 0, 181, 182, 183, 0,
2163 0, 0, 0, 67, 0, 60, 61, 0, 100, 63,
2164 64, 65, 66, 362, 1, 2, 0, 3, 4, 0,
2165 0, 60, 61, 0, 100, 63, 64, 65, 66, 0,
2166 1, 2, 322, 3, 4, 0, 0, 0, 0, 0,
2167 60, 61, 67, 100, 63, 64, 65, 66, 410, 1,
2168 2, 0, 3, 4, 68, 0, 0, 69, 67, 0,
2169 70, 0, 71, 0, 0, 0, 0, 485, 0, 60,
2170 61, 0, 100, 63, 64, 65, 66, 67, 1, 2,
2171 0, 3, 4, 0, 0, 60, 61, 0, 195, 63,
2172 64, 65, 66, 0, 1, 2, 68, 3, 4, 69,
2173 0, 0, 70, 0, 71, 0, 67, 60, 61, 0,
2174 100, 108, 109, 110, 66, 0, 1, 2, 0, 3,
2175 4, 0, 67, 0, 60, 61, 0, 290, 63, 64,
2176 65, 66, 0, 1, 2, 68, 3, 4, 69, 0,
2177 0, 70, 0, 71, 67, 0, 0, 0, 0, 0,
2178 0, 68, 0, 0, 69, 0, 0, 70, 0, 71,
2179 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
2180 68, 0, 0, 69, 0, 0, 70, 0, 71, 0,
2181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2182 0, 0, 0, 0, 0, 0, 0, 0, 0, 68,
2183 0, 0, 69, 0, 0, 70, 0, 71, 0, 0,
2184 0, 0, 0, 0, 0, 68, 0, 0, 69, 0,
2185 0, 70, 0, 71, 0, 0, 0, 0, 0, 0,
2186 0, 0, 0, 201, 0, 0, 0, 68, 0, 0,
2187 69, 0, 0, 70, 0, 278, 0, 0, 0, 0,
2188 0, 202, 203, 0, 68, 0, 0, 69, 0, 0,
2189 70, 0, 71, 204, 205, 206, 207, 208, 209, 150,
2190 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
2191 161, 162, 163, 164, 210, 211, 0, 0, 0, 0,
2192 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2193 0, 0, 0, 0, 0, 0, 212, 213, 214, 0,
2194 0, 215, 168, 169, 170, 171, 172, 173, 174, 175,
2195 176, 177, 178, 179, 216, 217, 218, 219, 220, 221
2196};
2197
2198static const yytype_int16 yycheck[] =
2199{
2200 0, 26, 301, 239, 113, 185, 186, 4, 206, 0,
2201 23, 9, 81, 411, 9, 16, 16, 324, 132, 45,
2202 9, 328, 133, 24, 134, 16, 136, 9, 240, 241,
2203 207, 142, 142, 59, 50, 3, 4, 106, 5, 6,
2204 113, 8, 9, 10, 11, 12, 71, 14, 15, 226,
2205 17, 18, 14, 21, 22, 17, 214, 46, 133, 217,
2206 218, 219, 220, 221, 46, 133, 224, 133, 29, 144,
2207 95, 134, 133, 136, 99, 42, 144, 140, 144, 132,
2208 105, 142, 107, 110, 111, 46, 86, 297, 486, 35,
2209 36, 37, 38, 39, 40, 41, 121, 43, 278, 133,
2210 127, 128, 129, 137, 314, 13, 110, 111, 133, 134,
2211 5, 6, 137, 8, 9, 10, 11, 12, 516, 14,
2212 15, 132, 17, 18, 128, 129, 27, 28, 5, 6,
2213 143, 8, 9, 10, 11, 12, 0, 14, 15, 351,
2214 17, 18, 140, 144, 542, 140, 143, 42, 110, 111,
2215 37, 38, 133, 133, 3, 4, 137, 44, 316, 133,
2216 140, 530, 461, 50, 463, 42, 128, 129, 135, 133,
2217 144, 138, 541, 137, 141, 132, 143, 144, 29, 204,
2218 487, 132, 362, 133, 134, 131, 136, 212, 213, 214,
2219 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
2220 138, 270, 271, 272, 273, 274, 197, 232, 35, 36,
2221 37, 17, 133, 40, 283, 284, 285, 453, 291, 140,
2222 293, 294, 380, 296, 382, 383, 384, 534, 16, 536,
2223 303, 134, 341, 136, 14, 138, 17, 17, 311, 312,
2224 135, 31, 17, 138, 133, 134, 141, 136, 143, 144,
2225 106, 107, 134, 278, 136, 137, 77, 78, 135, 110,
2226 111, 138, 331, 332, 141, 131, 143, 144, 341, 338,
2227 17, 136, 297, 298, 299, 4, 127, 128, 129, 4,
2228 139, 15, 518, 441, 18, 521, 39, 139, 41, 314,
2229 315, 316, 9, 7, 134, 12, 136, 370, 371, 372,
2230 7, 7, 4, 133, 137, 378, 17, 142, 466, 467,
2231 468, 137, 136, 136, 136, 388, 389, 515, 136, 136,
2232 110, 111, 17, 136, 136, 136, 133, 352, 397, 398,
2233 399, 400, 48, 531, 9, 404, 405, 127, 128, 129,
2234 53, 54, 55, 56, 57, 58, 142, 136, 133, 422,
2235 136, 424, 136, 31, 427, 380, 381, 382, 383, 384,
2236 433, 434, 387, 133, 133, 133, 133, 133, 133, 133,
2237 439, 440, 133, 133, 133, 133, 31, 17, 4, 142,
2238 52, 406, 133, 456, 457, 133, 459, 460, 138, 133,
2239 133, 464, 133, 293, 294, 133, 296, 133, 133, 472,
2240 142, 17, 12, 303, 137, 12, 0, 476, 136, 478,
2241 479, 311, 312, 438, 133, 133, 441, 4, 491, 13,
2242 14, 15, 137, 17, 18, 19, 499, 452, 133, 133,
2243 133, 25, 26, 458, 133, 133, 136, 133, 17, 133,
2244 133, 466, 467, 468, 133, 137, 471, 137, 133, 133,
2245 44, 451, 138, 47, 137, 528, 137, 51, 46, 133,
2246 533, 140, 46, 12, 137, 4, 137, 137, 133, 12,
2247 370, 371, 372, 140, 547, 548, 12, 133, 378, 552,
2248 12, 64, 555, 12, 210, 124, 124, 124, 388, 389,
2249 211, 510, 517, 86, 487, 232, 105, 99, 16, 5,
2250 6, 83, 8, 9, 10, 11, 12, 53, 14, 15,
2251 510, 17, 18, 471, 377, -1, -1, -1, -1, -1,
2252 -1, -1, 422, -1, 424, -1, 0, 427, -1, -1,
2253 -1, -1, -1, 433, 434, -1, 42, -1, -1, 13,
2254 14, 15, -1, 17, 18, 19, -1, -1, -1, -1,
2255 -1, 25, 26, -1, -1, -1, 456, 457, -1, 459,
2256 460, -1, -1, -1, 464, -1, -1, -1, -1, -1,
2257 44, -1, 472, 47, -1, -1, -1, 51, 83, 84,
2258 85, 86, 87, 88, 89, 90, 91, 92, -1, -1,
2259 -1, 491, -1, -1, -1, 5, 6, -1, -1, 499,
2260 -1, -1, -1, -1, 14, 15, -1, 17, 18, -1,
2261 20, -1, 21, 22, -1, -1, -1, -1, -1, -1,
2262 -1, -1, -1, 33, 34, -1, -1, -1, 528, 135,
2263 -1, -1, 138, 533, -1, 141, -1, 143, 144, -1,
2264 -1, -1, -1, -1, -1, -1, -1, 547, 548, -1,
2265 -1, -1, 552, -1, -1, 555, 66, 67, 68, 69,
2266 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2267 80, 81, 82, -1, -1, -1, -1, -1, -1, -1,
2268 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
2269 99, 100, 101, 102, -1, -1, -1, -1, 108, 109,
2270 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
2271 120, -1, 122, -1, 124, 125, 126, -1, -1, -1,
2272 -1, -1, -1, -1, 134, -1, 136, -1, 138, -1,
2273 -1, 141, -1, 143, -1, 145, 3, 4, 5, 6,
2274 7, -1, -1, -1, -1, -1, -1, 14, 15, -1,
2275 17, 18, -1, 20, 21, 22, -1, -1, -1, -1,
2276 -1, -1, -1, -1, -1, -1, 33, 34, -1, -1,
2277 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2278 -1, 5, 6, 50, 8, 9, 10, 11, 12, -1,
2279 14, 15, -1, 17, 18, -1, -1, -1, -1, 66,
2280 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2281 77, 78, 79, 80, 81, 82, -1, -1, 42, 5,
2282 6, -1, 8, 9, 10, 11, 12, -1, 14, 15,
2283 -1, 17, 18, -1, -1, -1, -1, -1, -1, -1,
2284 -1, 108, 109, 110, 111, 112, 113, 114, 115, 116,
2285 117, 118, 119, 120, -1, 122, 42, 124, 125, 126,
2286 -1, 3, 4, 5, 6, 7, -1, 134, -1, 136,
2287 -1, -1, 14, 15, 141, 17, 18, -1, 20, 21,
2288 22, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2289 -1, 33, 34, -1, -1, -1, -1, -1, -1, -1,
2290 -1, -1, -1, -1, -1, -1, -1, -1, 50, -1,
2291 -1, 135, -1, -1, 138, -1, 140, 141, -1, 143,
2292 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71,
2293 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
2294 82, -1, -1, -1, -1, -1, -1, -1, -1, 135,
2295 -1, -1, 138, -1, -1, 141, -1, 143, -1, -1,
2296 -1, -1, -1, -1, -1, -1, 108, 109, 110, 111,
2297 112, 113, 114, 115, 116, 117, 118, 119, 120, -1,
2298 122, -1, 124, 125, 126, 3, 4, -1, -1, 7,
2299 -1, -1, -1, -1, -1, -1, -1, -1, -1, 141,
2300 -1, -1, 20, 21, 22, -1, -1, -1, -1, -1,
2301 -1, -1, -1, -1, -1, 33, 34, -1, -1, -1,
2302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2303 -1, -1, 50, -1, 5, 6, -1, 8, 9, 10,
2304 11, 12, -1, 14, 15, -1, 17, 18, 66, 67,
2305 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2306 78, 79, 80, 81, 82, -1, -1, -1, -1, -1,
2307 -1, 42, -1, -1, -1, -1, 5, 6, -1, 8,
2308 9, 10, 11, 12, -1, 14, 15, -1, 17, 18,
2309 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
2310 118, 119, 120, 32, 122, -1, 124, 125, 126, -1,
2311 -1, -1, -1, 42, -1, 5, 6, -1, 8, 9,
2312 10, 11, 12, 141, 14, 15, -1, 17, 18, -1,
2313 -1, 5, 6, -1, 8, 9, 10, 11, 12, -1,
2314 14, 15, 32, 17, 18, -1, -1, -1, -1, -1,
2315 5, 6, 42, 8, 9, 10, 11, 12, 32, 14,
2316 15, -1, 17, 18, 135, -1, -1, 138, 42, -1,
2317 141, -1, 143, -1, -1, -1, -1, 32, -1, 5,
2318 6, -1, 8, 9, 10, 11, 12, 42, 14, 15,
2319 -1, 17, 18, -1, -1, 5, 6, -1, 8, 9,
2320 10, 11, 12, -1, 14, 15, 135, 17, 18, 138,
2321 -1, -1, 141, -1, 143, -1, 42, 5, 6, -1,
2322 8, 9, 10, 11, 12, -1, 14, 15, -1, 17,
2323 18, -1, 42, -1, 5, 6, -1, 8, 9, 10,
2324 11, 12, -1, 14, 15, 135, 17, 18, 138, -1,
2325 -1, 141, -1, 143, 42, -1, -1, -1, -1, -1,
2326 -1, 135, -1, -1, 138, -1, -1, 141, -1, 143,
2327 -1, 42, -1, -1, -1, -1, -1, -1, -1, -1,
2328 135, -1, -1, 138, -1, -1, 141, -1, 143, -1,
2329 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2330 -1, -1, -1, -1, -1, -1, -1, -1, -1, 135,
2331 -1, -1, 138, -1, -1, 141, -1, 143, -1, -1,
2332 -1, -1, -1, -1, -1, 135, -1, -1, 138, -1,
2333 -1, 141, -1, 143, -1, -1, -1, -1, -1, -1,
2334 -1, -1, -1, 30, -1, -1, -1, 135, -1, -1,
2335 138, -1, -1, 141, -1, 143, -1, -1, -1, -1,
2336 -1, 48, 49, -1, 135, -1, -1, 138, -1, -1,
2337 141, -1, 143, 60, 61, 62, 63, 64, 65, 66,
2338 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2339 77, 78, 79, 80, 81, 82, -1, -1, -1, -1,
2340 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2341 -1, -1, -1, -1, -1, -1, 103, 104, 105, -1,
2342 -1, 108, 109, 110, 111, 112, 113, 114, 115, 116,
2343 117, 118, 119, 120, 121, 122, 123, 124, 125, 126
2344};
2345
2346/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2347 symbol of state STATE-NUM. */
2348static const yytype_uint8 yystos[] =
2349{
2350 0, 14, 15, 17, 18, 19, 25, 26, 44, 47,
2351 51, 154, 156, 157, 158, 186, 187, 188, 190, 189,
2352 45, 59, 195, 132, 50, 132, 13, 132, 35, 36,
2353 37, 38, 39, 40, 41, 43, 131, 159, 160, 161,
2354 0, 188, 39, 41, 162, 205, 35, 36, 37, 40,
2355 163, 202, 204, 211, 132, 132, 138, 196, 17, 194,
2356 5, 6, 8, 9, 10, 11, 12, 42, 135, 138,
2357 141, 143, 154, 157, 175, 176, 208, 161, 161, 27,
2358 28, 185, 161, 161, 16, 212, 213, 24, 144, 203,
2359 212, 17, 17, 17, 197, 136, 4, 4, 4, 143,
2360 8, 144, 176, 181, 134, 136, 185, 185, 9, 10,
2361 11, 152, 153, 176, 182, 53, 54, 55, 56, 57,
2362 58, 164, 200, 200, 156, 216, 133, 140, 32, 176,
2363 177, 179, 180, 139, 139, 144, 181, 133, 144, 180,
2364 182, 176, 21, 22, 3, 4, 7, 20, 33, 34,
2365 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
2366 76, 77, 78, 79, 80, 81, 82, 108, 109, 110,
2367 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2368 122, 124, 125, 126, 138, 141, 143, 145, 147, 148,
2369 149, 183, 208, 191, 4, 8, 176, 178, 23, 143,
2370 201, 30, 48, 49, 60, 61, 62, 63, 64, 65,
2371 81, 82, 103, 104, 105, 108, 121, 122, 123, 124,
2372 125, 126, 147, 148, 149, 214, 220, 221, 222, 223,
2373 17, 166, 133, 137, 176, 176, 142, 144, 176, 137,
2374 192, 193, 83, 84, 85, 86, 87, 88, 89, 90,
2375 91, 92, 150, 21, 22, 89, 90, 91, 92, 93,
2376 94, 95, 96, 97, 98, 99, 100, 101, 102, 151,
2377 136, 136, 136, 136, 136, 140, 182, 184, 143, 184,
2378 144, 184, 17, 136, 136, 136, 133, 173, 157, 48,
2379 8, 176, 210, 9, 12, 9, 152, 164, 150, 151,
2380 176, 176, 210, 176, 176, 217, 210, 210, 210, 210,
2381 210, 176, 176, 210, 164, 106, 107, 110, 111, 128,
2382 129, 165, 32, 177, 168, 140, 142, 142, 168, 173,
2383 173, 136, 136, 182, 182, 182, 182, 182, 133, 140,
2384 144, 176, 184, 142, 144, 182, 182, 182, 29, 46,
2385 171, 174, 136, 3, 4, 7, 20, 21, 22, 33,
2386 34, 50, 141, 183, 207, 208, 209, 209, 209, 209,
2387 178, 176, 176, 133, 170, 133, 170, 209, 138, 133,
2388 133, 133, 133, 133, 133, 209, 209, 31, 178, 176,
2389 210, 127, 165, 167, 182, 182, 219, 133, 133, 133,
2390 133, 182, 142, 144, 133, 133, 31, 17, 4, 173,
2391 32, 176, 198, 199, 52, 206, 184, 133, 133, 209,
2392 209, 209, 9, 46, 9, 219, 209, 138, 210, 176,
2393 210, 210, 210, 133, 133, 176, 209, 209, 133, 133,
2394 133, 133, 137, 182, 182, 182, 182, 142, 182, 182,
2395 176, 166, 133, 137, 17, 142, 12, 12, 136, 133,
2396 133, 209, 4, 209, 133, 209, 133, 133, 133, 209,
2397 209, 136, 176, 182, 182, 210, 133, 137, 133, 133,
2398 137, 137, 137, 154, 155, 32, 176, 168, 133, 209,
2399 209, 176, 218, 209, 209, 133, 170, 170, 209, 133,
2400 210, 210, 210, 218, 209, 137, 137, 182, 182, 182,
2401 166, 171, 172, 17, 133, 138, 209, 133, 137, 140,
2402 209, 137, 137, 137, 137, 155, 46, 169, 12, 140,
2403 152, 215, 166, 176, 168, 140, 168, 4, 209, 207,
2404 140, 152, 209, 31, 133, 207, 166, 12, 12, 133,
2405 209, 209, 12, 64, 209, 12, 209
2406};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002407
2408#define yyerrok (yyerrstatus = 0)
2409#define yyclearin (yychar = YYEMPTY)
Chris Lattner7d9801d2007-02-13 00:58:01 +00002410#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002411#define YYEOF 0
Chris Lattner7d9801d2007-02-13 00:58:01 +00002412
Reid Spencer68a24bd2005-08-27 18:50:39 +00002413#define YYACCEPT goto yyacceptlab
Chris Lattner7d9801d2007-02-13 00:58:01 +00002414#define YYABORT goto yyabortlab
2415#define YYERROR goto yyerrorlab
2416
2417
2418/* Like YYERROR except do call yyerror. This remains here temporarily
2419 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002420 Once GCC version 2 has supplanted version 1, this can go. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00002421
Reid Spencer68a24bd2005-08-27 18:50:39 +00002422#define YYFAIL goto yyerrlab
Chris Lattner7d9801d2007-02-13 00:58:01 +00002423
Reid Spencer68a24bd2005-08-27 18:50:39 +00002424#define YYRECOVERING() (!!yyerrstatus)
Chris Lattner7d9801d2007-02-13 00:58:01 +00002425
2426#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002427do \
2428 if (yychar == YYEMPTY && yylen == 1) \
Chris Lattner7d9801d2007-02-13 00:58:01 +00002429 { \
2430 yychar = (Token); \
2431 yylval = (Value); \
2432 yytoken = YYTRANSLATE (yychar); \
2433 YYPOPSTACK (1); \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002434 goto yybackup; \
2435 } \
2436 else \
Chris Lattner7d9801d2007-02-13 00:58:01 +00002437 { \
2438 yyerror (YY_("syntax error: cannot back up")); \
2439 YYERROR; \
2440 } \
2441while (YYID (0))
2442
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002443
Reid Spencer68a24bd2005-08-27 18:50:39 +00002444#define YYTERROR 1
2445#define YYERRCODE 256
2446
Chris Lattner7d9801d2007-02-13 00:58:01 +00002447
2448/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2449 If N is 0, then set CURRENT to the empty location which ends
2450 the previous symbol: RHS[0] (always defined). */
2451
2452#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2453#ifndef YYLLOC_DEFAULT
2454# define YYLLOC_DEFAULT(Current, Rhs, N) \
2455 do \
2456 if (YYID (N)) \
2457 { \
2458 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2459 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2460 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2461 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2462 } \
2463 else \
2464 { \
2465 (Current).first_line = (Current).last_line = \
2466 YYRHSLOC (Rhs, 0).last_line; \
2467 (Current).first_column = (Current).last_column = \
2468 YYRHSLOC (Rhs, 0).last_column; \
2469 } \
2470 while (YYID (0))
Reid Spencer68a24bd2005-08-27 18:50:39 +00002471#endif
2472
Chris Lattner7d9801d2007-02-13 00:58:01 +00002473
2474/* YY_LOCATION_PRINT -- Print the location on the stream.
2475 This macro was not mandated originally: define only if we know
2476 we won't break user code: when these are the locations we know. */
2477
2478#ifndef YY_LOCATION_PRINT
2479# if YYLTYPE_IS_TRIVIAL
2480# define YY_LOCATION_PRINT(File, Loc) \
2481 fprintf (File, "%d.%d-%d.%d", \
2482 (Loc).first_line, (Loc).first_column, \
2483 (Loc).last_line, (Loc).last_column)
2484# else
2485# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2486# endif
2487#endif
2488
2489
2490/* YYLEX -- calling `yylex' with the right arguments. */
2491
Reid Spencer41dff5e2007-01-26 08:05:27 +00002492#ifdef YYLEX_PARAM
Chris Lattner7d9801d2007-02-13 00:58:01 +00002493# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer41dff5e2007-01-26 08:05:27 +00002494#else
Chris Lattner7d9801d2007-02-13 00:58:01 +00002495# define YYLEX yylex ()
Chris Lattner8adde282007-02-11 21:40:10 +00002496#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002497
2498/* Enable debugging if requested. */
2499#if YYDEBUG
2500
2501# ifndef YYFPRINTF
2502# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2503# define YYFPRINTF fprintf
2504# endif
2505
2506# define YYDPRINTF(Args) \
2507do { \
2508 if (yydebug) \
2509 YYFPRINTF Args; \
2510} while (YYID (0))
2511
2512# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2513do { \
2514 if (yydebug) \
2515 { \
2516 YYFPRINTF (stderr, "%s ", Title); \
2517 yy_symbol_print (stderr, \
2518 Type, Value); \
2519 YYFPRINTF (stderr, "\n"); \
2520 } \
2521} while (YYID (0))
2522
2523
2524/*--------------------------------.
2525| Print this symbol on YYOUTPUT. |
2526`--------------------------------*/
2527
2528/*ARGSUSED*/
2529#if (defined __STDC__ || defined __C99__FUNC__ \
2530 || defined __cplusplus || defined _MSC_VER)
2531static void
2532yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
Chris Lattner8adde282007-02-11 21:40:10 +00002533#else
Chris Lattner7d9801d2007-02-13 00:58:01 +00002534static void
2535yy_symbol_value_print (yyoutput, yytype, yyvaluep)
2536 FILE *yyoutput;
2537 int yytype;
2538 YYSTYPE const * const yyvaluep;
Chris Lattner8adde282007-02-11 21:40:10 +00002539#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002540{
2541 if (!yyvaluep)
2542 return;
2543# ifdef YYPRINT
2544 if (yytype < YYNTOKENS)
2545 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2546# else
2547 YYUSE (yyoutput);
2548# endif
2549 switch (yytype)
2550 {
2551 default:
2552 break;
2553 }
2554}
2555
2556
2557/*--------------------------------.
2558| Print this symbol on YYOUTPUT. |
2559`--------------------------------*/
2560
2561#if (defined __STDC__ || defined __C99__FUNC__ \
2562 || defined __cplusplus || defined _MSC_VER)
2563static void
2564yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
2565#else
2566static void
2567yy_symbol_print (yyoutput, yytype, yyvaluep)
2568 FILE *yyoutput;
2569 int yytype;
2570 YYSTYPE const * const yyvaluep;
Chris Lattnerf7469af2007-01-31 04:44:08 +00002571#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002572{
2573 if (yytype < YYNTOKENS)
2574 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2575 else
2576 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
Reid Spencer832254e2007-02-02 02:16:23 +00002577
Chris Lattner7d9801d2007-02-13 00:58:01 +00002578 yy_symbol_value_print (yyoutput, yytype, yyvaluep);
2579 YYFPRINTF (yyoutput, ")");
2580}
Reid Spencer832254e2007-02-02 02:16:23 +00002581
Chris Lattner7d9801d2007-02-13 00:58:01 +00002582/*------------------------------------------------------------------.
2583| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2584| TOP (included). |
2585`------------------------------------------------------------------*/
Reid Spencer832254e2007-02-02 02:16:23 +00002586
Chris Lattner7d9801d2007-02-13 00:58:01 +00002587#if (defined __STDC__ || defined __C99__FUNC__ \
2588 || defined __cplusplus || defined _MSC_VER)
2589static void
2590yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
2591#else
2592static void
2593yy_stack_print (bottom, top)
2594 yytype_int16 *bottom;
2595 yytype_int16 *top;
Chris Lattnerf7469af2007-01-31 04:44:08 +00002596#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002597{
2598 YYFPRINTF (stderr, "Stack now");
2599 for (; bottom <= top; ++bottom)
2600 YYFPRINTF (stderr, " %d", *bottom);
2601 YYFPRINTF (stderr, "\n");
2602}
Reid Spencer832254e2007-02-02 02:16:23 +00002603
Chris Lattner7d9801d2007-02-13 00:58:01 +00002604# define YY_STACK_PRINT(Bottom, Top) \
2605do { \
2606 if (yydebug) \
2607 yy_stack_print ((Bottom), (Top)); \
2608} while (YYID (0))
Reid Spencer832254e2007-02-02 02:16:23 +00002609
Chris Lattner7d9801d2007-02-13 00:58:01 +00002610
2611/*------------------------------------------------.
2612| Report that the YYRULE is going to be reduced. |
2613`------------------------------------------------*/
2614
2615#if (defined __STDC__ || defined __C99__FUNC__ \
2616 || defined __cplusplus || defined _MSC_VER)
2617static void
2618yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
2619#else
2620static void
2621yy_reduce_print (yyvsp, yyrule)
2622 YYSTYPE *yyvsp;
2623 int yyrule;
Reid Spencer41dff5e2007-01-26 08:05:27 +00002624#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002625{
2626 int yynrhs = yyr2[yyrule];
2627 int yyi;
2628 unsigned long int yylno = yyrline[yyrule];
2629 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
2630 yyrule - 1, yylno);
2631 /* The symbols being reduced. */
2632 for (yyi = 0; yyi < yynrhs; yyi++)
2633 {
2634 fprintf (stderr, " $%d = ", yyi + 1);
2635 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
2636 &(yyvsp[(yyi + 1) - (yynrhs)])
2637 );
2638 fprintf (stderr, "\n");
2639 }
2640}
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002641
Chris Lattner7d9801d2007-02-13 00:58:01 +00002642# define YY_REDUCE_PRINT(Rule) \
2643do { \
2644 if (yydebug) \
2645 yy_reduce_print (yyvsp, Rule); \
2646} while (YYID (0))
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00002647
Chris Lattner7d9801d2007-02-13 00:58:01 +00002648/* Nonzero means print parse trace. It is left uninitialized so that
2649 multiple parsers can coexist. */
2650int yydebug;
2651#else /* !YYDEBUG */
2652# define YYDPRINTF(Args)
2653# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2654# define YY_STACK_PRINT(Bottom, Top)
2655# define YY_REDUCE_PRINT(Rule)
2656#endif /* !YYDEBUG */
2657
2658
2659/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002660#ifndef YYINITDEPTH
Chris Lattner7d9801d2007-02-13 00:58:01 +00002661# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002662#endif
2663
Chris Lattner7d9801d2007-02-13 00:58:01 +00002664/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2665 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002666
Chris Lattner7d9801d2007-02-13 00:58:01 +00002667 Do not make this value too large; the results are undefined if
2668 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2669 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002670
2671#ifndef YYMAXDEPTH
Chris Lattner7d9801d2007-02-13 00:58:01 +00002672# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002673#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002674
Reid Spencer68a24bd2005-08-27 18:50:39 +00002675
2676
Chris Lattner7d9801d2007-02-13 00:58:01 +00002677#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002678
Chris Lattner7d9801d2007-02-13 00:58:01 +00002679# ifndef yystrlen
2680# if defined __GLIBC__ && defined _STRING_H
2681# define yystrlen strlen
2682# else
2683/* Return the length of YYSTR. */
2684#if (defined __STDC__ || defined __C99__FUNC__ \
2685 || defined __cplusplus || defined _MSC_VER)
2686static YYSIZE_T
2687yystrlen (const char *yystr)
Chris Lattner8adde282007-02-11 21:40:10 +00002688#else
Chris Lattner7d9801d2007-02-13 00:58:01 +00002689static YYSIZE_T
2690yystrlen (yystr)
2691 const char *yystr;
2692#endif
2693{
2694 YYSIZE_T yylen;
2695 for (yylen = 0; yystr[yylen]; yylen++)
2696 continue;
2697 return yylen;
2698}
2699# endif
2700# endif
2701
2702# ifndef yystpcpy
2703# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
2704# define yystpcpy stpcpy
2705# else
2706/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2707 YYDEST. */
2708#if (defined __STDC__ || defined __C99__FUNC__ \
2709 || defined __cplusplus || defined _MSC_VER)
2710static char *
2711yystpcpy (char *yydest, const char *yysrc)
2712#else
2713static char *
2714yystpcpy (yydest, yysrc)
2715 char *yydest;
2716 const char *yysrc;
2717#endif
2718{
2719 char *yyd = yydest;
2720 const char *yys = yysrc;
2721
2722 while ((*yyd++ = *yys++) != '\0')
2723 continue;
2724
2725 return yyd - 1;
2726}
2727# endif
2728# endif
2729
2730# ifndef yytnamerr
2731/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2732 quotes and backslashes, so that it's suitable for yyerror. The
2733 heuristic is that double-quoting is unnecessary unless the string
2734 contains an apostrophe, a comma, or backslash (other than
2735 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2736 null, do not copy; instead, return the length of what the result
2737 would have been. */
2738static YYSIZE_T
2739yytnamerr (char *yyres, const char *yystr)
2740{
2741 if (*yystr == '"')
2742 {
2743 YYSIZE_T yyn = 0;
2744 char const *yyp = yystr;
2745
2746 for (;;)
2747 switch (*++yyp)
2748 {
2749 case '\'':
2750 case ',':
2751 goto do_not_strip_quotes;
2752
2753 case '\\':
2754 if (*++yyp != '\\')
2755 goto do_not_strip_quotes;
2756 /* Fall through. */
2757 default:
2758 if (yyres)
2759 yyres[yyn] = *yyp;
2760 yyn++;
2761 break;
2762
2763 case '"':
2764 if (yyres)
2765 yyres[yyn] = '\0';
2766 return yyn;
2767 }
2768 do_not_strip_quotes: ;
2769 }
2770
2771 if (! yyres)
2772 return yystrlen (yystr);
2773
2774 return yystpcpy (yyres, yystr) - yyres;
2775}
2776# endif
2777
2778/* Copy into YYRESULT an error message about the unexpected token
2779 YYCHAR while in state YYSTATE. Return the number of bytes copied,
2780 including the terminating null byte. If YYRESULT is null, do not
2781 copy anything; just return the number of bytes that would be
2782 copied. As a special case, return 0 if an ordinary "syntax error"
2783 message will do. Return YYSIZE_MAXIMUM if overflow occurs during
2784 size calculation. */
2785static YYSIZE_T
2786yysyntax_error (char *yyresult, int yystate, int yychar)
2787{
2788 int yyn = yypact[yystate];
2789
2790 if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
2791 return 0;
2792 else
2793 {
2794 int yytype = YYTRANSLATE (yychar);
2795 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
2796 YYSIZE_T yysize = yysize0;
2797 YYSIZE_T yysize1;
2798 int yysize_overflow = 0;
2799 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2800 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
2801 int yyx;
2802
2803# if 0
2804 /* This is so xgettext sees the translatable formats that are
2805 constructed on the fly. */
2806 YY_("syntax error, unexpected %s");
2807 YY_("syntax error, unexpected %s, expecting %s");
2808 YY_("syntax error, unexpected %s, expecting %s or %s");
2809 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
2810 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
2811# endif
2812 char *yyfmt;
2813 char const *yyf;
2814 static char const yyunexpected[] = "syntax error, unexpected %s";
2815 static char const yyexpecting[] = ", expecting %s";
2816 static char const yyor[] = " or %s";
2817 char yyformat[sizeof yyunexpected
2818 + sizeof yyexpecting - 1
2819 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
2820 * (sizeof yyor - 1))];
2821 char const *yyprefix = yyexpecting;
2822
2823 /* Start YYX at -YYN if negative to avoid negative indexes in
2824 YYCHECK. */
2825 int yyxbegin = yyn < 0 ? -yyn : 0;
2826
2827 /* Stay within bounds of both yycheck and yytname. */
2828 int yychecklim = YYLAST - yyn + 1;
2829 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2830 int yycount = 1;
2831
2832 yyarg[0] = yytname[yytype];
2833 yyfmt = yystpcpy (yyformat, yyunexpected);
2834
2835 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2836 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
2837 {
2838 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2839 {
2840 yycount = 1;
2841 yysize = yysize0;
2842 yyformat[sizeof yyunexpected - 1] = '\0';
2843 break;
2844 }
2845 yyarg[yycount++] = yytname[yyx];
2846 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
2847 yysize_overflow |= (yysize1 < yysize);
2848 yysize = yysize1;
2849 yyfmt = yystpcpy (yyfmt, yyprefix);
2850 yyprefix = yyor;
2851 }
2852
2853 yyf = YY_(yyformat);
2854 yysize1 = yysize + yystrlen (yyf);
2855 yysize_overflow |= (yysize1 < yysize);
2856 yysize = yysize1;
2857
2858 if (yysize_overflow)
2859 return YYSIZE_MAXIMUM;
2860
2861 if (yyresult)
2862 {
2863 /* Avoid sprintf, as that infringes on the user's name space.
2864 Don't have undefined behavior even if the translation
2865 produced a string with the wrong number of "%s"s. */
2866 char *yyp = yyresult;
2867 int yyi = 0;
2868 while ((*yyp = *yyf) != '\0')
2869 {
2870 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
2871 {
2872 yyp += yytnamerr (yyp, yyarg[yyi++]);
2873 yyf += 2;
2874 }
2875 else
2876 {
2877 yyp++;
2878 yyf++;
2879 }
2880 }
2881 }
2882 return yysize;
2883 }
2884}
2885#endif /* YYERROR_VERBOSE */
2886
2887
2888/*-----------------------------------------------.
2889| Release the memory associated to this symbol. |
2890`-----------------------------------------------*/
2891
2892/*ARGSUSED*/
2893#if (defined __STDC__ || defined __C99__FUNC__ \
2894 || defined __cplusplus || defined _MSC_VER)
2895static void
2896yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2897#else
2898static void
2899yydestruct (yymsg, yytype, yyvaluep)
2900 const char *yymsg;
2901 int yytype;
2902 YYSTYPE *yyvaluep;
2903#endif
2904{
2905 YYUSE (yyvaluep);
2906
2907 if (!yymsg)
2908 yymsg = "Deleting";
2909 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2910
2911 switch (yytype)
2912 {
2913
2914 default:
2915 break;
2916 }
2917}
2918
2919
2920/* Prevent warnings from -Wmissing-prototypes. */
2921
2922#ifdef YYPARSE_PARAM
2923#if defined __STDC__ || defined __cplusplus
2924int yyparse (void *YYPARSE_PARAM);
2925#else
2926int yyparse ();
2927#endif
2928#else /* ! YYPARSE_PARAM */
2929#if defined __STDC__ || defined __cplusplus
Reid Spencere812fb22006-01-19 01:21:04 +00002930int yyparse (void);
Chris Lattner8adde282007-02-11 21:40:10 +00002931#else
Chris Lattner7d9801d2007-02-13 00:58:01 +00002932int yyparse ();
Chris Lattner8adde282007-02-11 21:40:10 +00002933#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002934#endif /* ! YYPARSE_PARAM */
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002935
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002936
Chris Lattner7d9801d2007-02-13 00:58:01 +00002937
2938/* The look-ahead symbol. */
2939int yychar;
2940
2941/* The semantic value of the look-ahead symbol. */
2942YYSTYPE yylval;
2943
2944/* Number of syntax errors so far. */
2945int yynerrs;
2946
2947
2948
2949/*----------.
2950| yyparse. |
2951`----------*/
2952
2953#ifdef YYPARSE_PARAM
2954#if (defined __STDC__ || defined __C99__FUNC__ \
2955 || defined __cplusplus || defined _MSC_VER)
2956int
2957yyparse (void *YYPARSE_PARAM)
2958#else
2959int
2960yyparse (YYPARSE_PARAM)
2961 void *YYPARSE_PARAM;
2962#endif
2963#else /* ! YYPARSE_PARAM */
2964#if (defined __STDC__ || defined __C99__FUNC__ \
2965 || defined __cplusplus || defined _MSC_VER)
2966int
2967yyparse (void)
2968#else
2969int
2970yyparse ()
2971
Chris Lattner8adde282007-02-11 21:40:10 +00002972#endif
2973#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00002974{
2975
2976 int yystate;
2977 int yyn;
2978 int yyresult;
2979 /* Number of tokens to shift before error messages enabled. */
2980 int yyerrstatus;
2981 /* Look-ahead token as an internal (translated) token number. */
2982 int yytoken = 0;
2983#if YYERROR_VERBOSE
2984 /* Buffer for error messages, and its allocated size. */
2985 char yymsgbuf[128];
2986 char *yymsg = yymsgbuf;
2987 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
Chris Lattner8adde282007-02-11 21:40:10 +00002988#endif
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002989
Chris Lattner7d9801d2007-02-13 00:58:01 +00002990 /* Three stacks and their tools:
2991 `yyss': related to states,
2992 `yyvs': related to semantic values,
2993 `yyls': related to locations.
2994
2995 Refer to the stacks thru separate pointers, to allow yyoverflow
2996 to reallocate them elsewhere. */
2997
2998 /* The state stack. */
2999 yytype_int16 yyssa[YYINITDEPTH];
3000 yytype_int16 *yyss = yyssa;
3001 yytype_int16 *yyssp;
3002
3003 /* The semantic value stack. */
3004 YYSTYPE yyvsa[YYINITDEPTH];
3005 YYSTYPE *yyvs = yyvsa;
3006 YYSTYPE *yyvsp;
3007
3008
3009
3010#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
3011
3012 YYSIZE_T yystacksize = YYINITDEPTH;
3013
3014 /* The variables used to return semantic value and location from the
3015 action routines. */
3016 YYSTYPE yyval;
3017
3018
3019 /* The number of symbols on the RHS of the reduced rule.
3020 Keep to zero when no symbol should be popped. */
3021 int yylen = 0;
3022
3023 YYDPRINTF ((stderr, "Starting parse\n"));
3024
Reid Spencer68a24bd2005-08-27 18:50:39 +00003025 yystate = 0;
3026 yyerrstatus = 0;
3027 yynerrs = 0;
3028 yychar = YYEMPTY; /* Cause a token to be read. */
3029
3030 /* Initialize stack pointers.
3031 Waste one element of value and location stack
3032 so that they stay on the same level as the state stack.
3033 The wasted elements are never initialized. */
3034
Chris Lattner7d9801d2007-02-13 00:58:01 +00003035 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003036 yyvsp = yyvs;
3037
Chris Lattner7d9801d2007-02-13 00:58:01 +00003038 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00003039
Chris Lattner7d9801d2007-02-13 00:58:01 +00003040/*------------------------------------------------------------.
3041| yynewstate -- Push a new state, which is found in yystate. |
3042`------------------------------------------------------------*/
3043 yynewstate:
3044 /* In all cases, when you get here, the value and location stacks
3045 have just been pushed. So pushing a state here evens the stacks. */
3046 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003047
Chris Lattner7d9801d2007-02-13 00:58:01 +00003048 yysetstate:
3049 *yyssp = yystate;
3050
3051 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003052 {
3053 /* Get the current used size of the three stacks, in elements. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00003054 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003055
3056#ifdef yyoverflow
Chris Lattner7d9801d2007-02-13 00:58:01 +00003057 {
3058 /* Give user a chance to reallocate the stack. Use copies of
3059 these so that the &'s don't force the real ones into
3060 memory. */
3061 YYSTYPE *yyvs1 = yyvs;
3062 yytype_int16 *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003063
Chris Lattner7d9801d2007-02-13 00:58:01 +00003064
3065 /* Each stack pointer address is followed by the size of the
3066 data in use in that stack, in bytes. This used to be a
3067 conditional around just the two extra args, but that might
3068 be undefined if yyoverflow is a macro. */
3069 yyoverflow (YY_("memory exhausted"),
3070 &yyss1, yysize * sizeof (*yyssp),
3071 &yyvs1, yysize * sizeof (*yyvsp),
3072
3073 &yystacksize);
3074
3075 yyss = yyss1;
3076 yyvs = yyvs1;
3077 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00003078#else /* no yyoverflow */
Chris Lattner7d9801d2007-02-13 00:58:01 +00003079# ifndef YYSTACK_RELOCATE
3080 goto yyexhaustedlab;
3081# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00003082 /* Extend the stack our own way. */
Chris Lattner7d9801d2007-02-13 00:58:01 +00003083 if (YYMAXDEPTH <= yystacksize)
3084 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003085 yystacksize *= 2;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003086 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003087 yystacksize = YYMAXDEPTH;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003088
3089 {
3090 yytype_int16 *yyss1 = yyss;
3091 union yyalloc *yyptr =
3092 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3093 if (! yyptr)
3094 goto yyexhaustedlab;
3095 YYSTACK_RELOCATE (yyss);
3096 YYSTACK_RELOCATE (yyvs);
3097
3098# undef YYSTACK_RELOCATE
3099 if (yyss1 != yyssa)
3100 YYSTACK_FREE (yyss1);
3101 }
3102# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003103#endif /* no yyoverflow */
3104
Chris Lattner7d9801d2007-02-13 00:58:01 +00003105 yyssp = yyss + yysize - 1;
3106 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003107
3108
Chris Lattner7d9801d2007-02-13 00:58:01 +00003109 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3110 (unsigned long int) yystacksize));
3111
3112 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003113 YYABORT;
3114 }
3115
Chris Lattner7d9801d2007-02-13 00:58:01 +00003116 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003117
3118 goto yybackup;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003119
Chris Lattner7d9801d2007-02-13 00:58:01 +00003120/*-----------.
3121| yybackup. |
3122`-----------*/
3123yybackup:
Andrew Lenharth6353e052006-12-08 18:07:09 +00003124
Chris Lattner7d9801d2007-02-13 00:58:01 +00003125 /* Do appropriate processing given the current state. Read a
3126 look-ahead token if we need one and don't already have one. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00003127
Chris Lattner7d9801d2007-02-13 00:58:01 +00003128 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003129 yyn = yypact[yystate];
Chris Lattner7d9801d2007-02-13 00:58:01 +00003130 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003131 goto yydefault;
3132
Chris Lattner7d9801d2007-02-13 00:58:01 +00003133 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003134
Chris Lattner7d9801d2007-02-13 00:58:01 +00003135 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003136 if (yychar == YYEMPTY)
3137 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003138 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003139 yychar = YYLEX;
3140 }
3141
Chris Lattner7d9801d2007-02-13 00:58:01 +00003142 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003143 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003144 yychar = yytoken = YYEOF;
3145 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003146 }
3147 else
3148 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003149 yytoken = YYTRANSLATE (yychar);
3150 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003151 }
3152
Chris Lattner7d9801d2007-02-13 00:58:01 +00003153 /* If the proper action on seeing token YYTOKEN is to reduce or to
3154 detect an error, take that action. */
3155 yyn += yytoken;
3156 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003157 goto yydefault;
3158 yyn = yytable[yyn];
Chris Lattner7d9801d2007-02-13 00:58:01 +00003159 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003160 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003161 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003162 goto yyerrlab;
3163 yyn = -yyn;
3164 goto yyreduce;
3165 }
3166
3167 if (yyn == YYFINAL)
3168 YYACCEPT;
3169
Chris Lattner7d9801d2007-02-13 00:58:01 +00003170 /* Count tokens shifted since error; after three, turn off error
3171 status. */
3172 if (yyerrstatus)
3173 yyerrstatus--;
Chris Lattner8adde282007-02-11 21:40:10 +00003174
Chris Lattner7d9801d2007-02-13 00:58:01 +00003175 /* Shift the look-ahead token. */
3176 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Reid Spencer5cbf9852007-01-30 20:08:39 +00003177
Chris Lattner7d9801d2007-02-13 00:58:01 +00003178 /* Discard the shifted token unless it is eof. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00003179 if (yychar != YYEOF)
3180 yychar = YYEMPTY;
3181
Reid Spencer68a24bd2005-08-27 18:50:39 +00003182 yystate = yyn;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003183 *++yyvsp = yylval;
3184
Reid Spencer68a24bd2005-08-27 18:50:39 +00003185 goto yynewstate;
3186
Chris Lattner8adde282007-02-11 21:40:10 +00003187
Chris Lattner7d9801d2007-02-13 00:58:01 +00003188/*-----------------------------------------------------------.
3189| yydefault -- do the default action for the current state. |
3190`-----------------------------------------------------------*/
3191yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003192 yyn = yydefact[yystate];
3193 if (yyn == 0)
3194 goto yyerrlab;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003195 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003196
Chris Lattner7d9801d2007-02-13 00:58:01 +00003197
3198/*-----------------------------.
3199| yyreduce -- Do a reduction. |
3200`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003201yyreduce:
Chris Lattner7d9801d2007-02-13 00:58:01 +00003202 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003203 yylen = yyr2[yyn];
3204
Chris Lattner7d9801d2007-02-13 00:58:01 +00003205 /* If YYLEN is nonzero, implement the default value of the action:
3206 `$$ = $1'.
3207
3208 Otherwise, the following line sets YYVAL to garbage.
3209 This behavior is undocumented and Bison
3210 users should not rely upon it. Assigning to YYVAL
3211 unconditionally makes the parser a bit smaller, and it avoids a
3212 GCC warning that YYVAL may be used uninitialized. */
3213 yyval = yyvsp[1-yylen];
3214
3215
3216 YY_REDUCE_PRINT (yyn);
3217 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003218 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003219 case 29:
3220#line 1054 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3221 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3222 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003223
Chris Lattner7d9801d2007-02-13 00:58:01 +00003224 case 30:
3225#line 1054 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3226 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3227 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003228
Chris Lattner7d9801d2007-02-13 00:58:01 +00003229 case 31:
3230#line 1055 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3231 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3232 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003233
Chris Lattner7d9801d2007-02-13 00:58:01 +00003234 case 32:
3235#line 1055 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3236 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3237 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003238
Chris Lattner7d9801d2007-02-13 00:58:01 +00003239 case 33:
3240#line 1056 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3241 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3242 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003243
Chris Lattner7d9801d2007-02-13 00:58:01 +00003244 case 34:
3245#line 1056 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3246 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3247 break;
3248
3249 case 35:
3250#line 1057 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3251 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3252 break;
3253
3254 case 36:
3255#line 1057 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3256 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3257 break;
3258
3259 case 37:
3260#line 1058 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3261 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3262 break;
3263
3264 case 38:
3265#line 1058 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3266 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3267 break;
3268
3269 case 39:
3270#line 1062 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3271 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3272 break;
3273
3274 case 40:
3275#line 1062 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3276 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3277 break;
3278
3279 case 41:
3280#line 1063 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3281 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3282 break;
3283
3284 case 42:
3285#line 1063 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3286 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3287 break;
3288
3289 case 43:
3290#line 1064 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3291 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3292 break;
3293
3294 case 44:
3295#line 1064 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3296 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3297 break;
3298
3299 case 45:
3300#line 1065 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3301 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3302 break;
3303
3304 case 46:
3305#line 1065 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3306 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3307 break;
3308
3309 case 47:
3310#line 1066 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3311 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3312 break;
3313
3314 case 48:
3315#line 1066 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3316 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3317 break;
3318
3319 case 49:
3320#line 1067 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3321 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3322 break;
3323
3324 case 50:
3325#line 1067 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3326 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3327 break;
3328
3329 case 51:
3330#line 1068 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3331 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3332 break;
3333
3334 case 52:
3335#line 1068 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3336 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3337 break;
3338
3339 case 53:
3340#line 1069 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3341 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3342 break;
3343
3344 case 54:
3345#line 1070 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3346 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3347 break;
3348
3349 case 61:
3350#line 1079 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3351 { (yyval.StrVal) = 0; ;}
3352 break;
3353
3354 case 62:
3355#line 1083 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3356 {
3357 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003358 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003359 ;}
3360 break;
3361
3362 case 63:
3363#line 1087 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3364 {
3365 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003366 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003367 ;}
3368 break;
3369
3370 case 66:
3371#line 1094 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3372 {
3373 (yyval.StrVal) = (yyvsp[(1) - (2)].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003374 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003375 ;}
3376 break;
3377
3378 case 67:
3379#line 1098 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3380 {
3381 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003382 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003383 ;}
3384 break;
3385
3386 case 68:
3387#line 1104 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3388 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3389 break;
3390
3391 case 69:
3392#line 1105 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3393 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3394 break;
3395
3396 case 70:
3397#line 1106 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3398 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3399 break;
3400
3401 case 71:
3402#line 1107 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3403 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3404 break;
3405
3406 case 72:
3407#line 1108 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3408 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3409 break;
3410
3411 case 73:
3412#line 1112 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3413 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3414 break;
3415
3416 case 74:
3417#line 1113 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3418 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3419 break;
3420
3421 case 75:
3422#line 1114 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3423 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3424 break;
3425
3426 case 76:
3427#line 1118 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3428 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3429 break;
3430
3431 case 77:
3432#line 1119 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3433 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3434 break;
3435
3436 case 78:
3437#line 1123 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3438 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3439 break;
3440
3441 case 79:
3442#line 1124 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3443 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3444 break;
3445
3446 case 80:
3447#line 1125 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3448 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3449 break;
3450
3451 case 81:
3452#line 1129 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3453 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3454 break;
3455
3456 case 82:
3457#line 1130 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3458 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3459 break;
3460
3461 case 83:
3462#line 1131 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3463 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3464 break;
3465
3466 case 84:
3467#line 1132 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3468 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3469 break;
3470
3471 case 85:
3472#line 1133 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3473 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3474 break;
3475
3476 case 86:
3477#line 1136 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3478 { (yyval.UIntVal) = CallingConv::C; ;}
3479 break;
3480
3481 case 87:
3482#line 1137 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3483 { (yyval.UIntVal) = CallingConv::C; ;}
3484 break;
3485
3486 case 88:
3487#line 1138 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3488 { (yyval.UIntVal) = CallingConv::Fast; ;}
3489 break;
3490
3491 case 89:
3492#line 1139 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3493 { (yyval.UIntVal) = CallingConv::Cold; ;}
3494 break;
3495
3496 case 90:
3497#line 1140 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3498 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3499 break;
3500
3501 case 91:
3502#line 1141 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3503 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3504 break;
3505
3506 case 92:
3507#line 1142 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3508 {
3509 if ((unsigned)(yyvsp[(2) - (2)].UInt64Val) != (yyvsp[(2) - (2)].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003510 GEN_ERROR("Calling conv too large");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003511 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003512 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003513 ;}
3514 break;
3515
3516 case 93:
3517#line 1149 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3518 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3519 break;
3520
3521 case 94:
3522#line 1150 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3523 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3524 break;
3525
3526 case 95:
3527#line 1151 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3528 { (yyval.ParamAttrs) = FunctionType::InRegAttribute; ;}
3529 break;
3530
3531 case 96:
3532#line 1152 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3533 { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;}
3534 break;
3535
3536 case 97:
3537#line 1155 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3538 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3539 break;
3540
3541 case 98:
3542#line 1156 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3543 {
3544 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs));
3545 ;}
3546 break;
3547
3548 case 99:
3549#line 1161 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3550 { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
3551 break;
3552
3553 case 101:
3554#line 1165 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3555 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3556 break;
3557
3558 case 102:
3559#line 1166 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3560 {
3561 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[(1) - (2)].ParamAttrs) | (yyvsp[(2) - (2)].ParamAttrs));
3562 ;}
3563 break;
3564
3565 case 103:
3566#line 1173 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3567 { (yyval.UIntVal) = 0; ;}
3568 break;
3569
3570 case 104:
3571#line 1174 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3572 {
3573 (yyval.UIntVal) = (yyvsp[(2) - (2)].UInt64Val);
3574 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003575 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003576 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003577;}
3578 break;
3579
3580 case 105:
3581#line 1180 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3582 { (yyval.UIntVal) = 0; ;}
3583 break;
3584
3585 case 106:
3586#line 1181 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3587 {
3588 (yyval.UIntVal) = (yyvsp[(3) - (3)].UInt64Val);
3589 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003590 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003591 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003592;}
3593 break;
3594
3595 case 107:
3596#line 1189 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3597 {
3598 for (unsigned i = 0, e = strlen((yyvsp[(2) - (2)].StrVal)); i != e; ++i)
3599 if ((yyvsp[(2) - (2)].StrVal)[i] == '"' || (yyvsp[(2) - (2)].StrVal)[i] == '\\')
Reid Spencerb5334b02007-02-05 10:18:06 +00003600 GEN_ERROR("Invalid character in section name");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003601 (yyval.StrVal) = (yyvsp[(2) - (2)].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003602 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003603;}
3604 break;
3605
3606 case 108:
3607#line 1197 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3608 { (yyval.StrVal) = 0; ;}
3609 break;
3610
3611 case 109:
3612#line 1198 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3613 { (yyval.StrVal) = (yyvsp[(1) - (1)].StrVal); ;}
3614 break;
3615
3616 case 110:
3617#line 1203 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3618 {;}
3619 break;
3620
3621 case 111:
3622#line 1204 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3623 {;}
3624 break;
3625
3626 case 112:
3627#line 1205 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3628 {
3629 CurGV->setSection((yyvsp[(1) - (1)].StrVal));
3630 free((yyvsp[(1) - (1)].StrVal));
Reid Spencer6f407902007-01-13 05:00:46 +00003631 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003632 ;}
3633 break;
3634
3635 case 113:
3636#line 1210 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3637 {
3638 if ((yyvsp[(2) - (2)].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[(2) - (2)].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003639 GEN_ERROR("Alignment must be a power of two");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003640 CurGV->setAlignment((yyvsp[(2) - (2)].UInt64Val));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003641 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003642 ;}
3643 break;
3644
3645 case 118:
3646#line 1226 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3647 {
3648 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003649 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003650 ;}
3651 break;
3652
3653 case 119:
3654#line 1230 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3655 {
3656 (yyval.TypeVal) = new PATypeHolder((yyvsp[(1) - (1)].PrimType));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003657 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003658 ;}
3659 break;
3660
3661 case 120:
3662#line 1234 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3663 { // Pointer type?
3664 if (*(yyvsp[(1) - (2)].TypeVal) == Type::LabelTy)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003665 GEN_ERROR("Cannot form a pointer to a basic block");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003666 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[(1) - (2)].TypeVal))));
3667 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003668 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003669 ;}
3670 break;
3671
3672 case 121:
3673#line 1241 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3674 { // Named types are also simple types...
3675 const Type* tmp = getTypeVal((yyvsp[(1) - (1)].ValIDVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003676 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003677 (yyval.TypeVal) = new PATypeHolder(tmp);
3678 ;}
3679 break;
3680
3681 case 122:
3682#line 1246 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3683 { // Type UpReference
3684 if ((yyvsp[(2) - (2)].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003685 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Chris Lattner7d9801d2007-02-13 00:58:01 +00003686 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[(2) - (2)].UInt64Val), OT)); // Add to vector...
3687 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003688 UR_OUT("New Upreference!\n");
3689 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003690 ;}
3691 break;
3692
3693 case 123:
3694#line 1254 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3695 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003696 std::vector<const Type*> Params;
3697 std::vector<FunctionType::ParameterAttributes> Attrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003698 Attrs.push_back((yyvsp[(5) - (5)].ParamAttrs));
3699 for (TypeWithAttrsList::iterator I=(yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E=(yyvsp[(3) - (5)].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003700 Params.push_back(I->Ty->get());
3701 if (I->Ty->get() != Type::VoidTy)
3702 Attrs.push_back(I->Attrs);
3703 }
3704 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3705 if (isVarArg) Params.pop_back();
3706
Chris Lattner7d9801d2007-02-13 00:58:01 +00003707 FunctionType *FT = FunctionType::get(*(yyvsp[(1) - (5)].TypeVal), Params, isVarArg, Attrs);
3708 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
3709 delete (yyvsp[(1) - (5)].TypeVal); // Delete the return type handle
3710 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003711 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003712 ;}
3713 break;
3714
3715 case 124:
3716#line 1272 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3717 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003718 std::vector<const Type*> Params;
3719 std::vector<FunctionType::ParameterAttributes> Attrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003720 Attrs.push_back((yyvsp[(5) - (5)].ParamAttrs));
3721 for (TypeWithAttrsList::iterator I=(yyvsp[(3) - (5)].TypeWithAttrsList)->begin(), E=(yyvsp[(3) - (5)].TypeWithAttrsList)->end(); I != E; ++I) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003722 Params.push_back(I->Ty->get());
3723 if (I->Ty->get() != Type::VoidTy)
3724 Attrs.push_back(I->Attrs);
3725 }
3726 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3727 if (isVarArg) Params.pop_back();
3728
Chris Lattner7d9801d2007-02-13 00:58:01 +00003729 FunctionType *FT = FunctionType::get((yyvsp[(1) - (5)].PrimType), Params, isVarArg, Attrs);
3730 delete (yyvsp[(3) - (5)].TypeWithAttrsList); // Delete the argument list
3731 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003732 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003733 ;}
3734 break;
3735
3736 case 125:
3737#line 1290 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3738 { // Sized array type?
3739 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
3740 delete (yyvsp[(4) - (5)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003741 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003742 ;}
3743 break;
3744
3745 case 126:
3746#line 1295 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3747 { // Packed array type?
3748 const llvm::Type* ElemTy = (yyvsp[(4) - (5)].TypeVal)->get();
3749 if ((unsigned)(yyvsp[(2) - (5)].UInt64Val) != (yyvsp[(2) - (5)].UInt64Val))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003750 GEN_ERROR("Unsigned result not equal to signed result");
3751 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
3752 GEN_ERROR("Element type of a PackedType must be primitive");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003753 if (!isPowerOf2_32((yyvsp[(2) - (5)].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003754 GEN_ERROR("Vector length should be a power of 2");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003755 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[(4) - (5)].TypeVal), (unsigned)(yyvsp[(2) - (5)].UInt64Val))));
3756 delete (yyvsp[(4) - (5)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003757 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003758 ;}
3759 break;
3760
3761 case 127:
3762#line 1307 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3763 { // Structure type?
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003764 std::vector<const Type*> Elements;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003765 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(2) - (3)].TypeList)->begin(),
3766 E = (yyvsp[(2) - (3)].TypeList)->end(); I != E; ++I)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003767 Elements.push_back(*I);
3768
Chris Lattner7d9801d2007-02-13 00:58:01 +00003769 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3770 delete (yyvsp[(2) - (3)].TypeList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003771 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003772 ;}
3773 break;
3774
3775 case 128:
3776#line 1317 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3777 { // Empty structure type?
3778 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00003779 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003780 ;}
3781 break;
3782
3783 case 129:
3784#line 1321 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3785 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003786 std::vector<const Type*> Elements;
Chris Lattner7d9801d2007-02-13 00:58:01 +00003787 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[(3) - (5)].TypeList)->begin(),
3788 E = (yyvsp[(3) - (5)].TypeList)->end(); I != E; ++I)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003789 Elements.push_back(*I);
3790
Chris Lattner7d9801d2007-02-13 00:58:01 +00003791 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3792 delete (yyvsp[(3) - (5)].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00003793 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003794 ;}
3795 break;
3796
3797 case 130:
3798#line 1331 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3799 { // Empty structure type?
3800 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003801 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003802 ;}
3803 break;
3804
3805 case 131:
3806#line 1338 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3807 {
3808 (yyval.TypeWithAttrs).Ty = (yyvsp[(1) - (2)].TypeVal);
3809 (yyval.TypeWithAttrs).Attrs = (yyvsp[(2) - (2)].ParamAttrs);
3810 ;}
3811 break;
3812
3813 case 132:
3814#line 1345 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3815 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003816 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00003817 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (1)].TypeVal))->getDescription());
3818 if (!(*(yyvsp[(1) - (1)].TypeVal))->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003819 GEN_ERROR("LLVM functions cannot return aggregate types");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003820 (yyval.TypeVal) = (yyvsp[(1) - (1)].TypeVal);
3821 ;}
3822 break;
3823
3824 case 133:
3825#line 1352 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3826 {
3827 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3828 ;}
3829 break;
3830
3831 case 134:
3832#line 1357 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3833 {
3834 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3835 (yyval.TypeWithAttrsList)->push_back((yyvsp[(1) - (1)].TypeWithAttrs));
Reid Spencer6f407902007-01-13 05:00:46 +00003836 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003837 ;}
3838 break;
3839
3840 case 135:
3841#line 1362 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3842 {
3843 ((yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList))->push_back((yyvsp[(3) - (3)].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00003844 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003845 ;}
3846 break;
3847
3848 case 137:
3849#line 1370 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3850 {
3851 (yyval.TypeWithAttrsList)=(yyvsp[(1) - (3)].TypeWithAttrsList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003852 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3853 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner7d9801d2007-02-13 00:58:01 +00003854 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003855 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003856 ;}
3857 break;
3858
3859 case 138:
3860#line 1377 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3861 {
3862 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003863 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3864 TWA.Ty = new PATypeHolder(Type::VoidTy);
Chris Lattner7d9801d2007-02-13 00:58:01 +00003865 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003866 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003867 ;}
3868 break;
3869
3870 case 139:
3871#line 1384 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3872 {
3873 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003874 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003875 ;}
3876 break;
3877
3878 case 140:
3879#line 1392 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3880 {
3881 (yyval.TypeList) = new std::list<PATypeHolder>();
3882 (yyval.TypeList)->push_back(*(yyvsp[(1) - (1)].TypeVal)); delete (yyvsp[(1) - (1)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003883 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003884 ;}
3885 break;
3886
3887 case 141:
3888#line 1397 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3889 {
3890 ((yyval.TypeList)=(yyvsp[(1) - (3)].TypeList))->push_back(*(yyvsp[(3) - (3)].TypeVal)); delete (yyvsp[(3) - (3)].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003891 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003892 ;}
3893 break;
3894
3895 case 142:
3896#line 1408 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3897 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003898 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00003899 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
3900 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (4)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003901 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003902 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003903 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003904 const Type *ETy = ATy->getElementType();
3905 int NumElements = ATy->getNumElements();
3906
3907 // Verify that we have the correct size...
Chris Lattner7d9801d2007-02-13 00:58:01 +00003908 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003909 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003910 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003911 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003912
3913 // Verify all elements are correct type!
Chris Lattner7d9801d2007-02-13 00:58:01 +00003914 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
3915 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003916 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3917 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner7d9801d2007-02-13 00:58:01 +00003918 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003919 }
3920
Chris Lattner7d9801d2007-02-13 00:58:01 +00003921 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[(3) - (4)].ConstVector));
3922 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003923 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003924 ;}
3925 break;
3926
3927 case 143:
3928#line 1436 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3929 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003930 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00003931 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
3932 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003933 if (ATy == 0)
3934 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003935 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003936
Andrew Lenharth6353e052006-12-08 18:07:09 +00003937 int NumElements = ATy->getNumElements();
3938 if (NumElements != -1 && NumElements != 0)
3939 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003940 " arguments, but has size of " + itostr(NumElements) +"");
Chris Lattner7d9801d2007-02-13 00:58:01 +00003941 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3942 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003943 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003944 ;}
3945 break;
3946
3947 case 144:
3948#line 1452 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3949 {
Reid Spencer14310612006-12-31 05:40:51 +00003950 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00003951 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
3952 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003953 if (ATy == 0)
3954 GEN_ERROR("Cannot make array constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003955 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer61c83e02006-08-18 08:43:06 +00003956
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003957 int NumElements = ATy->getNumElements();
3958 const Type *ETy = ATy->getElementType();
Chris Lattner7d9801d2007-02-13 00:58:01 +00003959 char *EndStr = UnEscapeLexed((yyvsp[(3) - (3)].StrVal), true);
3960 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[(3) - (3)].StrVal)))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003961 GEN_ERROR("Can't build string constant of size " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003962 itostr((int)(EndStr-(yyvsp[(3) - (3)].StrVal))) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003963 " when array has size " + itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003964 std::vector<Constant*> Vals;
3965 if (ETy == Type::Int8Ty) {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003966 for (unsigned char *C = (unsigned char *)(yyvsp[(3) - (3)].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003967 C != (unsigned char*)EndStr; ++C)
3968 Vals.push_back(ConstantInt::get(ETy, *C));
3969 } else {
Chris Lattner7d9801d2007-02-13 00:58:01 +00003970 free((yyvsp[(3) - (3)].StrVal));
Reid Spencerb5334b02007-02-05 10:18:06 +00003971 GEN_ERROR("Cannot build string arrays of non byte sized elements");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003972 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00003973 free((yyvsp[(3) - (3)].StrVal));
3974 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3975 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003976 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00003977 ;}
3978 break;
3979
3980 case 145:
3981#line 1481 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
3982 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003983 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00003984 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (4)].TypeVal))->getDescription());
3985 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[(1) - (4)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003986 if (PTy == 0)
3987 GEN_ERROR("Cannot make packed constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003988 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003989 const Type *ETy = PTy->getElementType();
3990 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003991
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003992 // Verify that we have the correct size...
Chris Lattner7d9801d2007-02-13 00:58:01 +00003993 if (NumElements != -1 && NumElements != (int)(yyvsp[(3) - (4)].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003994 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00003995 utostr((yyvsp[(3) - (4)].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003996 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003997
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003998 // Verify all elements are correct type!
Chris Lattner7d9801d2007-02-13 00:58:01 +00003999 for (unsigned i = 0; i < (yyvsp[(3) - (4)].ConstVector)->size(); i++) {
4000 if (ETy != (*(yyvsp[(3) - (4)].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004001 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
4002 ETy->getDescription() +"' as required!\nIt is of type '"+
Chris Lattner7d9801d2007-02-13 00:58:01 +00004003 (*(yyvsp[(3) - (4)].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004004 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00004005
Chris Lattner7d9801d2007-02-13 00:58:01 +00004006 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[(3) - (4)].ConstVector));
4007 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004008 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004009 ;}
4010 break;
4011
4012 case 146:
4013#line 1509 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4014 {
4015 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (4)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004016 if (STy == 0)
4017 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004018 (*(yyvsp[(1) - (4)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004019
Chris Lattner7d9801d2007-02-13 00:58:01 +00004020 if ((yyvsp[(3) - (4)].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004021 GEN_ERROR("Illegal number of initializers for structure type");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004022
4023 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner7d9801d2007-02-13 00:58:01 +00004024 for (unsigned i = 0, e = (yyvsp[(3) - (4)].ConstVector)->size(); i != e; ++i)
4025 if ((*(yyvsp[(3) - (4)].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004026 GEN_ERROR("Expected type '" +
4027 STy->getElementType(i)->getDescription() +
4028 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004029 " of structure initializer");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004030
4031 // Check to ensure that Type is not packed
4032 if (STy->isPacked())
4033 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
4034
Chris Lattner7d9801d2007-02-13 00:58:01 +00004035 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(3) - (4)].ConstVector));
4036 delete (yyvsp[(1) - (4)].TypeVal); delete (yyvsp[(3) - (4)].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004037 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004038 ;}
4039 break;
4040
4041 case 147:
4042#line 1534 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4043 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004044 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004045 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4046 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (3)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004047 if (STy == 0)
4048 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004049 (*(yyvsp[(1) - (3)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004050
4051 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004052 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004053
4054 // Check to ensure that Type is not packed
4055 if (STy->isPacked())
4056 GEN_ERROR("Unpacked Initializer to packed type '" + STy->getDescription() + "'");
4057
Chris Lattner7d9801d2007-02-13 00:58:01 +00004058 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4059 delete (yyvsp[(1) - (3)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004060 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004061 ;}
4062 break;
4063
4064 case 148:
4065#line 1553 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4066 {
4067 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (6)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004068 if (STy == 0)
4069 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004070 (*(yyvsp[(1) - (6)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004071
Chris Lattner7d9801d2007-02-13 00:58:01 +00004072 if ((yyvsp[(4) - (6)].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004073 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004074
4075 // Check to ensure that constants are compatible with the type initializer!
Chris Lattner7d9801d2007-02-13 00:58:01 +00004076 for (unsigned i = 0, e = (yyvsp[(4) - (6)].ConstVector)->size(); i != e; ++i)
4077 if ((*(yyvsp[(4) - (6)].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00004078 GEN_ERROR("Expected type '" +
4079 STy->getElementType(i)->getDescription() +
4080 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004081 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004082
4083 // Check to ensure that Type is packed
4084 if (!STy->isPacked())
4085 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
4086
Chris Lattner7d9801d2007-02-13 00:58:01 +00004087 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[(4) - (6)].ConstVector));
4088 delete (yyvsp[(1) - (6)].TypeVal); delete (yyvsp[(4) - (6)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004089 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004090 ;}
4091 break;
4092
4093 case 149:
4094#line 1578 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4095 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004096 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004097 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (5)].TypeVal))->getDescription());
4098 const StructType *STy = dyn_cast<StructType>((yyvsp[(1) - (5)].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004099 if (STy == 0)
4100 GEN_ERROR("Cannot make struct constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004101 (*(yyvsp[(1) - (5)].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004102
4103 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004104 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004105
4106 // Check to ensure that Type is packed
4107 if (!STy->isPacked())
4108 GEN_ERROR("Packed Initializer to unpacked type '" + STy->getDescription() + "'");
4109
Chris Lattner7d9801d2007-02-13 00:58:01 +00004110 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4111 delete (yyvsp[(1) - (5)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004112 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004113 ;}
4114 break;
4115
4116 case 150:
4117#line 1597 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4118 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004119 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004120 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4121 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004122 if (PTy == 0)
4123 GEN_ERROR("Cannot make null pointer constant with type: '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004124 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004125
Chris Lattner7d9801d2007-02-13 00:58:01 +00004126 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
4127 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004128 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004129 ;}
4130 break;
4131
4132 case 151:
4133#line 1609 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4134 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004135 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004136 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4137 (yyval.ConstVal) = UndefValue::get((yyvsp[(1) - (2)].TypeVal)->get());
4138 delete (yyvsp[(1) - (2)].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004139 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004140 ;}
4141 break;
4142
4143 case 152:
4144#line 1616 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4145 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004146 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004147 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4148 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[(1) - (2)].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004149 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004150 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004151
4152 // ConstExprs can exist in the body of a function, thus creating
4153 // GlobalValues whenever they refer to a variable. Because we are in
4154 // the context of a function, getValNonImprovising will search the functions
4155 // symbol table instead of the module symbol table for the global symbol,
4156 // which throws things all off. To get around this, we just tell
4157 // getValNonImprovising that we are at global scope here.
4158 //
4159 Function *SavedCurFn = CurFun.CurrentFunction;
4160 CurFun.CurrentFunction = 0;
4161
Chris Lattner7d9801d2007-02-13 00:58:01 +00004162 Value *V = getValNonImprovising(Ty, (yyvsp[(2) - (2)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004163 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004164
4165 CurFun.CurrentFunction = SavedCurFn;
4166
4167 // If this is an initializer for a constant pointer, which is referencing a
4168 // (currently) undefined variable, create a stub now that shall be replaced
4169 // in the future with the right type of variable.
4170 //
4171 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004172 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004173 const PointerType *PT = cast<PointerType>(Ty);
4174
4175 // First check to see if the forward references value is already created!
4176 PerModuleInfo::GlobalRefsType::iterator I =
Chris Lattner7d9801d2007-02-13 00:58:01 +00004177 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004178
4179 if (I != CurModule.GlobalRefs.end()) {
4180 V = I->second; // Placeholder already exists, use it...
Chris Lattner7d9801d2007-02-13 00:58:01 +00004181 (yyvsp[(2) - (2)].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004182 } else {
4183 std::string Name;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004184 if ((yyvsp[(2) - (2)].ValIDVal).Type == ValID::GlobalName)
4185 Name = (yyvsp[(2) - (2)].ValIDVal).Name;
4186 else if ((yyvsp[(2) - (2)].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004187 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004188
4189 // Create the forward referenced global.
4190 GlobalValue *GV;
4191 if (const FunctionType *FTy =
4192 dyn_cast<FunctionType>(PT->getElementType())) {
4193 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4194 CurModule.CurrentModule);
4195 } else {
4196 GV = new GlobalVariable(PT->getElementType(), false,
4197 GlobalValue::ExternalLinkage, 0,
4198 Name, CurModule.CurrentModule);
4199 }
4200
4201 // Keep track of the fact that we have a forward ref to recycle it
Chris Lattner7d9801d2007-02-13 00:58:01 +00004202 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[(2) - (2)].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004203 V = GV;
4204 }
4205 }
4206
Chris Lattner7d9801d2007-02-13 00:58:01 +00004207 (yyval.ConstVal) = cast<GlobalValue>(V);
4208 delete (yyvsp[(1) - (2)].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004209 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004210 ;}
4211 break;
4212
4213 case 153:
4214#line 1682 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4215 {
Reid Spencer14310612006-12-31 05:40:51 +00004216 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004217 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4218 if ((yyvsp[(1) - (2)].TypeVal)->get() != (yyvsp[(2) - (2)].ConstVal)->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004219 GEN_ERROR("Mismatched types for constant expression: " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004220 (*(yyvsp[(1) - (2)].TypeVal))->getDescription() + " and " + (yyvsp[(2) - (2)].ConstVal)->getType()->getDescription());
4221 (yyval.ConstVal) = (yyvsp[(2) - (2)].ConstVal);
4222 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004223 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004224 ;}
4225 break;
4226
4227 case 154:
4228#line 1692 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4229 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004230 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004231 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
4232 const Type *Ty = (yyvsp[(1) - (2)].TypeVal)->get();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004233 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencerb5334b02007-02-05 10:18:06 +00004234 GEN_ERROR("Cannot create a null initialized value of this type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004235 (yyval.ConstVal) = Constant::getNullValue(Ty);
4236 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004237 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004238 ;}
4239 break;
4240
4241 case 155:
4242#line 1702 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4243 { // integral constants
4244 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004245 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004246 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].SInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004247 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004248 ;}
4249 break;
4250
4251 case 156:
4252#line 1708 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4253 { // integral constants
4254 if (!ConstantInt::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004255 GEN_ERROR("Constant value doesn't fit in type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004256 (yyval.ConstVal) = ConstantInt::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].UInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004257 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004258 ;}
4259 break;
4260
4261 case 157:
4262#line 1714 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4263 { // Boolean constants
4264 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4265 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004266 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004267 ;}
4268 break;
4269
4270 case 158:
4271#line 1719 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4272 { // Boolean constants
4273 assert(cast<IntegerType>((yyvsp[(1) - (2)].PrimType))->getBitWidth() == 1 && "Not Bool?");
4274 (yyval.ConstVal) = ConstantInt::getFalse();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004275 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004276 ;}
4277 break;
4278
4279 case 159:
4280#line 1724 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4281 { // Float & Double constants
4282 if (!ConstantFP::isValueValidForType((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004283 GEN_ERROR("Floating point constant invalid for type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004284 (yyval.ConstVal) = ConstantFP::get((yyvsp[(1) - (2)].PrimType), (yyvsp[(2) - (2)].FPVal));
Reid Spencer6f407902007-01-13 05:00:46 +00004285 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004286 ;}
4287 break;
4288
4289 case 160:
4290#line 1732 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4291 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004292 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004293 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
4294 Constant *Val = (yyvsp[(3) - (6)].ConstVal);
4295 const Type *DestTy = (yyvsp[(5) - (6)].TypeVal)->get();
4296 if (!CastInst::castIsValid((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004297 GEN_ERROR("invalid cast opcode for cast from '" +
4298 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004299 DestTy->getDescription() + "'");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004300 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[(1) - (6)].CastOpVal), (yyvsp[(3) - (6)].ConstVal), DestTy);
4301 delete (yyvsp[(5) - (6)].TypeVal);
4302 ;}
4303 break;
4304
4305 case 161:
4306#line 1744 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4307 {
4308 if (!isa<PointerType>((yyvsp[(3) - (5)].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004309 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004310
4311 const Type *IdxTy =
Chris Lattner7d9801d2007-02-13 00:58:01 +00004312 GetElementPtrInst::getIndexedType((yyvsp[(3) - (5)].ConstVal)->getType(), &(*(yyvsp[(4) - (5)].ValueList))[0], (yyvsp[(4) - (5)].ValueList)->size(),
4313 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004314 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004315 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004316
Chris Lattnerf7469af2007-01-31 04:44:08 +00004317 SmallVector<Constant*, 8> IdxVec;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004318 for (unsigned i = 0, e = (yyvsp[(4) - (5)].ValueList)->size(); i != e; ++i)
4319 if (Constant *C = dyn_cast<Constant>((*(yyvsp[(4) - (5)].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004320 IdxVec.push_back(C);
4321 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004322 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004323
Chris Lattner7d9801d2007-02-13 00:58:01 +00004324 delete (yyvsp[(4) - (5)].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004325
Chris Lattner7d9801d2007-02-13 00:58:01 +00004326 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[(3) - (5)].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004327 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004328 ;}
4329 break;
4330
4331 case 162:
4332#line 1766 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4333 {
4334 if ((yyvsp[(3) - (8)].ConstVal)->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004335 GEN_ERROR("Select condition must be of boolean type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004336 if ((yyvsp[(5) - (8)].ConstVal)->getType() != (yyvsp[(7) - (8)].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004337 GEN_ERROR("Select operand types must match");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004338 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004339 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004340 ;}
4341 break;
4342
4343 case 163:
4344#line 1774 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4345 {
4346 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004347 GEN_ERROR("Binary operator types must match");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004348 CHECK_FOR_ERROR;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004349 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
4350 ;}
4351 break;
4352
4353 case 164:
4354#line 1780 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4355 {
4356 if ((yyvsp[(3) - (6)].ConstVal)->getType() != (yyvsp[(5) - (6)].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004357 GEN_ERROR("Logical operator types must match");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004358 if (!(yyvsp[(3) - (6)].ConstVal)->getType()->isInteger()) {
4359 if (Instruction::isShift((yyvsp[(1) - (6)].BinaryOpVal)) || !isa<PackedType>((yyvsp[(3) - (6)].ConstVal)->getType()) ||
4360 !cast<PackedType>((yyvsp[(3) - (6)].ConstVal)->getType())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00004361 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004362 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00004363 (yyval.ConstVal) = ConstantExpr::get((yyvsp[(1) - (6)].BinaryOpVal), (yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004364 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004365 ;}
4366 break;
4367
4368 case 165:
4369#line 1791 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4370 {
4371 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004372 GEN_ERROR("icmp operand types must match");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004373 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[(2) - (7)].IPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4374 ;}
4375 break;
4376
4377 case 166:
4378#line 1796 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4379 {
4380 if ((yyvsp[(4) - (7)].ConstVal)->getType() != (yyvsp[(6) - (7)].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004381 GEN_ERROR("fcmp operand types must match");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004382 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[(2) - (7)].FPredicate), (yyvsp[(4) - (7)].ConstVal), (yyvsp[(6) - (7)].ConstVal));
4383 ;}
4384 break;
4385
4386 case 167:
4387#line 1801 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4388 {
4389 if (!ExtractElementInst::isValidOperands((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004390 GEN_ERROR("Invalid extractelement operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004391 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[(3) - (6)].ConstVal), (yyvsp[(5) - (6)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004392 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004393 ;}
4394 break;
4395
4396 case 168:
4397#line 1807 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4398 {
4399 if (!InsertElementInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004400 GEN_ERROR("Invalid insertelement operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004401 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004402 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004403 ;}
4404 break;
4405
4406 case 169:
4407#line 1813 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4408 {
4409 if (!ShuffleVectorInst::isValidOperands((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004410 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004411 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[(3) - (8)].ConstVal), (yyvsp[(5) - (8)].ConstVal), (yyvsp[(7) - (8)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004412 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004413 ;}
4414 break;
4415
4416 case 170:
4417#line 1822 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4418 {
4419 ((yyval.ConstVector) = (yyvsp[(1) - (3)].ConstVector))->push_back((yyvsp[(3) - (3)].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004420 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004421 ;}
4422 break;
4423
4424 case 171:
4425#line 1826 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4426 {
4427 (yyval.ConstVector) = new std::vector<Constant*>();
4428 (yyval.ConstVector)->push_back((yyvsp[(1) - (1)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004429 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004430 ;}
4431 break;
4432
4433 case 172:
4434#line 1834 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4435 { (yyval.BoolVal) = false; ;}
4436 break;
4437
4438 case 173:
4439#line 1834 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4440 { (yyval.BoolVal) = true; ;}
4441 break;
4442
4443 case 174:
4444#line 1845 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4445 {
4446 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004447 CurModule.ModuleDone();
4448 CHECK_FOR_ERROR;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004449 ;}
4450 break;
4451
4452 case 175:
4453#line 1850 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4454 {
4455 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004456 CurModule.ModuleDone();
4457 CHECK_FOR_ERROR;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004458 ;}
4459 break;
4460
4461 case 178:
4462#line 1863 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4463 { CurFun.isDeclare = false; ;}
4464 break;
4465
4466 case 179:
4467#line 1863 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4468 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004469 CurFun.FunctionDone();
4470 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004471 ;}
4472 break;
4473
4474 case 180:
4475#line 1867 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4476 { CurFun.isDeclare = true; ;}
4477 break;
4478
4479 case 181:
4480#line 1867 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4481 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004482 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004483 ;}
4484 break;
4485
4486 case 182:
4487#line 1870 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4488 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004489 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004490 ;}
4491 break;
4492
4493 case 183:
4494#line 1873 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4495 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004496 // Emit an error if there are any unresolved types left.
4497 if (!CurModule.LateResolveTypes.empty()) {
4498 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004499 if (DID.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +00004500 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4501 } else {
4502 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4503 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004504 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004505 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004506 ;}
4507 break;
4508
4509 case 184:
4510#line 1885 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4511 {
Reid Spencer14310612006-12-31 05:40:51 +00004512 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004513 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (3)].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004514 // Eagerly resolve types. This is not an optimization, this is a
4515 // requirement that is due to the fact that we could have this:
4516 //
4517 // %list = type { %list * }
4518 // %list = type { %list * } ; repeated type decl
4519 //
4520 // If types are not resolved eagerly, then the two types will not be
4521 // determined to be the same type!
4522 //
Chris Lattner7d9801d2007-02-13 00:58:01 +00004523 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), *(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004524
Chris Lattner7d9801d2007-02-13 00:58:01 +00004525 if (!setTypeName(*(yyvsp[(3) - (3)].TypeVal), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004526 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004527 // If this is a named type that is not a redefinition, add it to the slot
4528 // table.
Chris Lattner7d9801d2007-02-13 00:58:01 +00004529 CurModule.Types.push_back(*(yyvsp[(3) - (3)].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004530 }
Reid Spencera132e042006-12-03 05:46:11 +00004531
Chris Lattner7d9801d2007-02-13 00:58:01 +00004532 delete (yyvsp[(3) - (3)].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004533 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004534 ;}
4535 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00004536
Chris Lattner7d9801d2007-02-13 00:58:01 +00004537 case 185:
4538#line 1909 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4539 {
4540 ResolveTypeTo((yyvsp[(1) - (3)].StrVal), (yyvsp[(3) - (3)].PrimType));
4541
4542 if (!setTypeName((yyvsp[(3) - (3)].PrimType), (yyvsp[(1) - (3)].StrVal)) && !(yyvsp[(1) - (3)].StrVal)) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004543 CHECK_FOR_ERROR
4544 // If this is a named type that is not a redefinition, add it to the slot
4545 // table.
Chris Lattner7d9801d2007-02-13 00:58:01 +00004546 CurModule.Types.push_back((yyvsp[(3) - (3)].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004547 }
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004548 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004549 ;}
4550 break;
4551
4552 case 186:
4553#line 1920 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4554 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004555 /* "Externally Visible" Linkage */
Chris Lattner7d9801d2007-02-13 00:58:01 +00004556 if ((yyvsp[(4) - (4)].ConstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004557 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004558 CurGV = ParseGlobalVariable((yyvsp[(1) - (4)].StrVal), GlobalValue::ExternalLinkage,
4559 (yyvsp[(2) - (4)].Visibility), (yyvsp[(3) - (4)].BoolVal), (yyvsp[(4) - (4)].ConstVal)->getType(), (yyvsp[(4) - (4)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004560 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004561 ;}
4562 break;
4563
4564 case 187:
4565#line 1927 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4566 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004567 CurGV = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004568 ;}
4569 break;
4570
4571 case 188:
4572#line 1930 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4573 {
4574 if ((yyvsp[(5) - (5)].ConstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004575 GEN_ERROR("Global value initializer is not a constant");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004576 CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), (yyvsp[(2) - (5)].Linkage), (yyvsp[(3) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), (yyvsp[(5) - (5)].ConstVal)->getType(), (yyvsp[(5) - (5)].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004577 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004578 ;}
4579 break;
4580
4581 case 189:
4582#line 1935 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4583 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004584 CurGV = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004585 ;}
4586 break;
4587
4588 case 190:
4589#line 1938 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4590 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004591 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004592 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (5)].TypeVal))->getDescription());
4593 CurGV = ParseGlobalVariable((yyvsp[(1) - (5)].StrVal), (yyvsp[(2) - (5)].Linkage), (yyvsp[(3) - (5)].Visibility), (yyvsp[(4) - (5)].BoolVal), *(yyvsp[(5) - (5)].TypeVal), 0);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004594 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004595 delete (yyvsp[(5) - (5)].TypeVal);
4596 ;}
4597 break;
4598
4599 case 191:
4600#line 1944 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4601 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004602 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004603 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004604 ;}
4605 break;
4606
4607 case 192:
4608#line 1948 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4609 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004610 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004611 ;}
4612 break;
4613
4614 case 193:
4615#line 1951 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4616 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004617 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004618 ;}
4619 break;
4620
4621 case 194:
4622#line 1957 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4623 {
Chris Lattner66316012006-01-24 04:14:29 +00004624 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner7d9801d2007-02-13 00:58:01 +00004625 char *EndStr = UnEscapeLexed((yyvsp[(1) - (1)].StrVal), true);
4626 std::string NewAsm((yyvsp[(1) - (1)].StrVal), EndStr);
4627 free((yyvsp[(1) - (1)].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004628
4629 if (AsmSoFar.empty())
4630 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4631 else
4632 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004633 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004634;}
4635 break;
4636
4637 case 195:
4638#line 1970 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4639 {
4640 CurModule.CurrentModule->setTargetTriple((yyvsp[(3) - (3)].StrVal));
4641 free((yyvsp[(3) - (3)].StrVal));
4642 ;}
4643 break;
4644
4645 case 196:
4646#line 1974 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4647 {
4648 CurModule.CurrentModule->setDataLayout((yyvsp[(3) - (3)].StrVal));
4649 free((yyvsp[(3) - (3)].StrVal));
4650 ;}
4651 break;
4652
4653 case 198:
4654#line 1981 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4655 {
4656 CurModule.CurrentModule->addLibrary((yyvsp[(3) - (3)].StrVal));
4657 free((yyvsp[(3) - (3)].StrVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004658 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004659 ;}
4660 break;
4661
4662 case 199:
4663#line 1986 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4664 {
4665 CurModule.CurrentModule->addLibrary((yyvsp[(1) - (1)].StrVal));
4666 free((yyvsp[(1) - (1)].StrVal));
Reid Spencera54b7cb2007-01-12 07:05:14 +00004667 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004668 ;}
4669 break;
4670
4671 case 200:
4672#line 1991 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4673 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004674 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004675 ;}
4676 break;
4677
4678 case 201:
4679#line 2000 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4680 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004681 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004682 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
4683 if (*(yyvsp[(3) - (5)].TypeVal) == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004684 GEN_ERROR("void typed arguments are invalid");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004685 ArgListEntry E; E.Attrs = (yyvsp[(4) - (5)].ParamAttrs); E.Ty = (yyvsp[(3) - (5)].TypeVal); E.Name = (yyvsp[(5) - (5)].StrVal);
4686 (yyval.ArgList) = (yyvsp[(1) - (5)].ArgList);
4687 (yyvsp[(1) - (5)].ArgList)->push_back(E);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004688 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004689 ;}
4690 break;
4691
4692 case 202:
4693#line 2010 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4694 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004695 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00004696 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
4697 if (*(yyvsp[(1) - (3)].TypeVal) == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004698 GEN_ERROR("void typed arguments are invalid");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004699 ArgListEntry E; E.Attrs = (yyvsp[(2) - (3)].ParamAttrs); E.Ty = (yyvsp[(1) - (3)].TypeVal); E.Name = (yyvsp[(3) - (3)].StrVal);
4700 (yyval.ArgList) = new ArgListType;
4701 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004702 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004703 ;}
4704 break;
4705
4706 case 203:
4707#line 2021 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4708 {
4709 (yyval.ArgList) = (yyvsp[(1) - (1)].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004710 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004711 ;}
4712 break;
4713
4714 case 204:
4715#line 2025 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4716 {
4717 (yyval.ArgList) = (yyvsp[(1) - (3)].ArgList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004718 struct ArgListEntry E;
4719 E.Ty = new PATypeHolder(Type::VoidTy);
4720 E.Name = 0;
4721 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004722 (yyval.ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004723 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004724 ;}
4725 break;
4726
4727 case 205:
4728#line 2034 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4729 {
4730 (yyval.ArgList) = new ArgListType;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004731 struct ArgListEntry E;
4732 E.Ty = new PATypeHolder(Type::VoidTy);
4733 E.Name = 0;
4734 E.Attrs = FunctionType::NoAttributeSet;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004735 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004736 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004737 ;}
4738 break;
4739
4740 case 206:
4741#line 2043 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4742 {
4743 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004744 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004745 ;}
4746 break;
4747
4748 case 207:
4749#line 2049 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4750 {
4751 UnEscapeLexed((yyvsp[(3) - (9)].StrVal));
4752 std::string FunctionName((yyvsp[(3) - (9)].StrVal));
4753 free((yyvsp[(3) - (9)].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004754
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004755 // Check the function result for abstractness if this is a define. We should
4756 // have no abstract types at this point
Chris Lattner7d9801d2007-02-13 00:58:01 +00004757 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[(2) - (9)].TypeVal)))
4758 GEN_ERROR("Reference to abstract result: "+ (yyvsp[(2) - (9)].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004759
Reid Spencer68a24bd2005-08-27 18:50:39 +00004760 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00004761 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004762 ParamAttrs.push_back((yyvsp[(7) - (9)].ParamAttrs));
4763 if ((yyvsp[(5) - (9)].ArgList)) { // If there are arguments...
4764 for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin(); I != (yyvsp[(5) - (9)].ArgList)->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004765 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004766 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4767 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004768 ParamTypeList.push_back(Ty);
4769 if (Ty != Type::VoidTy)
4770 ParamAttrs.push_back(I->Attrs);
4771 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004772 }
4773
4774 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4775 if (isVarArg) ParamTypeList.pop_back();
4776
Chris Lattner7d9801d2007-02-13 00:58:01 +00004777 FunctionType *FT = FunctionType::get(*(yyvsp[(2) - (9)].TypeVal), ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00004778 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004779 const PointerType *PFT = PointerType::get(FT);
Chris Lattner7d9801d2007-02-13 00:58:01 +00004780 delete (yyvsp[(2) - (9)].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004781
4782 ValID ID;
4783 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004784 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004785 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004786 ID = ValID::createGlobalID(CurModule.Values[PFT].size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004787 }
4788
4789 Function *Fn = 0;
4790 // See if this function was forward referenced. If so, recycle the object.
4791 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4792 // Move the function to the end of the list, from whereever it was
4793 // previously inserted.
4794 Fn = cast<Function>(FWRef);
4795 CurModule.CurrentModule->getFunctionList().remove(Fn);
4796 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4797 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00004798 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
4799 if (Fn->getFunctionType() != FT ) {
4800 // The existing function doesn't have the same type. This is an overload
4801 // error.
4802 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4803 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
4804 // Neither the existing or the current function is a declaration and they
4805 // have the same name and same type. Clearly this is a redefinition.
Reid Spencerb5334b02007-02-05 10:18:06 +00004806 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004807 } if (Fn->isDeclaration()) {
4808 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004809 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4810 AI != AE; ++AI)
4811 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004812 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004813 } else { // Not already defined?
4814 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4815 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004816
Reid Spencer68a24bd2005-08-27 18:50:39 +00004817 InsertValue(Fn, CurModule.Values);
4818 }
4819
4820 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004821
4822 if (CurFun.isDeclare) {
4823 // If we have declaration, always overwrite linkage. This will allow us to
4824 // correctly handle cases, when pointer to function is passed as argument to
4825 // another function.
4826 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004827 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004828 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00004829 Fn->setCallingConv((yyvsp[(1) - (9)].UIntVal));
4830 Fn->setAlignment((yyvsp[(9) - (9)].UIntVal));
4831 if ((yyvsp[(8) - (9)].StrVal)) {
4832 Fn->setSection((yyvsp[(8) - (9)].StrVal));
4833 free((yyvsp[(8) - (9)].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004834 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004835
4836 // Add all of the arguments we parsed to the function...
Chris Lattner7d9801d2007-02-13 00:58:01 +00004837 if ((yyvsp[(5) - (9)].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004838 if (isVarArg) { // Nuke the last entry
Chris Lattner7d9801d2007-02-13 00:58:01 +00004839 assert((yyvsp[(5) - (9)].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[(5) - (9)].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00004840 "Not a varargs marker!");
Chris Lattner7d9801d2007-02-13 00:58:01 +00004841 delete (yyvsp[(5) - (9)].ArgList)->back().Ty;
4842 (yyvsp[(5) - (9)].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004843 }
4844 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00004845 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00004846 unsigned Idx = 1;
Chris Lattner7d9801d2007-02-13 00:58:01 +00004847 for (ArgListType::iterator I = (yyvsp[(5) - (9)].ArgList)->begin();
4848 I != (yyvsp[(5) - (9)].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004849 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00004850 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004851 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004852 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004853 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004854 }
Reid Spencera132e042006-12-03 05:46:11 +00004855
Chris Lattner7d9801d2007-02-13 00:58:01 +00004856 delete (yyvsp[(5) - (9)].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004857 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004858 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004859;}
4860 break;
4861
4862 case 210:
4863#line 2162 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4864 {
4865 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004866
4867 // Make sure that we keep track of the linkage type even if there was a
4868 // previous "declare".
Chris Lattner7d9801d2007-02-13 00:58:01 +00004869 (yyval.FunctionVal)->setLinkage((yyvsp[(1) - (4)].Linkage));
4870 (yyval.FunctionVal)->setVisibility((yyvsp[(2) - (4)].Visibility));
4871;}
4872 break;
4873
4874 case 213:
4875#line 2173 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4876 {
4877 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004878 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004879;}
4880 break;
4881
4882 case 214:
4883#line 2178 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4884 {
4885 CurFun.CurrentFunction->setLinkage((yyvsp[(1) - (3)].Linkage));
4886 CurFun.CurrentFunction->setVisibility((yyvsp[(2) - (3)].Visibility));
4887 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004888 CurFun.FunctionDone();
4889 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004890 ;}
4891 break;
4892
4893 case 215:
4894#line 2190 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4895 {
4896 (yyval.BoolVal) = false;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004897 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004898 ;}
4899 break;
4900
4901 case 216:
4902#line 2194 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4903 {
4904 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004905 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004906 ;}
4907 break;
4908
4909 case 217:
4910#line 2199 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4911 { // A reference to a direct constant
4912 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].SInt64Val));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004913 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004914 ;}
4915 break;
4916
4917 case 218:
4918#line 2203 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4919 {
4920 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].UInt64Val));
Reid Spencer6f407902007-01-13 05:00:46 +00004921 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004922 ;}
4923 break;
4924
4925 case 219:
4926#line 2207 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4927 { // Perhaps it's an FP constant?
4928 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].FPVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004929 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004930 ;}
4931 break;
4932
4933 case 220:
4934#line 2211 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4935 {
4936 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004937 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004938 ;}
4939 break;
4940
4941 case 221:
4942#line 2215 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4943 {
4944 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004945 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004946 ;}
4947 break;
4948
4949 case 222:
4950#line 2219 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4951 {
4952 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004953 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004954 ;}
4955 break;
4956
4957 case 223:
4958#line 2223 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4959 {
4960 (yyval.ValIDVal) = ValID::createUndef();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004961 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004962 ;}
4963 break;
4964
4965 case 224:
4966#line 2227 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4967 { // A vector zero constant.
4968 (yyval.ValIDVal) = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004969 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004970 ;}
4971 break;
4972
4973 case 225:
4974#line 2231 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
4975 { // Nonempty unsized packed vector
4976 const Type *ETy = (*(yyvsp[(2) - (3)].ConstVector))[0]->getType();
4977 int NumElements = (yyvsp[(2) - (3)].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004978
4979 PackedType* pt = PackedType::get(ETy, NumElements);
4980 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004981 HandleUpRefs(
4982 PackedType::get(
4983 ETy,
4984 NumElements)
4985 )
4986 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004987
4988 // Verify all elements are correct type!
Chris Lattner7d9801d2007-02-13 00:58:01 +00004989 for (unsigned i = 0; i < (yyvsp[(2) - (3)].ConstVector)->size(); i++) {
4990 if (ETy != (*(yyvsp[(2) - (3)].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004991 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004992 ETy->getDescription() +"' as required!\nIt is of type '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00004993 (*(yyvsp[(2) - (3)].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004994 }
4995
Chris Lattner7d9801d2007-02-13 00:58:01 +00004996 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[(2) - (3)].ConstVector)));
4997 delete PTy; delete (yyvsp[(2) - (3)].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004998 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00004999 ;}
5000 break;
5001
5002 case 226:
5003#line 2256 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5004 {
5005 (yyval.ValIDVal) = ValID::create((yyvsp[(1) - (1)].ConstVal));
Anton Korobeynikov178a3522007-01-12 19:22:51 +00005006 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005007 ;}
5008 break;
5009
5010 case 227:
5011#line 2260 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5012 {
5013 char *End = UnEscapeLexed((yyvsp[(3) - (5)].StrVal), true);
5014 std::string AsmStr = std::string((yyvsp[(3) - (5)].StrVal), End);
5015 End = UnEscapeLexed((yyvsp[(5) - (5)].StrVal), true);
5016 std::string Constraints = std::string((yyvsp[(5) - (5)].StrVal), End);
5017 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[(2) - (5)].BoolVal));
5018 free((yyvsp[(3) - (5)].StrVal));
5019 free((yyvsp[(5) - (5)].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005020 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005021 ;}
5022 break;
5023
5024 case 228:
5025#line 2274 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5026 { // Is it an integer reference...?
5027 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[(1) - (1)].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005028 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005029 ;}
5030 break;
5031
5032 case 229:
5033#line 2278 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5034 {
5035 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[(1) - (1)].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005036 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005037 ;}
5038 break;
5039
5040 case 230:
5041#line 2282 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5042 { // Is it a named reference...?
5043 (yyval.ValIDVal) = ValID::createLocalName((yyvsp[(1) - (1)].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005044 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005045 ;}
5046 break;
5047
5048 case 231:
5049#line 2286 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5050 { // Is it a named reference...?
5051 (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[(1) - (1)].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005052 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005053 ;}
5054 break;
5055
5056 case 234:
5057#line 2298 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5058 {
Reid Spencer832254e2007-02-02 02:16:23 +00005059 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005060 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (2)].TypeVal))->getDescription());
5061 (yyval.ValueVal) = getVal(*(yyvsp[(1) - (2)].TypeVal), (yyvsp[(2) - (2)].ValIDVal));
5062 delete (yyvsp[(1) - (2)].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005063 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005064 ;}
5065 break;
5066
5067 case 235:
5068#line 2307 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5069 {
5070 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005071 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005072 ;}
5073 break;
5074
5075 case 236:
5076#line 2311 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5077 { // Do not allow functions with 0 basic blocks
5078 (yyval.FunctionVal) = (yyvsp[(1) - (2)].FunctionVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005079 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005080 ;}
5081 break;
5082
5083 case 237:
5084#line 2320 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5085 {
5086 setValueName((yyvsp[(3) - (3)].TermInstVal), (yyvsp[(2) - (3)].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005087 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005088 InsertValue((yyvsp[(3) - (3)].TermInstVal));
5089 (yyvsp[(1) - (3)].BasicBlockVal)->getInstList().push_back((yyvsp[(3) - (3)].TermInstVal));
5090 InsertValue((yyvsp[(1) - (3)].BasicBlockVal));
5091 (yyval.BasicBlockVal) = (yyvsp[(1) - (3)].BasicBlockVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005092 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005093 ;}
5094 break;
5095
5096 case 238:
5097#line 2330 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5098 {
5099 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[(2) - (2)].InstVal)))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005100 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
5101 if (CI2->getParent() == 0)
Chris Lattner7d9801d2007-02-13 00:58:01 +00005102 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back(CI2);
5103 (yyvsp[(1) - (2)].BasicBlockVal)->getInstList().push_back((yyvsp[(2) - (2)].InstVal));
5104 (yyval.BasicBlockVal) = (yyvsp[(1) - (2)].BasicBlockVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005105 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005106 ;}
5107 break;
5108
5109 case 239:
5110#line 2339 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5111 {
5112 (yyval.BasicBlockVal) = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005113 CHECK_FOR_ERROR
5114
5115 // Make sure to move the basic block to the correct location in the
5116 // function, instead of leaving it inserted wherever it was first
5117 // referenced.
5118 Function::BasicBlockListType &BBL =
5119 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner7d9801d2007-02-13 00:58:01 +00005120 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005121 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005122 ;}
5123 break;
5124
5125 case 240:
5126#line 2351 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5127 {
5128 (yyval.BasicBlockVal) = getBBVal(ValID::createLocalName((yyvsp[(1) - (1)].StrVal)), true);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005129 CHECK_FOR_ERROR
5130
5131 // Make sure to move the basic block to the correct location in the
5132 // function, instead of leaving it inserted wherever it was first
5133 // referenced.
5134 Function::BasicBlockListType &BBL =
5135 CurFun.CurrentFunction->getBasicBlockList();
Chris Lattner7d9801d2007-02-13 00:58:01 +00005136 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00005137 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005138 ;}
5139 break;
Reid Spencer3822ff52006-11-08 06:47:33 +00005140
Chris Lattner7d9801d2007-02-13 00:58:01 +00005141 case 241:
5142#line 2364 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5143 { // Return with a result...
5144 (yyval.TermInstVal) = new ReturnInst((yyvsp[(2) - (2)].ValueVal));
5145 CHECK_FOR_ERROR
5146 ;}
5147 break;
5148
5149 case 242:
5150#line 2368 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5151 { // Return with no result...
5152 (yyval.TermInstVal) = new ReturnInst();
5153 CHECK_FOR_ERROR
5154 ;}
5155 break;
5156
5157 case 243:
5158#line 2372 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5159 { // Unconditional Branch...
5160 BasicBlock* tmpBB = getBBVal((yyvsp[(3) - (3)].ValIDVal));
5161 CHECK_FOR_ERROR
5162 (yyval.TermInstVal) = new BranchInst(tmpBB);
5163 ;}
5164 break;
5165
5166 case 244:
5167#line 2377 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5168 {
5169 assert(cast<IntegerType>((yyvsp[(2) - (9)].PrimType))->getBitWidth() == 1 && "Not Bool?");
5170 BasicBlock* tmpBBA = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5171 CHECK_FOR_ERROR
5172 BasicBlock* tmpBBB = getBBVal((yyvsp[(9) - (9)].ValIDVal));
5173 CHECK_FOR_ERROR
5174 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[(3) - (9)].ValIDVal));
5175 CHECK_FOR_ERROR
5176 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5177 ;}
5178 break;
5179
5180 case 245:
5181#line 2387 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5182 {
5183 Value* tmpVal = getVal((yyvsp[(2) - (9)].PrimType), (yyvsp[(3) - (9)].ValIDVal));
5184 CHECK_FOR_ERROR
5185 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (9)].ValIDVal));
5186 CHECK_FOR_ERROR
5187 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[(8) - (9)].JumpTable)->size());
5188 (yyval.TermInstVal) = S;
5189
5190 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[(8) - (9)].JumpTable)->begin(),
5191 E = (yyvsp[(8) - (9)].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005192 for (; I != E; ++I) {
5193 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5194 S->addCase(CI, I->second);
5195 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005196 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005197 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00005198 delete (yyvsp[(8) - (9)].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005199 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005200 ;}
5201 break;
5202
5203 case 246:
5204#line 2406 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5205 {
5206 Value* tmpVal = getVal((yyvsp[(2) - (8)].PrimType), (yyvsp[(3) - (8)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005207 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005208 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (8)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005209 CHECK_FOR_ERROR
5210 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Chris Lattner7d9801d2007-02-13 00:58:01 +00005211 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00005212 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005213 ;}
5214 break;
5215
5216 case 247:
5217#line 2416 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5218 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005219
Reid Spencer14310612006-12-31 05:40:51 +00005220 // Handle the short syntax
5221 const PointerType *PFTy = 0;
5222 const FunctionType *Ty = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005223 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (14)].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005224 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5225 // Pull out the types of all of the arguments...
5226 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005227 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005228 ParamAttrs.push_back((yyvsp[(8) - (14)].ParamAttrs));
5229 for (ValueRefList::iterator I = (yyvsp[(6) - (14)].ValueRefList)->begin(), E = (yyvsp[(6) - (14)].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005230 const Type *Ty = I->Val->getType();
5231 if (Ty == Type::VoidTy)
5232 GEN_ERROR("Short call syntax cannot be used with varargs");
5233 ParamTypes.push_back(Ty);
5234 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005235 }
5236
Chris Lattner7d9801d2007-02-13 00:58:01 +00005237 Ty = FunctionType::get((yyvsp[(3) - (14)].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005238 PFTy = PointerType::get(Ty);
5239 }
5240
Chris Lattner7d9801d2007-02-13 00:58:01 +00005241 Value *V = getVal(PFTy, (yyvsp[(4) - (14)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005242 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005243 BasicBlock *Normal = getBBVal((yyvsp[(11) - (14)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005244 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005245 BasicBlock *Except = getBBVal((yyvsp[(14) - (14)].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005246 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005247
Reid Spencer14310612006-12-31 05:40:51 +00005248 // Check the arguments
5249 ValueList Args;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005250 if ((yyvsp[(6) - (14)].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005251 // Make sure no arguments is a good thing!
5252 if (Ty->getNumParams() != 0)
5253 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005254 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005255 } else { // Has arguments?
5256 // Loop through FunctionType's arguments and ensure they are specified
5257 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005258 FunctionType::param_iterator I = Ty->param_begin();
5259 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner7d9801d2007-02-13 00:58:01 +00005260 ValueRefList::iterator ArgI = (yyvsp[(6) - (14)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (14)].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005261
Reid Spencer14310612006-12-31 05:40:51 +00005262 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5263 if (ArgI->Val->getType() != *I)
5264 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005265 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005266 Args.push_back(ArgI->Val);
5267 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005268
Reid Spencer14310612006-12-31 05:40:51 +00005269 if (Ty->isVarArg()) {
5270 if (I == E)
5271 for (; ArgI != ArgE; ++ArgI)
5272 Args.push_back(ArgI->Val); // push the remaining varargs
5273 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005274 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005275 }
Reid Spencer14310612006-12-31 05:40:51 +00005276
5277 // Create the InvokeInst
5278 InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
Chris Lattner7d9801d2007-02-13 00:58:01 +00005279 II->setCallingConv((yyvsp[(2) - (14)].UIntVal));
5280 (yyval.TermInstVal) = II;
5281 delete (yyvsp[(6) - (14)].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005282 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005283 ;}
5284 break;
5285
5286 case 248:
5287#line 2482 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5288 {
5289 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005290 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005291 ;}
5292 break;
5293
5294 case 249:
5295#line 2486 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5296 {
5297 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005298 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005299 ;}
5300 break;
5301
5302 case 250:
5303#line 2493 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5304 {
5305 (yyval.JumpTable) = (yyvsp[(1) - (6)].JumpTable);
5306 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[(2) - (6)].PrimType), (yyvsp[(3) - (6)].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005307 CHECK_FOR_ERROR
5308 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005309 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005310
Chris Lattner7d9801d2007-02-13 00:58:01 +00005311 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005312 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005313 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5314 ;}
5315 break;
5316
5317 case 251:
5318#line 2504 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5319 {
5320 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5321 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[(1) - (5)].PrimType), (yyvsp[(2) - (5)].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005322 CHECK_FOR_ERROR
5323
5324 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005325 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005326
Chris Lattner7d9801d2007-02-13 00:58:01 +00005327 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005328 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005329 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5330 ;}
5331 break;
5332
5333 case 252:
5334#line 2517 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5335 {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005336 // Is this definition named?? if so, assign the name...
Chris Lattner7d9801d2007-02-13 00:58:01 +00005337 setValueName((yyvsp[(2) - (2)].InstVal), (yyvsp[(1) - (2)].StrVal));
Reid Spenceref9b9a72007-02-05 20:47:22 +00005338 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005339 InsertValue((yyvsp[(2) - (2)].InstVal));
5340 (yyval.InstVal) = (yyvsp[(2) - (2)].InstVal);
Reid Spenceref9b9a72007-02-05 20:47:22 +00005341 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005342 ;}
5343 break;
5344
5345 case 253:
5346#line 2527 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5347 { // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00005348 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005349 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (6)].TypeVal))->getDescription());
5350 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5351 Value* tmpVal = getVal(*(yyvsp[(1) - (6)].TypeVal), (yyvsp[(3) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005352 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005353 BasicBlock* tmpBB = getBBVal((yyvsp[(5) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005354 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005355 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5356 delete (yyvsp[(1) - (6)].TypeVal);
5357 ;}
5358 break;
5359
5360 case 254:
5361#line 2538 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5362 {
5363 (yyval.PHIList) = (yyvsp[(1) - (7)].PHIList);
5364 Value* tmpVal = getVal((yyvsp[(1) - (7)].PHIList)->front().first->getType(), (yyvsp[(4) - (7)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005365 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005366 BasicBlock* tmpBB = getBBVal((yyvsp[(6) - (7)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005367 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005368 (yyvsp[(1) - (7)].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5369 ;}
5370 break;
5371
5372 case 255:
5373#line 2548 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5374 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005375 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005376 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(1) - (3)].TypeVal))->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005377 // Used for call and invoke instructions
Chris Lattner7d9801d2007-02-13 00:58:01 +00005378 (yyval.ValueRefList) = new ValueRefList();
5379 ValueRefListEntry E; E.Attrs = (yyvsp[(3) - (3)].ParamAttrs); E.Val = getVal((yyvsp[(1) - (3)].TypeVal)->get(), (yyvsp[(2) - (3)].ValIDVal));
5380 (yyval.ValueRefList)->push_back(E);
5381 ;}
5382 break;
5383
5384 case 256:
5385#line 2556 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5386 {
Reid Spencer14310612006-12-31 05:40:51 +00005387 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005388 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (5)].TypeVal))->getDescription());
5389 (yyval.ValueRefList) = (yyvsp[(1) - (5)].ValueRefList);
5390 ValueRefListEntry E; E.Attrs = (yyvsp[(5) - (5)].ParamAttrs); E.Val = getVal((yyvsp[(3) - (5)].TypeVal)->get(), (yyvsp[(4) - (5)].ValIDVal));
5391 (yyval.ValueRefList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00005392 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005393 ;}
5394 break;
5395
5396 case 257:
5397#line 2564 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5398 { (yyval.ValueRefList) = new ValueRefList(); ;}
5399 break;
5400
5401 case 258:
5402#line 2567 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5403 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5404 break;
5405
5406 case 259:
5407#line 2568 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5408 {
5409 (yyval.ValueList) = (yyvsp[(1) - (3)].ValueList);
5410 (yyval.ValueList)->push_back((yyvsp[(3) - (3)].ValueVal));
Reid Spencer14310612006-12-31 05:40:51 +00005411 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005412 ;}
5413 break;
5414
5415 case 260:
5416#line 2575 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5417 {
5418 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005419 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005420 ;}
5421 break;
5422
5423 case 261:
5424#line 2579 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5425 {
5426 (yyval.BoolVal) = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005427 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005428 ;}
5429 break;
5430
5431 case 262:
5432#line 2584 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5433 {
Reid Spencer14310612006-12-31 05:40:51 +00005434 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005435 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
5436 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger() && !(*(yyvsp[(2) - (5)].TypeVal))->isFloatingPoint() &&
5437 !isa<PackedType>((*(yyvsp[(2) - (5)].TypeVal)).get()))
Reid Spencere4d87aa2006-12-23 06:05:41 +00005438 GEN_ERROR(
Reid Spencerb5334b02007-02-05 10:18:06 +00005439 "Arithmetic operator requires integer, FP, or packed operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005440 if (isa<PackedType>((*(yyvsp[(2) - (5)].TypeVal)).get()) &&
5441 ((yyvsp[(1) - (5)].BinaryOpVal) == Instruction::URem ||
5442 (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::SRem ||
5443 (yyvsp[(1) - (5)].BinaryOpVal) == Instruction::FRem))
Reid Spenceref9b9a72007-02-05 20:47:22 +00005444 GEN_ERROR("Remainder not supported on packed types");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005445 Value* val1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005446 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005447 Value* val2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005448 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005449 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), val1, val2);
5450 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005451 GEN_ERROR("binary operator returned null");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005452 delete (yyvsp[(2) - (5)].TypeVal);
5453 ;}
5454 break;
5455
5456 case 263:
5457#line 2605 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5458 {
Reid Spencer14310612006-12-31 05:40:51 +00005459 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005460 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (5)].TypeVal))->getDescription());
5461 if (!(*(yyvsp[(2) - (5)].TypeVal))->isInteger()) {
5462 if (Instruction::isShift((yyvsp[(1) - (5)].BinaryOpVal)) || !isa<PackedType>((yyvsp[(2) - (5)].TypeVal)->get()) ||
5463 !cast<PackedType>((yyvsp[(2) - (5)].TypeVal)->get())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00005464 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005465 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00005466 Value* tmpVal1 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(3) - (5)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005467 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005468 Value* tmpVal2 = getVal(*(yyvsp[(2) - (5)].TypeVal), (yyvsp[(5) - (5)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005469 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005470 (yyval.InstVal) = BinaryOperator::create((yyvsp[(1) - (5)].BinaryOpVal), tmpVal1, tmpVal2);
5471 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005472 GEN_ERROR("binary operator returned null");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005473 delete (yyvsp[(2) - (5)].TypeVal);
5474 ;}
5475 break;
5476
5477 case 264:
5478#line 2622 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5479 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005480 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005481 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
5482 if (isa<PackedType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005483 GEN_ERROR("Packed types not supported by icmp instruction");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005484 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005485 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005486 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005487 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005488 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].IPredicate), tmpVal1, tmpVal2);
5489 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005490 GEN_ERROR("icmp operator returned null");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005491 ;}
5492 break;
5493
5494 case 265:
5495#line 2635 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5496 {
Reid Spencer14310612006-12-31 05:40:51 +00005497 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005498 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (6)].TypeVal))->getDescription());
5499 if (isa<PackedType>((*(yyvsp[(3) - (6)].TypeVal)).get()))
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005500 GEN_ERROR("Packed types not supported by fcmp instruction");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005501 Value* tmpVal1 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(4) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005502 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005503 Value* tmpVal2 = getVal(*(yyvsp[(3) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005504 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005505 (yyval.InstVal) = CmpInst::create((yyvsp[(1) - (6)].OtherOpVal), (yyvsp[(2) - (6)].FPredicate), tmpVal1, tmpVal2);
5506 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005507 GEN_ERROR("fcmp operator returned null");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005508 ;}
5509 break;
5510
5511 case 266:
5512#line 2648 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5513 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005514 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005515 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
5516 Value* Val = (yyvsp[(2) - (4)].ValueVal);
5517 const Type* DestTy = (yyvsp[(4) - (4)].TypeVal)->get();
5518 if (!CastInst::castIsValid((yyvsp[(1) - (4)].CastOpVal), Val, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005519 GEN_ERROR("invalid cast opcode for cast from '" +
5520 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005521 DestTy->getDescription() + "'");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005522 (yyval.InstVal) = CastInst::create((yyvsp[(1) - (4)].CastOpVal), Val, DestTy);
5523 delete (yyvsp[(4) - (4)].TypeVal);
5524 ;}
5525 break;
5526
5527 case 267:
5528#line 2660 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5529 {
5530 if ((yyvsp[(2) - (6)].ValueVal)->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00005531 GEN_ERROR("select condition must be boolean");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005532 if ((yyvsp[(4) - (6)].ValueVal)->getType() != (yyvsp[(6) - (6)].ValueVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00005533 GEN_ERROR("select value types should match");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005534 (yyval.InstVal) = new SelectInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005535 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005536 ;}
5537 break;
5538
5539 case 268:
5540#line 2668 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5541 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005542 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005543 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(4) - (4)].TypeVal))->getDescription());
5544 (yyval.InstVal) = new VAArgInst((yyvsp[(2) - (4)].ValueVal), *(yyvsp[(4) - (4)].TypeVal));
5545 delete (yyvsp[(4) - (4)].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005546 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005547 ;}
5548 break;
5549
5550 case 269:
5551#line 2675 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5552 {
5553 if (!ExtractElementInst::isValidOperands((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005554 GEN_ERROR("Invalid extractelement operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005555 (yyval.InstVal) = new ExtractElementInst((yyvsp[(2) - (4)].ValueVal), (yyvsp[(4) - (4)].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005556 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005557 ;}
5558 break;
5559
5560 case 270:
5561#line 2681 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5562 {
5563 if (!InsertElementInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005564 GEN_ERROR("Invalid insertelement operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005565 (yyval.InstVal) = new InsertElementInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005566 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005567 ;}
5568 break;
5569
5570 case 271:
5571#line 2687 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5572 {
5573 if (!ShuffleVectorInst::isValidOperands((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005574 GEN_ERROR("Invalid shufflevector operands");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005575 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[(2) - (6)].ValueVal), (yyvsp[(4) - (6)].ValueVal), (yyvsp[(6) - (6)].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005576 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005577 ;}
5578 break;
5579
5580 case 272:
5581#line 2693 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5582 {
5583 const Type *Ty = (yyvsp[(2) - (2)].PHIList)->front().first->getType();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005584 if (!Ty->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00005585 GEN_ERROR("PHI node operands must be of first class type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005586 (yyval.InstVal) = new PHINode(Ty);
5587 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[(2) - (2)].PHIList)->size());
5588 while ((yyvsp[(2) - (2)].PHIList)->begin() != (yyvsp[(2) - (2)].PHIList)->end()) {
5589 if ((yyvsp[(2) - (2)].PHIList)->front().first->getType() != Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00005590 GEN_ERROR("All elements of a PHI node must be of the same type");
Chris Lattner7d9801d2007-02-13 00:58:01 +00005591 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[(2) - (2)].PHIList)->front().first, (yyvsp[(2) - (2)].PHIList)->front().second);
5592 (yyvsp[(2) - (2)].PHIList)->pop_front();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005593 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00005594 delete (yyvsp[(2) - (2)].PHIList); // Free the list...
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005595 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005596 ;}
5597 break;
5598
5599 case 273:
5600#line 2709 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5601 {
Reid Spencer14310612006-12-31 05:40:51 +00005602
5603 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005604 const PointerType *PFTy = 0;
5605 const FunctionType *Ty = 0;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005606 if (!(PFTy = dyn_cast<PointerType>((yyvsp[(3) - (8)].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005607 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5608 // Pull out the types of all of the arguments...
5609 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005610 FunctionType::ParamAttrsList ParamAttrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005611 ParamAttrs.push_back((yyvsp[(8) - (8)].ParamAttrs));
5612 for (ValueRefList::iterator I = (yyvsp[(6) - (8)].ValueRefList)->begin(), E = (yyvsp[(6) - (8)].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005613 const Type *Ty = I->Val->getType();
5614 if (Ty == Type::VoidTy)
5615 GEN_ERROR("Short call syntax cannot be used with varargs");
5616 ParamTypes.push_back(Ty);
5617 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005618 }
5619
Chris Lattner7d9801d2007-02-13 00:58:01 +00005620 Ty = FunctionType::get((yyvsp[(3) - (8)].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005621 PFTy = PointerType::get(Ty);
5622 }
5623
Chris Lattner7d9801d2007-02-13 00:58:01 +00005624 Value *V = getVal(PFTy, (yyvsp[(4) - (8)].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005625 CHECK_FOR_ERROR
5626
Reid Spencer14310612006-12-31 05:40:51 +00005627 // Check the arguments
5628 ValueList Args;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005629 if ((yyvsp[(6) - (8)].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005630 // Make sure no arguments is a good thing!
5631 if (Ty->getNumParams() != 0)
5632 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005633 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005634 } else { // Has arguments?
5635 // Loop through FunctionType's arguments and ensure they are specified
5636 // correctly!
5637 //
5638 FunctionType::param_iterator I = Ty->param_begin();
5639 FunctionType::param_iterator E = Ty->param_end();
Chris Lattner7d9801d2007-02-13 00:58:01 +00005640 ValueRefList::iterator ArgI = (yyvsp[(6) - (8)].ValueRefList)->begin(), ArgE = (yyvsp[(6) - (8)].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005641
Reid Spencer14310612006-12-31 05:40:51 +00005642 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5643 if (ArgI->Val->getType() != *I)
5644 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005645 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005646 Args.push_back(ArgI->Val);
5647 }
5648 if (Ty->isVarArg()) {
5649 if (I == E)
5650 for (; ArgI != ArgE; ++ArgI)
5651 Args.push_back(ArgI->Val); // push the remaining varargs
5652 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005653 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005654 }
Reid Spencer14310612006-12-31 05:40:51 +00005655 // Create the call node
5656 CallInst *CI = new CallInst(V, Args);
Chris Lattner7d9801d2007-02-13 00:58:01 +00005657 CI->setTailCall((yyvsp[(1) - (8)].BoolVal));
5658 CI->setCallingConv((yyvsp[(2) - (8)].UIntVal));
5659 (yyval.InstVal) = CI;
5660 delete (yyvsp[(6) - (8)].ValueRefList);
5661 delete (yyvsp[(3) - (8)].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005662 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005663 ;}
5664 break;
5665
5666 case 274:
5667#line 2772 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5668 {
5669 (yyval.InstVal) = (yyvsp[(1) - (1)].InstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005670 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005671 ;}
5672 break;
5673
5674 case 275:
5675#line 2777 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5676 {
5677 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005678 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005679 ;}
5680 break;
5681
5682 case 276:
5683#line 2781 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5684 {
5685 (yyval.BoolVal) = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005686 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005687 ;}
5688 break;
5689
5690 case 277:
5691#line 2788 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5692 {
Reid Spencer6f407902007-01-13 05:00:46 +00005693 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005694 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
5695 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
5696 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer6f407902007-01-13 05:00:46 +00005697 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005698 ;}
5699 break;
5700
5701 case 278:
5702#line 2795 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5703 {
Reid Spencer14310612006-12-31 05:40:51 +00005704 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005705 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
5706 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005707 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005708 (yyval.InstVal) = new MallocInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
5709 delete (yyvsp[(2) - (6)].TypeVal);
5710 ;}
5711 break;
5712
5713 case 279:
5714#line 2803 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5715 {
Reid Spencer14310612006-12-31 05:40:51 +00005716 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005717 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (3)].TypeVal))->getDescription());
5718 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (3)].TypeVal), 0, (yyvsp[(3) - (3)].UIntVal));
5719 delete (yyvsp[(2) - (3)].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005720 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005721 ;}
5722 break;
5723
5724 case 280:
5725#line 2810 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5726 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005727 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005728 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (6)].TypeVal))->getDescription());
5729 Value* tmpVal = getVal((yyvsp[(4) - (6)].PrimType), (yyvsp[(5) - (6)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005730 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005731 (yyval.InstVal) = new AllocaInst(*(yyvsp[(2) - (6)].TypeVal), tmpVal, (yyvsp[(6) - (6)].UIntVal));
5732 delete (yyvsp[(2) - (6)].TypeVal);
5733 ;}
5734 break;
5735
5736 case 281:
5737#line 2818 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5738 {
5739 if (!isa<PointerType>((yyvsp[(2) - (2)].ValueVal)->getType()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005740 GEN_ERROR("Trying to free nonpointer type " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00005741 (yyvsp[(2) - (2)].ValueVal)->getType()->getDescription() + "");
5742 (yyval.InstVal) = new FreeInst((yyvsp[(2) - (2)].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005743 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005744 ;}
5745 break;
5746
5747 case 282:
5748#line 2826 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5749 {
Reid Spencer14310612006-12-31 05:40:51 +00005750 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005751 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(3) - (4)].TypeVal))->getDescription());
5752 if (!isa<PointerType>((yyvsp[(3) - (4)].TypeVal)->get()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005753 GEN_ERROR("Can't load from nonpointer type: " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00005754 (*(yyvsp[(3) - (4)].TypeVal))->getDescription());
5755 if (!cast<PointerType>((yyvsp[(3) - (4)].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005756 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00005757 (*(yyvsp[(3) - (4)].TypeVal))->getDescription());
5758 Value* tmpVal = getVal(*(yyvsp[(3) - (4)].TypeVal), (yyvsp[(4) - (4)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005759 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005760 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[(1) - (4)].BoolVal));
5761 delete (yyvsp[(3) - (4)].TypeVal);
5762 ;}
5763 break;
5764
5765 case 283:
5766#line 2840 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5767 {
Reid Spencer14310612006-12-31 05:40:51 +00005768 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005769 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
5770 const PointerType *PT = dyn_cast<PointerType>((yyvsp[(5) - (6)].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005771 if (!PT)
5772 GEN_ERROR("Can't store to a nonpointer type: " +
Chris Lattner7d9801d2007-02-13 00:58:01 +00005773 (*(yyvsp[(5) - (6)].TypeVal))->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005774 const Type *ElTy = PT->getElementType();
Chris Lattner7d9801d2007-02-13 00:58:01 +00005775 if (ElTy != (yyvsp[(3) - (6)].ValueVal)->getType())
5776 GEN_ERROR("Can't store '" + (yyvsp[(3) - (6)].ValueVal)->getType()->getDescription() +
Reid Spencerb5334b02007-02-05 10:18:06 +00005777 "' into space of type '" + ElTy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005778
Chris Lattner7d9801d2007-02-13 00:58:01 +00005779 Value* tmpVal = getVal(*(yyvsp[(5) - (6)].TypeVal), (yyvsp[(6) - (6)].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005780 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005781 (yyval.InstVal) = new StoreInst((yyvsp[(3) - (6)].ValueVal), tmpVal, (yyvsp[(1) - (6)].BoolVal));
5782 delete (yyvsp[(5) - (6)].TypeVal);
5783 ;}
5784 break;
5785
5786 case 284:
5787#line 2857 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
5788 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005789 if (!UpRefs.empty())
Chris Lattner7d9801d2007-02-13 00:58:01 +00005790 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[(2) - (4)].TypeVal))->getDescription());
5791 if (!isa<PointerType>((yyvsp[(2) - (4)].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00005792 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005793
Chris Lattner7d9801d2007-02-13 00:58:01 +00005794 if (!GetElementPtrInst::getIndexedType(*(yyvsp[(2) - (4)].TypeVal), &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005795 GEN_ERROR("Invalid getelementptr indices for type '" +
Chris Lattner7d9801d2007-02-13 00:58:01 +00005796 (*(yyvsp[(2) - (4)].TypeVal))->getDescription()+ "'");
5797 Value* tmpVal = getVal(*(yyvsp[(2) - (4)].TypeVal), (yyvsp[(3) - (4)].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005798 CHECK_FOR_ERROR
Chris Lattner7d9801d2007-02-13 00:58:01 +00005799 (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[(4) - (4)].ValueList))[0], (yyvsp[(4) - (4)].ValueList)->size());
5800 delete (yyvsp[(2) - (4)].TypeVal);
5801 delete (yyvsp[(4) - (4)].ValueList);
5802 ;}
5803 break;
Reid Spencer5cbf9852007-01-30 20:08:39 +00005804
Chris Lattner7d9801d2007-02-13 00:58:01 +00005805
5806/* Line 1267 of yacc.c. */
5807#line 5808 "llvmAsmParser.tab.c"
5808 default: break;
Chris Lattner8adde282007-02-11 21:40:10 +00005809 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00005810 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
5811
5812 YYPOPSTACK (yylen);
5813 yylen = 0;
5814 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005815
5816 *++yyvsp = yyval;
5817
5818
Chris Lattner7d9801d2007-02-13 00:58:01 +00005819 /* Now `shift' the result of the reduction. Determine what state
5820 that goes to, based on the state we popped back to and the rule
5821 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005822
5823 yyn = yyr1[yyn];
5824
Chris Lattner7d9801d2007-02-13 00:58:01 +00005825 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5826 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005827 yystate = yytable[yystate];
5828 else
Chris Lattner7d9801d2007-02-13 00:58:01 +00005829 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005830
5831 goto yynewstate;
5832
5833
Chris Lattner7d9801d2007-02-13 00:58:01 +00005834/*------------------------------------.
5835| yyerrlab -- here on detecting error |
5836`------------------------------------*/
5837yyerrlab:
5838 /* If not already recovering from an error, report this error. */
5839 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005840 {
5841 ++yynerrs;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005842#if ! YYERROR_VERBOSE
5843 yyerror (YY_("syntax error"));
5844#else
5845 {
5846 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
5847 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
5848 {
5849 YYSIZE_T yyalloc = 2 * yysize;
5850 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
5851 yyalloc = YYSTACK_ALLOC_MAXIMUM;
5852 if (yymsg != yymsgbuf)
5853 YYSTACK_FREE (yymsg);
5854 yymsg = (char *) YYSTACK_ALLOC (yyalloc);
5855 if (yymsg)
5856 yymsg_alloc = yyalloc;
5857 else
5858 {
5859 yymsg = yymsgbuf;
5860 yymsg_alloc = sizeof yymsgbuf;
5861 }
5862 }
Chris Lattner8adde282007-02-11 21:40:10 +00005863
Chris Lattner7d9801d2007-02-13 00:58:01 +00005864 if (0 < yysize && yysize <= yymsg_alloc)
5865 {
5866 (void) yysyntax_error (yymsg, yystate, yychar);
5867 yyerror (yymsg);
5868 }
5869 else
5870 {
5871 yyerror (YY_("syntax error"));
5872 if (yysize != 0)
5873 goto yyexhaustedlab;
5874 }
5875 }
5876#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00005877 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00005878
Chris Lattner7d9801d2007-02-13 00:58:01 +00005879
Reid Spencer41dff5e2007-01-26 08:05:27 +00005880
5881 if (yyerrstatus == 3)
5882 {
Chris Lattner7d9801d2007-02-13 00:58:01 +00005883 /* If just tried and failed to reuse look-ahead token after an
5884 error, discard it. */
Reid Spencer41dff5e2007-01-26 08:05:27 +00005885
Chris Lattner7d9801d2007-02-13 00:58:01 +00005886 if (yychar <= YYEOF)
5887 {
5888 /* Return failure if at end of input. */
5889 if (yychar == YYEOF)
5890 YYABORT;
5891 }
5892 else
5893 {
5894 yydestruct ("Error: discarding",
5895 yytoken, &yylval);
5896 yychar = YYEMPTY;
5897 }
5898 }
5899
5900 /* Else will try to reuse look-ahead token after shifting the error
5901 token. */
5902 goto yyerrlab1;
5903
5904
5905/*---------------------------------------------------.
5906| yyerrorlab -- error raised explicitly by YYERROR. |
5907`---------------------------------------------------*/
5908yyerrorlab:
5909
5910 /* Pacify compilers like GCC when the user code never invokes
5911 YYERROR and the label yyerrorlab therefore never appears in user
5912 code. */
5913 if (/*CONSTCOND*/ 0)
5914 goto yyerrorlab;
5915
5916 /* Do not reclaim the symbols of the rule which action triggered
5917 this YYERROR. */
5918 YYPOPSTACK (yylen);
5919 yylen = 0;
5920 YY_STACK_PRINT (yyss, yyssp);
5921 yystate = *yyssp;
5922 goto yyerrlab1;
5923
5924
5925/*-------------------------------------------------------------.
5926| yyerrlab1 -- common code for both syntax error and YYERROR. |
5927`-------------------------------------------------------------*/
5928yyerrlab1:
5929 yyerrstatus = 3; /* Each real token shifted decrements this. */
5930
5931 for (;;)
5932 {
5933 yyn = yypact[yystate];
5934 if (yyn != YYPACT_NINF)
5935 {
5936 yyn += YYTERROR;
5937 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5938 {
5939 yyn = yytable[yyn];
5940 if (0 < yyn)
5941 break;
5942 }
5943 }
5944
5945 /* Pop the current state because it cannot handle the error token. */
5946 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005947 YYABORT;
5948
Reid Spencere4d87aa2006-12-23 06:05:41 +00005949
Chris Lattner7d9801d2007-02-13 00:58:01 +00005950 yydestruct ("Error: popping",
5951 yystos[yystate], yyvsp);
5952 YYPOPSTACK (1);
5953 yystate = *yyssp;
5954 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005955 }
5956
5957 if (yyn == YYFINAL)
5958 YYACCEPT;
5959
Reid Spencer68a24bd2005-08-27 18:50:39 +00005960 *++yyvsp = yylval;
Chris Lattner7d9801d2007-02-13 00:58:01 +00005961
5962
5963 /* Shift the error token. */
5964 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer41dff5e2007-01-26 08:05:27 +00005965
Reid Spencer68a24bd2005-08-27 18:50:39 +00005966 yystate = yyn;
5967 goto yynewstate;
5968
Chris Lattner8adde282007-02-11 21:40:10 +00005969
Chris Lattner7d9801d2007-02-13 00:58:01 +00005970/*-------------------------------------.
5971| yyacceptlab -- YYACCEPT comes here. |
5972`-------------------------------------*/
5973yyacceptlab:
5974 yyresult = 0;
5975 goto yyreturn;
5976
5977/*-----------------------------------.
5978| yyabortlab -- YYABORT comes here. |
5979`-----------------------------------*/
5980yyabortlab:
5981 yyresult = 1;
5982 goto yyreturn;
5983
5984#ifndef yyoverflow
5985/*-------------------------------------------------.
5986| yyexhaustedlab -- memory exhaustion comes here. |
5987`-------------------------------------------------*/
5988yyexhaustedlab:
5989 yyerror (YY_("memory exhausted"));
5990 yyresult = 2;
5991 /* Fall through. */
Chris Lattner8adde282007-02-11 21:40:10 +00005992#endif
Chris Lattner7d9801d2007-02-13 00:58:01 +00005993
5994yyreturn:
5995 if (yychar != YYEOF && yychar != YYEMPTY)
5996 yydestruct ("Cleanup: discarding lookahead",
5997 yytoken, &yylval);
5998 /* Do not reclaim the symbols of the rule which action triggered
5999 this YYABORT or YYACCEPT. */
6000 YYPOPSTACK (yylen);
6001 YY_STACK_PRINT (yyss, yyssp);
6002 while (yyssp != yyss)
6003 {
6004 yydestruct ("Cleanup: popping",
6005 yystos[*yyssp], yyvsp);
6006 YYPOPSTACK (1);
Chris Lattner8adde282007-02-11 21:40:10 +00006007 }
Chris Lattner7d9801d2007-02-13 00:58:01 +00006008#ifndef yyoverflow
6009 if (yyss != yyssa)
6010 YYSTACK_FREE (yyss);
6011#endif
6012#if YYERROR_VERBOSE
6013 if (yymsg != yymsgbuf)
6014 YYSTACK_FREE (yymsg);
6015#endif
6016 /* Make sure YYID is used. */
6017 return YYID (yyresult);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006018}
Chris Lattner7d9801d2007-02-13 00:58:01 +00006019
6020
6021#line 2874 "/Users/sabre/llvm/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00006022
6023
Reid Spencer14310612006-12-31 05:40:51 +00006024// common code from the two 'RunVMAsmParser' functions
6025static Module* RunParser(Module * M) {
6026
6027 llvmAsmlineno = 1; // Reset the current line number...
6028 CurModule.CurrentModule = M;
6029#if YYDEBUG
6030 yydebug = Debug;
6031#endif
6032
6033 // Check to make sure the parser succeeded
6034 if (yyparse()) {
6035 if (ParserResult)
6036 delete ParserResult;
6037 return 0;
6038 }
6039
6040 // Check to make sure that parsing produced a result
6041 if (!ParserResult)
6042 return 0;
6043
6044 // Reset ParserResult variable while saving its value for the result.
6045 Module *Result = ParserResult;
6046 ParserResult = 0;
6047
6048 return Result;
6049}
6050
Reid Spencer61c83e02006-08-18 08:43:06 +00006051void llvm::GenerateError(const std::string &message, int LineNo) {
6052 if (LineNo == -1) LineNo = llvmAsmlineno;
6053 // TODO: column number in exception
6054 if (TheParseError)
6055 TheParseError->setError(CurFilename, message, LineNo);
6056 TriggerError = 1;
6057}
Reid Spencer68a24bd2005-08-27 18:50:39 +00006058
6059int yyerror(const char *ErrorMsg) {
6060 std::string where
6061 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6062 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00006063 std::string errMsg = where + "error: " + std::string(ErrorMsg);
6064 if (yychar != YYEMPTY && yychar != 0)
6065 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
6066 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00006067 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006068 return 0;
6069}
Chris Lattner7d9801d2007-02-13 00:58:01 +00006070