blob: 5c96778ef3dc7abe7aec76a0cedba2887b11f2fb [file] [log] [blame]
Reid Spencere4d87aa2006-12-23 06:05:41 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Andrew Lenharth6353e052006-12-08 18:07:09 +00003/* Skeleton parser for Yacc-like parsing with Bison,
Reid Spencere4d87aa2006-12-23 06:05:41 +00004 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Reid Spencer68a24bd2005-08-27 18:50:39 +00005
Reid Spencer3822ff52006-11-08 06:47:33 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +000010
Reid Spencer3822ff52006-11-08 06:47:33 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
Reid Spencere4d87aa2006-12-23 06:05:41 +000018 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
Reid Spencer3822ff52006-11-08 06:47:33 +000020
Andrew Lenharth6353e052006-12-08 18:07:09 +000021/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
Reid Spencer3822ff52006-11-08 06:47:33 +000025
Andrew Lenharth6353e052006-12-08 18:07:09 +000026/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
Reid Spencer3822ff52006-11-08 06:47:33 +000028
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
Reid Spencere4d87aa2006-12-23 06:05:41 +000039/* Bison version. */
40#define YYBISON_VERSION "2.1"
41
Reid Spencer3822ff52006-11-08 06:47:33 +000042/* Skeleton name. */
43#define YYSKELETON_NAME "yacc.c"
44
45/* Pure parsers. */
46#define YYPURE 0
47
48/* Using locations. */
49#define YYLSP_NEEDED 0
50
Reid Spencere4d87aa2006-12-23 06:05:41 +000051/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yyparse llvmAsmparse
Reid Spencer3822ff52006-11-08 06:47:33 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencer3822ff52006-11-08 06:47:33 +000055#define yylval llvmAsmlval
56#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000057#define yydebug llvmAsmdebug
58#define yynerrs llvmAsmnerrs
59
Reid Spencer3822ff52006-11-08 06:47:33 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 SINTVAL = 260,
70 UINTVAL = 261,
71 FPVAL = 262,
72 VOID = 263,
73 BOOL = 264,
Reid Spencer14310612006-12-31 05:40:51 +000074 INT8 = 265,
75 INT16 = 266,
76 INT32 = 267,
77 INT64 = 268,
78 FLOAT = 269,
79 DOUBLE = 270,
80 LABEL = 271,
81 TYPE = 272,
82 VAR_ID = 273,
83 LABELSTR = 274,
84 STRINGCONSTANT = 275,
85 IMPLEMENTATION = 276,
86 ZEROINITIALIZER = 277,
87 TRUETOK = 278,
88 FALSETOK = 279,
89 BEGINTOK = 280,
90 ENDTOK = 281,
91 DECLARE = 282,
92 DEFINE = 283,
93 GLOBAL = 284,
94 CONSTANT = 285,
95 SECTION = 286,
96 VOLATILE = 287,
97 TO = 288,
98 DOTDOTDOT = 289,
99 NULL_TOK = 290,
100 UNDEF = 291,
101 INTERNAL = 292,
102 LINKONCE = 293,
103 WEAK = 294,
104 APPENDING = 295,
105 DLLIMPORT = 296,
106 DLLEXPORT = 297,
107 EXTERN_WEAK = 298,
108 OPAQUE = 299,
109 NOT = 300,
110 EXTERNAL = 301,
111 TARGET = 302,
112 TRIPLE = 303,
113 ENDIAN = 304,
114 POINTERSIZE = 305,
115 LITTLE = 306,
116 BIG = 307,
117 ALIGN = 308,
118 DEPLIBS = 309,
119 CALL = 310,
120 TAIL = 311,
121 ASM_TOK = 312,
122 MODULE = 313,
123 SIDEEFFECT = 314,
124 CC_TOK = 315,
125 CCC_TOK = 316,
126 CSRETCC_TOK = 317,
127 FASTCC_TOK = 318,
128 COLDCC_TOK = 319,
129 X86_STDCALLCC_TOK = 320,
130 X86_FASTCALLCC_TOK = 321,
131 DATALAYOUT = 322,
132 RET = 323,
133 BR = 324,
134 SWITCH = 325,
135 INVOKE = 326,
136 UNWIND = 327,
137 UNREACHABLE = 328,
138 ADD = 329,
139 SUB = 330,
140 MUL = 331,
141 UDIV = 332,
142 SDIV = 333,
143 FDIV = 334,
144 UREM = 335,
145 SREM = 336,
146 FREM = 337,
147 AND = 338,
148 OR = 339,
149 XOR = 340,
150 ICMP = 341,
151 FCMP = 342,
152 EQ = 343,
153 NE = 344,
154 SLT = 345,
155 SGT = 346,
156 SLE = 347,
157 SGE = 348,
158 ULT = 349,
159 UGT = 350,
160 ULE = 351,
161 UGE = 352,
162 OEQ = 353,
163 ONE = 354,
164 OLT = 355,
165 OGT = 356,
166 OLE = 357,
167 OGE = 358,
168 ORD = 359,
169 UNO = 360,
170 UEQ = 361,
171 UNE = 362,
172 MALLOC = 363,
173 ALLOCA = 364,
174 FREE = 365,
175 LOAD = 366,
176 STORE = 367,
177 GETELEMENTPTR = 368,
178 TRUNC = 369,
179 ZEXT = 370,
180 SEXT = 371,
181 FPTRUNC = 372,
182 FPEXT = 373,
183 BITCAST = 374,
184 UITOFP = 375,
185 SITOFP = 376,
186 FPTOUI = 377,
187 FPTOSI = 378,
188 INTTOPTR = 379,
189 PTRTOINT = 380,
190 PHI_TOK = 381,
191 SELECT = 382,
192 SHL = 383,
193 LSHR = 384,
194 ASHR = 385,
195 VAARG = 386,
196 EXTRACTELEMENT = 387,
197 INSERTELEMENT = 388,
Reid Spencer218ded22007-01-05 17:07:23 +0000198 SHUFFLEVECTOR = 389,
199 NORETURN = 390
Reid Spencer3822ff52006-11-08 06:47:33 +0000200 };
201#endif
Reid Spencere4d87aa2006-12-23 06:05:41 +0000202/* Tokens. */
Reid Spencer3822ff52006-11-08 06:47:33 +0000203#define ESINT64VAL 258
204#define EUINT64VAL 259
205#define SINTVAL 260
206#define UINTVAL 261
207#define FPVAL 262
208#define VOID 263
209#define BOOL 264
Reid Spencer14310612006-12-31 05:40:51 +0000210#define INT8 265
211#define INT16 266
212#define INT32 267
213#define INT64 268
214#define FLOAT 269
215#define DOUBLE 270
216#define LABEL 271
217#define TYPE 272
218#define VAR_ID 273
219#define LABELSTR 274
220#define STRINGCONSTANT 275
221#define IMPLEMENTATION 276
222#define ZEROINITIALIZER 277
223#define TRUETOK 278
224#define FALSETOK 279
225#define BEGINTOK 280
226#define ENDTOK 281
227#define DECLARE 282
228#define DEFINE 283
229#define GLOBAL 284
230#define CONSTANT 285
231#define SECTION 286
232#define VOLATILE 287
233#define TO 288
234#define DOTDOTDOT 289
235#define NULL_TOK 290
236#define UNDEF 291
237#define INTERNAL 292
238#define LINKONCE 293
239#define WEAK 294
240#define APPENDING 295
241#define DLLIMPORT 296
242#define DLLEXPORT 297
243#define EXTERN_WEAK 298
244#define OPAQUE 299
245#define NOT 300
246#define EXTERNAL 301
247#define TARGET 302
248#define TRIPLE 303
249#define ENDIAN 304
250#define POINTERSIZE 305
251#define LITTLE 306
252#define BIG 307
253#define ALIGN 308
254#define DEPLIBS 309
255#define CALL 310
256#define TAIL 311
257#define ASM_TOK 312
258#define MODULE 313
259#define SIDEEFFECT 314
260#define CC_TOK 315
261#define CCC_TOK 316
262#define CSRETCC_TOK 317
263#define FASTCC_TOK 318
264#define COLDCC_TOK 319
265#define X86_STDCALLCC_TOK 320
266#define X86_FASTCALLCC_TOK 321
267#define DATALAYOUT 322
268#define RET 323
269#define BR 324
270#define SWITCH 325
271#define INVOKE 326
272#define UNWIND 327
273#define UNREACHABLE 328
274#define ADD 329
275#define SUB 330
276#define MUL 331
277#define UDIV 332
278#define SDIV 333
279#define FDIV 334
280#define UREM 335
281#define SREM 336
282#define FREM 337
283#define AND 338
284#define OR 339
285#define XOR 340
286#define ICMP 341
287#define FCMP 342
288#define EQ 343
289#define NE 344
290#define SLT 345
291#define SGT 346
292#define SLE 347
293#define SGE 348
294#define ULT 349
295#define UGT 350
296#define ULE 351
297#define UGE 352
298#define OEQ 353
299#define ONE 354
300#define OLT 355
301#define OGT 356
302#define OLE 357
303#define OGE 358
304#define ORD 359
305#define UNO 360
306#define UEQ 361
307#define UNE 362
308#define MALLOC 363
309#define ALLOCA 364
310#define FREE 365
311#define LOAD 366
312#define STORE 367
313#define GETELEMENTPTR 368
314#define TRUNC 369
315#define ZEXT 370
316#define SEXT 371
317#define FPTRUNC 372
318#define FPEXT 373
319#define BITCAST 374
320#define UITOFP 375
321#define SITOFP 376
322#define FPTOUI 377
323#define FPTOSI 378
324#define INTTOPTR 379
325#define PTRTOINT 380
326#define PHI_TOK 381
327#define SELECT 382
328#define SHL 383
329#define LSHR 384
330#define ASHR 385
331#define VAARG 386
332#define EXTRACTELEMENT 387
333#define INSERTELEMENT 388
334#define SHUFFLEVECTOR 389
Reid Spencer218ded22007-01-05 17:07:23 +0000335#define NORETURN 390
Reid Spencer3822ff52006-11-08 06:47:33 +0000336
337
338
339
340/* Copy the first part of user declarations. */
Reid Spencer14310612006-12-31 05:40:51 +0000341#line 14 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000342
343#include "ParserInternals.h"
344#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000345#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000346#include "llvm/Instructions.h"
347#include "llvm/Module.h"
348#include "llvm/SymbolTable.h"
349#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000350#include "llvm/Support/CommandLine.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000351#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000352#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000353#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000354#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000355#include <list>
356#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000357#ifndef NDEBUG
358#define YYDEBUG 1
359#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000360
Reid Spencere4f47592006-08-18 17:32:55 +0000361// The following is a gross hack. In order to rid the libAsmParser library of
362// exceptions, we have to have a way of getting the yyparse function to go into
363// an error situation. So, whenever we want an error to occur, the GenerateError
364// function (see bottom of file) sets TriggerError. Then, at the end of each
365// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
366// (a goto) to put YACC in error state. Furthermore, several calls to
367// GenerateError are made from inside productions and they must simulate the
368// previous exception behavior by exiting the production immediately. We have
369// replaced these with the GEN_ERROR macro which calls GeneratError and then
370// immediately invokes YYERROR. This would be so much cleaner if it was a
371// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000372static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000373#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000374#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
375
Reid Spencer68a24bd2005-08-27 18:50:39 +0000376int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
377int yylex(); // declaration" of xxx warnings.
378int yyparse();
379
380namespace llvm {
381 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000382#if YYDEBUG
383static cl::opt<bool>
384Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
385 cl::Hidden, cl::init(false));
386#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000387}
388using namespace llvm;
389
390static Module *ParserResult;
391
392// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
393// relating to upreferences in the input stream.
394//
395//#define DEBUG_UPREFS 1
396#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000397#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000398#else
399#define UR_OUT(X)
400#endif
401
402#define YYERROR_VERBOSE 1
403
Chris Lattnerb475c422005-11-12 18:22:38 +0000404static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000405
406
407// This contains info used when building the body of a function. It is
408// destroyed when the function is completed.
409//
410typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000411
Reid Spencer68a24bd2005-08-27 18:50:39 +0000412static void
413ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
414 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
415
416static struct PerModuleInfo {
417 Module *CurrentModule;
418 std::map<const Type *, ValueList> Values; // Module level numbered definitions
419 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000420 std::vector<PATypeHolder> Types;
421 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000422
423 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000424 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000425 /// that we can resolve them later and print error messages as appropriate.
426 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
427
428 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
429 // references to global values. Global values may be referenced before they
430 // are defined, and if so, the temporary object that they represent is held
431 // here. This is used for forward references of GlobalValues.
432 //
433 typedef std::map<std::pair<const PointerType *,
434 ValID>, GlobalValue*> GlobalRefsType;
435 GlobalRefsType GlobalRefs;
436
437 void ModuleDone() {
438 // If we could not resolve some functions at function compilation time
439 // (calls to functions before they are defined), resolve them now... Types
440 // are resolved when the constant pool has been completely parsed.
441 //
442 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000443 if (TriggerError)
444 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000445
446 // Check to make sure that all global value forward references have been
447 // resolved!
448 //
449 if (!GlobalRefs.empty()) {
450 std::string UndefinedReferences = "Unresolved global references exist:\n";
451
452 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
453 I != E; ++I) {
454 UndefinedReferences += " " + I->first.first->getDescription() + " " +
455 I->first.second.getName() + "\n";
456 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000457 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000458 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000459 }
460
461 Values.clear(); // Clear out function local definitions
462 Types.clear();
463 CurrentModule = 0;
464 }
465
Reid Spencer68a24bd2005-08-27 18:50:39 +0000466 // GetForwardRefForGlobal - Check to see if there is a forward reference
467 // for this global. If so, remove it from the GlobalRefs map and return it.
468 // If not, just return null.
469 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
470 // Check to see if there is a forward reference to this global variable...
471 // if there is, eliminate it and patch the reference to use the new def'n.
472 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
473 GlobalValue *Ret = 0;
474 if (I != GlobalRefs.end()) {
475 Ret = I->second;
476 GlobalRefs.erase(I);
477 }
478 return Ret;
479 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000480
481 bool TypeIsUnresolved(PATypeHolder* PATy) {
482 // If it isn't abstract, its resolved
483 const Type* Ty = PATy->get();
484 if (!Ty->isAbstract())
485 return false;
486 // Traverse the type looking for abstract types. If it isn't abstract then
487 // we don't need to traverse that leg of the type.
488 std::vector<const Type*> WorkList, SeenList;
489 WorkList.push_back(Ty);
490 while (!WorkList.empty()) {
491 const Type* Ty = WorkList.back();
492 SeenList.push_back(Ty);
493 WorkList.pop_back();
494 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
495 // Check to see if this is an unresolved type
496 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
497 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
498 for ( ; I != E; ++I) {
499 if (I->second.get() == OpTy)
500 return true;
501 }
502 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
503 const Type* TheTy = SeqTy->getElementType();
504 if (TheTy->isAbstract() && TheTy != Ty) {
505 std::vector<const Type*>::iterator I = SeenList.begin(),
506 E = SeenList.end();
507 for ( ; I != E; ++I)
508 if (*I == TheTy)
509 break;
510 if (I == E)
511 WorkList.push_back(TheTy);
512 }
513 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
514 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
515 const Type* TheTy = StrTy->getElementType(i);
516 if (TheTy->isAbstract() && TheTy != Ty) {
517 std::vector<const Type*>::iterator I = SeenList.begin(),
518 E = SeenList.end();
519 for ( ; I != E; ++I)
520 if (*I == TheTy)
521 break;
522 if (I == E)
523 WorkList.push_back(TheTy);
524 }
525 }
526 }
527 }
528 return false;
529 }
530
531
Reid Spencer68a24bd2005-08-27 18:50:39 +0000532} CurModule;
533
534static struct PerFunctionInfo {
535 Function *CurrentFunction; // Pointer to current function being created
536
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000537 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000538 std::map<const Type*, ValueList> LateResolveValues;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000539 bool isDeclare; // Is this function a forward declararation?
540 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000541
542 /// BBForwardRefs - When we see forward references to basic blocks, keep
543 /// track of them here.
544 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
545 std::vector<BasicBlock*> NumberedBlocks;
546 unsigned NextBBNum;
547
548 inline PerFunctionInfo() {
549 CurrentFunction = 0;
550 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000551 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000552 }
553
554 inline void FunctionStart(Function *M) {
555 CurrentFunction = M;
556 NextBBNum = 0;
557 }
558
559 void FunctionDone() {
560 NumberedBlocks.clear();
561
562 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000563 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000564 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000565 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000566 return;
567 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000568
569 // Resolve all forward references now.
570 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
571
572 Values.clear(); // Clear out function local definitions
573 CurrentFunction = 0;
574 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000575 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000576 }
577} CurFun; // Info for the current function...
578
579static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
580
581
582//===----------------------------------------------------------------------===//
583// Code to handle definitions of all the types
584//===----------------------------------------------------------------------===//
585
586static int InsertValue(Value *V,
587 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
588 if (V->hasName()) return -1; // Is this a numbered definition?
589
590 // Yes, insert the value into the value table...
591 ValueList &List = ValueTab[V->getType()];
592 List.push_back(V);
593 return List.size()-1;
594}
595
596static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
597 switch (D.Type) {
598 case ValID::NumberVal: // Is it a numbered definition?
599 // Module constants occupy the lowest numbered slots...
600 if ((unsigned)D.Num < CurModule.Types.size())
Reid Spencer861d9d62006-11-28 07:29:44 +0000601 return CurModule.Types[(unsigned)D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000602 break;
603 case ValID::NameVal: // Is it a named definition?
604 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
605 D.destroy(); // Free old strdup'd memory...
606 return N;
607 }
608 break;
609 default:
Reid Spencer61c83e02006-08-18 08:43:06 +0000610 GenerateError("Internal parser error: Invalid symbol type reference!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000611 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000612 }
613
614 // If we reached here, we referenced either a symbol that we don't know about
615 // or an id number that hasn't been read yet. We may be referencing something
616 // forward, so just create an entry to be resolved later and get to it...
617 //
618 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
619
620
621 if (inFunctionScope()) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000622 if (D.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000623 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000624 return 0;
625 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000626 GenerateError("Reference to an undefined type: #" + itostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000627 return 0;
628 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000629 }
630
Reid Spencer861d9d62006-11-28 07:29:44 +0000631 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000632 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000633 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000634
Reid Spencer861d9d62006-11-28 07:29:44 +0000635 Type *Typ = OpaqueType::get();
636 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
637 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000638 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000639
640static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
641 SymbolTable &SymTab =
642 inFunctionScope() ? CurFun.CurrentFunction->getSymbolTable() :
643 CurModule.CurrentModule->getSymbolTable();
644 return SymTab.lookup(Ty, Name);
645}
646
647// 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) {
659 case ValID::NumberVal: { // Is it a numbered definition?
660 unsigned Num = (unsigned)D.Num;
661
662 // Module constants occupy the lowest numbered slots...
663 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
664 if (VI != CurModule.Values.end()) {
665 if (Num < VI->second.size())
666 return VI->second[Num];
667 Num -= VI->second.size();
668 }
669
670 // Make sure that our type is within bounds
671 VI = CurFun.Values.find(Ty);
672 if (VI == CurFun.Values.end()) return 0;
673
674 // Check that the number is within bounds...
675 if (VI->second.size() <= Num) return 0;
676
677 return VI->second[Num];
678 }
679
680 case ValID::NameVal: { // Is it a named definition?
681 Value *N = lookupInSymbolTable(Ty, std::string(D.Name));
682 if (N == 0) return 0;
683
684 D.destroy(); // Free old strdup'd memory...
685 return N;
686 }
687
688 // Check to make sure that "Ty" is an integral type, and that our
689 // value will fit into the specified type...
690 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000691 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000692 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000693 itostr(D.ConstPool64) + "' is invalid for type '" +
694 Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000695 return 0;
696 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000697 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000698
699 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000700 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
701 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000702 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000703 "' is invalid or out of range!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000704 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000705 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000706 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000707 }
708 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000709 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000710 }
711
712 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000713 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000714 GenerateError("FP constant invalid for type!!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000715 return 0;
716 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000717 return ConstantFP::get(Ty, D.ConstPoolFP);
718
719 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000720 if (!isa<PointerType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000721 GenerateError("Cannot create a a non pointer null!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000722 return 0;
723 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000724 return ConstantPointerNull::get(cast<PointerType>(Ty));
725
726 case ValID::ConstUndefVal: // Is it an undef value?
727 return UndefValue::get(Ty);
728
Chris Lattner7aa61892005-12-21 17:53:23 +0000729 case ValID::ConstZeroVal: // Is it a zero value?
730 return Constant::getNullValue(Ty);
731
Reid Spencer68a24bd2005-08-27 18:50:39 +0000732 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000733 if (D.ConstantValue->getType() != Ty) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000734 GenerateError("Constant expression type different from required type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000735 return 0;
736 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000737 return D.ConstantValue;
738
Chris Lattner0e9c3762006-01-25 22:27:16 +0000739 case ValID::InlineAsmVal: { // Inline asm expression
740 const PointerType *PTy = dyn_cast<PointerType>(Ty);
741 const FunctionType *FTy =
742 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000744 GenerateError("Invalid type for asm constraint string!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000745 return 0;
746 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000747 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
748 D.IAD->HasSideEffects);
749 D.destroy(); // Free InlineAsmDescriptor.
750 return IA;
751 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000752 default:
753 assert(0 && "Unhandled case!");
754 return 0;
755 } // End of switch
756
757 assert(0 && "Unhandled case!");
758 return 0;
759}
760
761// getVal - This function is identical to getValNonImprovising, except that if a
762// value is not already defined, it "improvises" by creating a placeholder var
763// that looks and acts just like the requested variable. When the value is
764// defined later, all uses of the placeholder variable are replaced with the
765// real thing.
766//
767static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000768 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000769 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000770 return 0;
771 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000772
773 // See if the value has already been defined.
774 Value *V = getValNonImprovising(Ty, ID);
775 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000776 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000777
Reid Spencer5b7e7532006-09-28 19:28:24 +0000778 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000779 GenerateError("Invalid use of a composite type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000780 return 0;
781 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000782
783 // If we reached here, we referenced either a symbol that we don't know about
784 // or an id number that hasn't been read yet. We may be referencing something
785 // forward, so just create an entry to be resolved later and get to it...
786 //
787 V = new Argument(Ty);
788
789 // Remember where this forward reference came from. FIXME, shouldn't we try
790 // to recycle these things??
791 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
792 llvmAsmlineno)));
793
794 if (inFunctionScope())
795 InsertValue(V, CurFun.LateResolveValues);
796 else
797 InsertValue(V, CurModule.LateResolveValues);
798 return V;
799}
800
801/// getBBVal - This is used for two purposes:
802/// * If isDefinition is true, a new basic block with the specified ID is being
803/// defined.
804/// * If isDefinition is true, this is a reference to a basic block, which may
805/// or may not be a forward reference.
806///
807static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
808 assert(inFunctionScope() && "Can't get basic block at global scope!");
809
810 std::string Name;
811 BasicBlock *BB = 0;
812 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000813 default:
814 GenerateError("Illegal label reference " + ID.getName());
815 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000816 case ValID::NumberVal: // Is it a numbered definition?
817 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
818 CurFun.NumberedBlocks.resize(ID.Num+1);
819 BB = CurFun.NumberedBlocks[ID.Num];
820 break;
821 case ValID::NameVal: // Is it a named definition?
822 Name = ID.Name;
823 if (Value *N = CurFun.CurrentFunction->
824 getSymbolTable().lookup(Type::LabelTy, Name))
825 BB = cast<BasicBlock>(N);
826 break;
827 }
828
829 // See if the block has already been defined.
830 if (BB) {
831 // If this is the definition of the block, make sure the existing value was
832 // just a forward reference. If it was a forward reference, there will be
833 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000834 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000835 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000836 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000837 return 0;
838 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000839
840 ID.destroy(); // Free strdup'd memory.
841 return BB;
842 }
843
844 // Otherwise this block has not been seen before.
845 BB = new BasicBlock("", CurFun.CurrentFunction);
846 if (ID.Type == ValID::NameVal) {
847 BB->setName(ID.Name);
848 } else {
849 CurFun.NumberedBlocks[ID.Num] = BB;
850 }
851
852 // If this is not a definition, keep track of it so we can use it as a forward
853 // reference.
854 if (!isDefinition) {
855 // Remember where this forward reference came from.
856 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
857 } else {
858 // The forward declaration could have been inserted anywhere in the
859 // function: insert it into the correct place now.
860 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
861 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
862 }
863 ID.destroy();
864 return BB;
865}
866
867
868//===----------------------------------------------------------------------===//
869// Code to handle forward references in instructions
870//===----------------------------------------------------------------------===//
871//
872// This code handles the late binding needed with statements that reference
873// values not defined yet... for example, a forward branch, or the PHI node for
874// a loop body.
875//
876// This keeps a table (CurFun.LateResolveValues) of all such forward references
877// and back patchs after we are done.
878//
879
880// ResolveDefinitions - If we could not resolve some defs at parsing
881// time (forward branches, phi functions for loops, etc...) resolve the
882// defs now...
883//
884static void
885ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
886 std::map<const Type*,ValueList> *FutureLateResolvers) {
887 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
888 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
889 E = LateResolvers.end(); LRI != E; ++LRI) {
890 ValueList &List = LRI->second;
891 while (!List.empty()) {
892 Value *V = List.back();
893 List.pop_back();
894
895 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
896 CurModule.PlaceHolderInfo.find(V);
897 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
898
899 ValID &DID = PHI->second.first;
900
901 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000902 if (TriggerError)
903 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000904 if (TheRealValue) {
905 V->replaceAllUsesWith(TheRealValue);
906 delete V;
907 CurModule.PlaceHolderInfo.erase(PHI);
908 } else if (FutureLateResolvers) {
909 // Functions have their unresolved items forwarded to the module late
910 // resolver table
911 InsertValue(V, *FutureLateResolvers);
912 } else {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000913 if (DID.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000914 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000915 "' of type '" + V->getType()->getDescription() + "'",
916 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000917 return;
918 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000919 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000920 itostr(DID.Num) + " of type '" +
921 V->getType()->getDescription() + "'",
922 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000923 return;
924 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000925 }
926 }
927 }
928
929 LateResolvers.clear();
930}
931
932// ResolveTypeTo - A brand new type was just declared. This means that (if
933// name is not null) things referencing Name can be resolved. Otherwise, things
934// refering to the number can be resolved. Do this now.
935//
936static void ResolveTypeTo(char *Name, const Type *ToTy) {
937 ValID D;
938 if (Name) D = ValID::create(Name);
939 else D = ValID::create((int)CurModule.Types.size());
940
Reid Spencer861d9d62006-11-28 07:29:44 +0000941 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000942 CurModule.LateResolveTypes.find(D);
943 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000944 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000945 CurModule.LateResolveTypes.erase(I);
946 }
947}
948
949// setValueName - Set the specified value to the name given. The name may be
950// null potentially, in which case this is a noop. The string passed in is
951// assumed to be a malloc'd string buffer, and is free'd by this function.
952//
953static void setValueName(Value *V, char *NameStr) {
954 if (NameStr) {
955 std::string Name(NameStr); // Copy string
956 free(NameStr); // Free old string
957
Reid Spencer5b7e7532006-09-28 19:28:24 +0000958 if (V->getType() == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000959 GenerateError("Can't assign name '" + Name+"' to value with void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000960 return;
961 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000962
963 assert(inFunctionScope() && "Must be in function scope!");
964 SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
Reid Spencer5b7e7532006-09-28 19:28:24 +0000965 if (ST.lookup(V->getType(), Name)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000966 GenerateError("Redefinition of value named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000967 V->getType()->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000968 return;
969 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000970
971 // Set the name.
972 V->setName(Name);
973 }
974}
975
976/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
977/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000978static GlobalVariable *
979ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
980 bool isConstantGlobal, const Type *Ty,
981 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000982 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000983 GenerateError("Cannot declare global vars of function type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000984 return 0;
985 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000986
987 const PointerType *PTy = PointerType::get(Ty);
988
989 std::string Name;
990 if (NameStr) {
991 Name = NameStr; // Copy string
992 free(NameStr); // Free old string
993 }
994
995 // See if this global value was forward referenced. If so, recycle the
996 // object.
997 ValID ID;
998 if (!Name.empty()) {
999 ID = ValID::create((char*)Name.c_str());
1000 } else {
1001 ID = ValID::create((int)CurModule.Values[PTy].size());
1002 }
1003
1004 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1005 // Move the global to the end of the list, from whereever it was
1006 // previously inserted.
1007 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1008 CurModule.CurrentModule->getGlobalList().remove(GV);
1009 CurModule.CurrentModule->getGlobalList().push_back(GV);
1010 GV->setInitializer(Initializer);
1011 GV->setLinkage(Linkage);
1012 GV->setConstant(isConstantGlobal);
1013 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001014 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001015 }
1016
1017 // If this global has a name, check to see if there is already a definition
1018 // of this global in the module. If so, merge as appropriate. Note that
1019 // this is really just a hack around problems in the CFE. :(
1020 if (!Name.empty()) {
1021 // We are a simple redefinition of a value, check to see if it is defined
1022 // the same as the old one.
1023 if (GlobalVariable *EGV =
1024 CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
1025 // We are allowed to redefine a global variable in two circumstances:
1026 // 1. If at least one of the globals is uninitialized or
1027 // 2. If both initializers have the same value.
1028 //
1029 if (!EGV->hasInitializer() || !Initializer ||
1030 EGV->getInitializer() == Initializer) {
1031
1032 // Make sure the existing global version gets the initializer! Make
1033 // sure that it also gets marked const if the new version is.
1034 if (Initializer && !EGV->hasInitializer())
1035 EGV->setInitializer(Initializer);
1036 if (isConstantGlobal)
1037 EGV->setConstant(true);
1038 EGV->setLinkage(Linkage);
Chris Lattnerb475c422005-11-12 18:22:38 +00001039 return EGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001040 }
1041
Reid Spencer61c83e02006-08-18 08:43:06 +00001042 GenerateError("Redefinition of global variable named '" + Name +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001043 "' in the '" + Ty->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001044 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001045 }
1046 }
1047
1048 // Otherwise there is no existing GV to use, create one now.
1049 GlobalVariable *GV =
1050 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1051 CurModule.CurrentModule);
1052 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001053 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001054}
1055
1056// setTypeName - Set the specified type to the name given. The name may be
1057// null potentially, in which case this is a noop. The string passed in is
1058// assumed to be a malloc'd string buffer, and is freed by this function.
1059//
1060// This function returns true if the type has already been defined, but is
1061// allowed to be redefined in the specified context. If the name is a new name
1062// for the type plane, it is inserted and false is returned.
1063static bool setTypeName(const Type *T, char *NameStr) {
1064 assert(!inFunctionScope() && "Can't give types function-local names!");
1065 if (NameStr == 0) return false;
1066
1067 std::string Name(NameStr); // Copy string
1068 free(NameStr); // Free old string
1069
1070 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001071 if (T == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001072 GenerateError("Can't assign name '" + Name + "' to the void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001073 return false;
1074 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001075
1076 // Set the type name, checking for conflicts as we do so.
1077 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1078
1079 if (AlreadyExists) { // Inserting a name that is already defined???
1080 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1081 assert(Existing && "Conflict but no matching type?");
1082
1083 // There is only one case where this is allowed: when we are refining an
1084 // opaque type. In this case, Existing will be an opaque type.
1085 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1086 // We ARE replacing an opaque type!
1087 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1088 return true;
1089 }
1090
1091 // Otherwise, this is an attempt to redefine a type. That's okay if
1092 // the redefinition is identical to the original. This will be so if
1093 // Existing and T point to the same Type object. In this one case we
1094 // allow the equivalent redefinition.
1095 if (Existing == T) return true; // Yes, it's equal.
1096
1097 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer61c83e02006-08-18 08:43:06 +00001098 GenerateError("Redefinition of type named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001099 T->getDescription() + "' type plane!");
1100 }
1101
1102 return false;
1103}
1104
1105//===----------------------------------------------------------------------===//
1106// Code for handling upreferences in type names...
1107//
1108
1109// TypeContains - Returns true if Ty directly contains E in it.
1110//
1111static bool TypeContains(const Type *Ty, const Type *E) {
1112 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1113 E) != Ty->subtype_end();
1114}
1115
1116namespace {
1117 struct UpRefRecord {
1118 // NestingLevel - The number of nesting levels that need to be popped before
1119 // this type is resolved.
1120 unsigned NestingLevel;
1121
1122 // LastContainedTy - This is the type at the current binding level for the
1123 // type. Every time we reduce the nesting level, this gets updated.
1124 const Type *LastContainedTy;
1125
1126 // UpRefTy - This is the actual opaque type that the upreference is
1127 // represented with.
1128 OpaqueType *UpRefTy;
1129
1130 UpRefRecord(unsigned NL, OpaqueType *URTy)
1131 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1132 };
1133}
1134
1135// UpRefs - A list of the outstanding upreferences that need to be resolved.
1136static std::vector<UpRefRecord> UpRefs;
1137
1138/// HandleUpRefs - Every time we finish a new layer of types, this function is
1139/// called. It loops through the UpRefs vector, which is a list of the
1140/// currently active types. For each type, if the up reference is contained in
1141/// the newly completed type, we decrement the level count. When the level
1142/// count reaches zero, the upreferenced type is the type that is passed in:
1143/// thus we can complete the cycle.
1144///
1145static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001146 // If Ty isn't abstract, or if there are no up-references in it, then there is
1147 // nothing to resolve here.
1148 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1149
Reid Spencer68a24bd2005-08-27 18:50:39 +00001150 PATypeHolder Ty(ty);
1151 UR_OUT("Type '" << Ty->getDescription() <<
1152 "' newly formed. Resolving upreferences.\n" <<
1153 UpRefs.size() << " upreferences active!\n");
1154
1155 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1156 // to zero), we resolve them all together before we resolve them to Ty. At
1157 // the end of the loop, if there is anything to resolve to Ty, it will be in
1158 // this variable.
1159 OpaqueType *TypeToResolve = 0;
1160
1161 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1162 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1163 << UpRefs[i].second->getDescription() << ") = "
1164 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1165 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1166 // Decrement level of upreference
1167 unsigned Level = --UpRefs[i].NestingLevel;
1168 UpRefs[i].LastContainedTy = Ty;
1169 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1170 if (Level == 0) { // Upreference should be resolved!
1171 if (!TypeToResolve) {
1172 TypeToResolve = UpRefs[i].UpRefTy;
1173 } else {
1174 UR_OUT(" * Resolving upreference for "
1175 << UpRefs[i].second->getDescription() << "\n";
1176 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1177 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1178 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1179 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1180 }
1181 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1182 --i; // Do not skip the next element...
1183 }
1184 }
1185 }
1186
1187 if (TypeToResolve) {
1188 UR_OUT(" * Resolving upreference for "
1189 << UpRefs[i].second->getDescription() << "\n";
1190 std::string OldName = TypeToResolve->getDescription());
1191 TypeToResolve->refineAbstractTypeTo(Ty);
1192 }
1193
1194 return Ty;
1195}
1196
Reid Spencer68a24bd2005-08-27 18:50:39 +00001197//===----------------------------------------------------------------------===//
1198// RunVMAsmParser - Define an interface to this parser
1199//===----------------------------------------------------------------------===//
1200//
Reid Spencer14310612006-12-31 05:40:51 +00001201static Module* RunParser(Module * M);
1202
Reid Spencer68a24bd2005-08-27 18:50:39 +00001203Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1204 set_scan_file(F);
1205
1206 CurFilename = Filename;
1207 return RunParser(new Module(CurFilename));
1208}
1209
1210Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1211 set_scan_string(AsmString);
1212
1213 CurFilename = "from_memory";
1214 if (M == NULL) {
1215 return RunParser(new Module (CurFilename));
1216 } else {
1217 return RunParser(M);
1218 }
1219}
1220
1221
Reid Spencer3822ff52006-11-08 06:47:33 +00001222
1223/* Enabling traces. */
1224#ifndef YYDEBUG
1225# define YYDEBUG 0
1226#endif
1227
1228/* Enabling verbose error messages. */
1229#ifdef YYERROR_VERBOSE
1230# undef YYERROR_VERBOSE
1231# define YYERROR_VERBOSE 1
1232#else
1233# define YYERROR_VERBOSE 0
1234#endif
1235
Reid Spencere4d87aa2006-12-23 06:05:41 +00001236/* Enabling the token table. */
1237#ifndef YYTOKEN_TABLE
1238# define YYTOKEN_TABLE 0
1239#endif
1240
Andrew Lenharth6353e052006-12-08 18:07:09 +00001241#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00001242#line 895 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00001243typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001244 llvm::Module *ModuleVal;
1245 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001246 llvm::BasicBlock *BasicBlockVal;
1247 llvm::TerminatorInst *TermInstVal;
1248 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001249 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001250
Reid Spencera132e042006-12-03 05:46:11 +00001251 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001252 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001253 llvm::PATypeHolder *TypeVal;
1254 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001255 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001256 llvm::ArgListType *ArgList;
1257 llvm::TypeWithAttrs TypeWithAttrs;
1258 llvm::TypeWithAttrsList *TypeWithAttrsList;
1259 llvm::ValueRefList *ValueRefList;
1260
Reid Spencer68a24bd2005-08-27 18:50:39 +00001261 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001262 std::list<std::pair<llvm::Value*,
1263 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001264 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001265 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001266
1267 llvm::GlobalValue::LinkageTypes Linkage;
Reid Spencer14310612006-12-31 05:40:51 +00001268 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001269 int64_t SInt64Val;
1270 uint64_t UInt64Val;
1271 int SIntVal;
1272 unsigned UIntVal;
1273 double FPVal;
1274 bool BoolVal;
1275
1276 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001277 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001278
Reid Spencera132e042006-12-03 05:46:11 +00001279 llvm::Instruction::BinaryOps BinaryOpVal;
1280 llvm::Instruction::TermOps TermOpVal;
1281 llvm::Instruction::MemoryOps MemOpVal;
1282 llvm::Instruction::CastOps CastOpVal;
1283 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencer1628cec2006-10-26 06:15:43 +00001284 llvm::Module::Endianness Endianness;
Reid Spencera132e042006-12-03 05:46:11 +00001285 llvm::ICmpInst::Predicate IPredicate;
1286 llvm::FCmpInst::Predicate FPredicate;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001287} YYSTYPE;
Reid Spencere4d87aa2006-12-23 06:05:41 +00001288/* Line 196 of yacc.c. */
Reid Spencer218ded22007-01-05 17:07:23 +00001289#line 1290 "llvmAsmParser.tab.c"
Reid Spencer3822ff52006-11-08 06:47:33 +00001290# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1291# define YYSTYPE_IS_DECLARED 1
1292# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001293#endif
1294
1295
1296
Reid Spencer3822ff52006-11-08 06:47:33 +00001297/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001298
1299
Reid Spencere4d87aa2006-12-23 06:05:41 +00001300/* Line 219 of yacc.c. */
Reid Spencer218ded22007-01-05 17:07:23 +00001301#line 1302 "llvmAsmParser.tab.c"
Reid Spencere4d87aa2006-12-23 06:05:41 +00001302
1303#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1304# define YYSIZE_T __SIZE_TYPE__
1305#endif
1306#if ! defined (YYSIZE_T) && defined (size_t)
1307# define YYSIZE_T size_t
1308#endif
1309#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1310# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1311# define YYSIZE_T size_t
1312#endif
1313#if ! defined (YYSIZE_T)
1314# define YYSIZE_T unsigned int
1315#endif
1316
1317#ifndef YY_
1318# if YYENABLE_NLS
1319# if ENABLE_NLS
1320# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1321# define YY_(msgid) dgettext ("bison-runtime", msgid)
1322# endif
1323# endif
1324# ifndef YY_
1325# define YY_(msgid) msgid
1326# endif
1327#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00001328
Andrew Lenharth6353e052006-12-08 18:07:09 +00001329#if ! defined (yyoverflow) || YYERROR_VERBOSE
Bill Wendlinge8156192006-12-07 01:30:32 +00001330
Reid Spencer3822ff52006-11-08 06:47:33 +00001331/* The parser invokes alloca or malloc; define the necessary symbols. */
1332
1333# ifdef YYSTACK_USE_ALLOCA
1334# if YYSTACK_USE_ALLOCA
1335# ifdef __GNUC__
1336# define YYSTACK_ALLOC __builtin_alloca
Reid Spencere4d87aa2006-12-23 06:05:41 +00001337# else
1338# define YYSTACK_ALLOC alloca
1339# if defined (__STDC__) || defined (__cplusplus)
1340# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1341# define YYINCLUDED_STDLIB_H
1342# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001343# endif
1344# endif
1345# endif
1346
1347# ifdef YYSTACK_ALLOC
Andrew Lenharth6353e052006-12-08 18:07:09 +00001348 /* Pacify GCC's `empty if-body' warning. */
1349# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
Reid Spencere4d87aa2006-12-23 06:05:41 +00001350# ifndef YYSTACK_ALLOC_MAXIMUM
1351 /* The OS might guarantee only one guard page at the bottom of the stack,
1352 and a page size can be as small as 4096 bytes. So we cannot safely
1353 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1354 to allow for a few compiler-allocated temporary stack slots. */
1355# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001356# endif
Reid Spencere4d87aa2006-12-23 06:05:41 +00001357# else
Reid Spencer3822ff52006-11-08 06:47:33 +00001358# define YYSTACK_ALLOC YYMALLOC
1359# define YYSTACK_FREE YYFREE
Reid Spencere4d87aa2006-12-23 06:05:41 +00001360# ifndef YYSTACK_ALLOC_MAXIMUM
1361# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1362# endif
1363# ifdef __cplusplus
1364extern "C" {
1365# endif
1366# ifndef YYMALLOC
1367# define YYMALLOC malloc
1368# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1369 && (defined (__STDC__) || defined (__cplusplus)))
1370void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1371# endif
1372# endif
1373# ifndef YYFREE
1374# define YYFREE free
1375# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1376 && (defined (__STDC__) || defined (__cplusplus)))
1377void free (void *); /* INFRINGES ON USER NAME SPACE */
1378# endif
1379# endif
1380# ifdef __cplusplus
1381}
1382# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00001383# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00001384#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00001385
1386
Andrew Lenharth6353e052006-12-08 18:07:09 +00001387#if (! defined (yyoverflow) \
1388 && (! defined (__cplusplus) \
1389 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
Reid Spencer3822ff52006-11-08 06:47:33 +00001390
1391/* A type that is properly aligned for any stack member. */
1392union yyalloc
1393{
Reid Spencere4d87aa2006-12-23 06:05:41 +00001394 short int yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00001395 YYSTYPE yyvs;
1396 };
1397
1398/* The size of the maximum gap between one aligned stack and the next. */
1399# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1400
1401/* The size of an array large to enough to hold all stacks, each with
1402 N elements. */
1403# define YYSTACK_BYTES(N) \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001404 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001405 + YYSTACK_GAP_MAXIMUM)
1406
1407/* Copy COUNT objects from FROM to TO. The source and destination do
1408 not overlap. */
1409# ifndef YYCOPY
Andrew Lenharth6353e052006-12-08 18:07:09 +00001410# if defined (__GNUC__) && 1 < __GNUC__
Reid Spencer3822ff52006-11-08 06:47:33 +00001411# define YYCOPY(To, From, Count) \
1412 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1413# else
1414# define YYCOPY(To, From, Count) \
1415 do \
1416 { \
Reid Spencere4d87aa2006-12-23 06:05:41 +00001417 YYSIZE_T yyi; \
Reid Spencer3822ff52006-11-08 06:47:33 +00001418 for (yyi = 0; yyi < (Count); yyi++) \
1419 (To)[yyi] = (From)[yyi]; \
1420 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001421 while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00001422# endif
1423# endif
1424
1425/* Relocate STACK from its old location to the new one. The
1426 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1427 elements in the stack, and YYPTR gives the new location of the
1428 stack. Advance YYPTR to a properly aligned location for the next
1429 stack. */
1430# define YYSTACK_RELOCATE(Stack) \
1431 do \
1432 { \
1433 YYSIZE_T yynewbytes; \
1434 YYCOPY (&yyptr->Stack, Stack, yysize); \
1435 Stack = &yyptr->Stack; \
1436 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1437 yyptr += yynewbytes / sizeof (*yyptr); \
1438 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00001439 while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001440
1441#endif
1442
Andrew Lenharth6353e052006-12-08 18:07:09 +00001443#if defined (__STDC__) || defined (__cplusplus)
1444 typedef signed char yysigned_char;
1445#else
Reid Spencere4d87aa2006-12-23 06:05:41 +00001446 typedef short int yysigned_char;
Andrew Lenharth6353e052006-12-08 18:07:09 +00001447#endif
1448
1449/* YYFINAL -- State number of the termination state. */
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001450#define YYFINAL 37
Reid Spencer3822ff52006-11-08 06:47:33 +00001451/* YYLAST -- Last index in YYTABLE. */
Reid Spencer218ded22007-01-05 17:07:23 +00001452#define YYLAST 1405
Reid Spencer3822ff52006-11-08 06:47:33 +00001453
Andrew Lenharth6353e052006-12-08 18:07:09 +00001454/* YYNTOKENS -- Number of terminals. */
Reid Spencer14310612006-12-31 05:40:51 +00001455#define YYNTOKENS 150
Andrew Lenharth6353e052006-12-08 18:07:09 +00001456/* YYNNTS -- Number of nonterminals. */
Reid Spencer218ded22007-01-05 17:07:23 +00001457#define YYNNTS 78
Andrew Lenharth6353e052006-12-08 18:07:09 +00001458/* YYNRULES -- Number of rules. */
Reid Spencer218ded22007-01-05 17:07:23 +00001459#define YYNRULES 289
Andrew Lenharth6353e052006-12-08 18:07:09 +00001460/* YYNRULES -- Number of states. */
Reid Spencer218ded22007-01-05 17:07:23 +00001461#define YYNSTATES 569
Reid Spencer3822ff52006-11-08 06:47:33 +00001462
1463/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1464#define YYUNDEFTOK 2
Reid Spencer218ded22007-01-05 17:07:23 +00001465#define YYMAXUTOK 390
Reid Spencer3822ff52006-11-08 06:47:33 +00001466
Reid Spencere4d87aa2006-12-23 06:05:41 +00001467#define YYTRANSLATE(YYX) \
Reid Spencer3822ff52006-11-08 06:47:33 +00001468 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1469
1470/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001471static const unsigned char yytranslate[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001472{
1473 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1474 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1475 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1476 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer218ded22007-01-05 17:07:23 +00001477 140, 141, 138, 2, 137, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001478 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer218ded22007-01-05 17:07:23 +00001479 145, 136, 146, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001480 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1481 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer218ded22007-01-05 17:07:23 +00001482 2, 142, 139, 144, 2, 2, 2, 2, 2, 149,
Reid Spencer3822ff52006-11-08 06:47:33 +00001483 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1484 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer14310612006-12-31 05:40:51 +00001485 143, 2, 2, 147, 2, 148, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001486 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1487 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1488 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1489 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1490 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1491 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1492 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1493 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1494 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1495 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1496 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1497 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1498 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1499 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1500 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1501 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1502 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1503 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1504 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1505 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1506 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1507 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1508 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
Reid Spencer3da59db2006-11-27 01:05:10 +00001509 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
Reid Spencera132e042006-12-03 05:46:11 +00001510 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
Reid Spencer218ded22007-01-05 17:07:23 +00001511 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1512 135
Reid Spencer3822ff52006-11-08 06:47:33 +00001513};
1514
1515#if YYDEBUG
1516/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1517 YYRHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001518static const unsigned short int yyprhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001519{
1520 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1521 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1522 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1523 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
Reid Spencer3da59db2006-11-27 01:05:10 +00001524 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
Reid Spencera132e042006-12-03 05:46:11 +00001525 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
Reid Spencer14310612006-12-31 05:40:51 +00001526 119, 121, 123, 125, 128, 129, 131, 133, 135, 137,
1527 139, 141, 143, 145, 146, 148, 150, 151, 153, 155,
1528 157, 159, 160, 162, 164, 166, 168, 170, 172, 175,
Reid Spencer218ded22007-01-05 17:07:23 +00001529 177, 179, 180, 183, 185, 187, 188, 191, 192, 195,
1530 196, 200, 203, 204, 206, 207, 211, 213, 216, 218,
1531 220, 222, 224, 226, 228, 230, 232, 234, 236, 239,
1532 241, 244, 250, 256, 262, 268, 272, 275, 281, 286,
1533 289, 291, 293, 295, 299, 301, 305, 307, 308, 310,
1534 314, 319, 323, 327, 332, 337, 341, 344, 347, 350,
1535 353, 356, 359, 362, 365, 368, 371, 378, 384, 393,
1536 400, 407, 415, 423, 430, 437, 446, 455, 459, 461,
1537 463, 465, 467, 468, 470, 473, 474, 478, 479, 483,
1538 487, 489, 493, 497, 498, 504, 505, 512, 513, 520,
1539 523, 527, 529, 531, 533, 537, 541, 545, 549, 553,
1540 557, 559, 560, 562, 564, 566, 567, 573, 577, 579,
1541 583, 585, 586, 596, 598, 600, 604, 606, 608, 611,
1542 614, 615, 617, 619, 621, 623, 625, 627, 629, 631,
1543 633, 637, 639, 645, 647, 649, 651, 653, 656, 659,
1544 662, 666, 669, 670, 672, 675, 678, 682, 692, 702,
1545 711, 726, 728, 730, 737, 743, 746, 753, 761, 765,
1546 771, 772, 773, 777, 780, 782, 788, 794, 801, 808,
1547 811, 816, 821, 828, 833, 838, 845, 852, 855, 864,
1548 866, 868, 869, 873, 880, 884, 891, 894, 899, 906
Reid Spencer3822ff52006-11-08 06:47:33 +00001549};
1550
Andrew Lenharth6353e052006-12-08 18:07:09 +00001551/* YYRHS -- A `-1'-separated list of the rules' RHS. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001552static const short int yyrhs[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001553{
Reid Spencer218ded22007-01-05 17:07:23 +00001554 187, 0, -1, 5, -1, 6, -1, 74, -1, 75,
Reid Spencer14310612006-12-31 05:40:51 +00001555 -1, 76, -1, 77, -1, 78, -1, 79, -1, 80,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001556 -1, 81, -1, 82, -1, 83, -1, 84, -1, 85,
Reid Spencer14310612006-12-31 05:40:51 +00001557 -1, 114, -1, 115, -1, 116, -1, 117, -1, 118,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001558 -1, 119, -1, 120, -1, 121, -1, 122, -1, 123,
Reid Spencer14310612006-12-31 05:40:51 +00001559 -1, 124, -1, 125, -1, 128, -1, 129, -1, 130,
1560 -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001561 -1, 93, -1, 94, -1, 95, -1, 96, -1, 97,
1562 -1, 98, -1, 99, -1, 100, -1, 101, -1, 102,
1563 -1, 103, -1, 104, -1, 105, -1, 106, -1, 107,
Reid Spencer14310612006-12-31 05:40:51 +00001564 -1, 94, -1, 95, -1, 96, -1, 97, -1, 23,
1565 -1, 24, -1, 13, -1, 12, -1, 11, -1, 10,
Reid Spencer218ded22007-01-05 17:07:23 +00001566 -1, 14, -1, 15, -1, 200, 136, -1, -1, 37,
Reid Spencer14310612006-12-31 05:40:51 +00001567 -1, 39, -1, 38, -1, 40, -1, 42, -1, 41,
1568 -1, 43, -1, 46, -1, -1, 41, -1, 43, -1,
1569 -1, 37, -1, 38, -1, 39, -1, 42, -1, -1,
1570 61, -1, 62, -1, 63, -1, 64, -1, 65, -1,
Reid Spencer218ded22007-01-05 17:07:23 +00001571 66, -1, 60, 4, -1, 115, -1, 116, -1, -1,
1572 167, 166, -1, 135, -1, 166, -1, -1, 169, 168,
1573 -1, -1, 53, 4, -1, -1, 137, 53, 4, -1,
1574 31, 20, -1, -1, 172, -1, -1, 137, 175, 174,
1575 -1, 172, -1, 53, 4, -1, 9, -1, 10, -1,
1576 11, -1, 12, -1, 13, -1, 14, -1, 15, -1,
1577 16, -1, 44, -1, 176, -1, 177, 138, -1, 212,
1578 -1, 139, 4, -1, 177, 140, 181, 141, 169, -1,
1579 8, 140, 181, 141, 169, -1, 142, 4, 143, 177,
1580 144, -1, 145, 4, 143, 177, 146, -1, 147, 182,
1581 148, -1, 147, 148, -1, 145, 147, 182, 148, 146,
1582 -1, 145, 147, 148, 146, -1, 177, 167, -1, 177,
1583 -1, 8, -1, 178, -1, 180, 137, 178, -1, 180,
1584 -1, 180, 137, 34, -1, 34, -1, -1, 177, -1,
1585 182, 137, 177, -1, 177, 142, 185, 144, -1, 177,
1586 142, 144, -1, 177, 149, 20, -1, 177, 145, 185,
1587 146, -1, 177, 147, 185, 148, -1, 177, 147, 148,
1588 -1, 177, 35, -1, 177, 36, -1, 177, 212, -1,
1589 177, 184, -1, 177, 22, -1, 158, 3, -1, 158,
1590 4, -1, 9, 23, -1, 9, 24, -1, 159, 7,
1591 -1, 154, 140, 183, 33, 177, 141, -1, 113, 140,
1592 183, 223, 141, -1, 127, 140, 183, 137, 183, 137,
1593 183, 141, -1, 152, 140, 183, 137, 183, 141, -1,
1594 153, 140, 183, 137, 183, 141, -1, 86, 156, 140,
1595 183, 137, 183, 141, -1, 87, 157, 140, 183, 137,
1596 183, 141, -1, 155, 140, 183, 137, 183, 141, -1,
1597 132, 140, 183, 137, 183, 141, -1, 133, 140, 183,
1598 137, 183, 137, 183, 141, -1, 134, 140, 183, 137,
1599 183, 137, 183, 141, -1, 185, 137, 183, -1, 183,
1600 -1, 29, -1, 30, -1, 188, -1, -1, 189, -1,
1601 188, 189, -1, -1, 28, 190, 208, -1, -1, 27,
1602 191, 209, -1, 58, 57, 195, -1, 21, -1, 160,
1603 17, 177, -1, 160, 17, 8, -1, -1, 160, 186,
1604 183, 192, 174, -1, -1, 160, 161, 186, 183, 193,
1605 174, -1, -1, 160, 162, 186, 177, 194, 174, -1,
1606 47, 197, -1, 54, 136, 198, -1, 20, -1, 52,
1607 -1, 51, -1, 49, 136, 196, -1, 50, 136, 4,
1608 -1, 48, 136, 20, -1, 67, 136, 20, -1, 142,
1609 199, 144, -1, 199, 137, 20, -1, 20, -1, -1,
1610 18, -1, 20, -1, 200, -1, -1, 202, 137, 177,
1611 167, 201, -1, 177, 167, 201, -1, 202, -1, 202,
1612 137, 34, -1, 34, -1, -1, 165, 179, 200, 140,
1613 203, 141, 169, 173, 170, -1, 25, -1, 147, -1,
1614 164, 204, 205, -1, 26, -1, 148, -1, 215, 207,
1615 -1, 163, 204, -1, -1, 59, -1, 3, -1, 4,
1616 -1, 7, -1, 23, -1, 24, -1, 35, -1, 36,
1617 -1, 22, -1, 145, 185, 146, -1, 184, -1, 57,
1618 210, 20, 137, 20, -1, 151, -1, 200, -1, 212,
1619 -1, 211, -1, 177, 213, -1, 215, 216, -1, 206,
1620 216, -1, 217, 160, 218, -1, 217, 220, -1, -1,
1621 19, -1, 68, 214, -1, 68, 8, -1, 69, 16,
1622 213, -1, 69, 9, 213, 137, 16, 213, 137, 16,
1623 213, -1, 70, 158, 213, 137, 16, 213, 142, 219,
1624 144, -1, 70, 158, 213, 137, 16, 213, 142, 144,
1625 -1, 71, 165, 179, 213, 140, 222, 141, 169, 33,
1626 16, 213, 72, 16, 213, -1, 72, -1, 73, -1,
1627 219, 158, 211, 137, 16, 213, -1, 158, 211, 137,
1628 16, 213, -1, 160, 225, -1, 177, 142, 213, 137,
1629 213, 144, -1, 221, 137, 142, 213, 137, 213, 144,
1630 -1, 177, 213, 167, -1, 222, 137, 177, 213, 167,
1631 -1, -1, -1, 223, 137, 214, -1, 56, 55, -1,
1632 55, -1, 152, 177, 213, 137, 213, -1, 153, 177,
1633 213, 137, 213, -1, 86, 156, 177, 213, 137, 213,
1634 -1, 87, 157, 177, 213, 137, 213, -1, 45, 214,
1635 -1, 155, 214, 137, 214, -1, 154, 214, 33, 177,
1636 -1, 127, 214, 137, 214, 137, 214, -1, 131, 214,
1637 137, 177, -1, 132, 214, 137, 214, -1, 133, 214,
1638 137, 214, 137, 214, -1, 134, 214, 137, 214, 137,
1639 214, -1, 126, 221, -1, 224, 165, 179, 213, 140,
1640 222, 141, 169, -1, 227, -1, 32, -1, -1, 108,
1641 177, 171, -1, 108, 177, 137, 12, 213, 171, -1,
1642 109, 177, 171, -1, 109, 177, 137, 12, 213, 171,
1643 -1, 110, 214, -1, 226, 111, 177, 213, -1, 226,
1644 112, 214, 137, 177, 213, -1, 113, 177, 213, 223,
1645 -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001646};
1647
1648/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001649static const unsigned short int yyrline[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001650{
Reid Spencer218ded22007-01-05 17:07:23 +00001651 0, 1038, 1038, 1039, 1049, 1049, 1049, 1049, 1049, 1049,
1652 1049, 1049, 1049, 1050, 1050, 1050, 1051, 1051, 1051, 1051,
1653 1051, 1051, 1052, 1052, 1052, 1052, 1052, 1052, 1053, 1053,
1654 1053, 1055, 1055, 1056, 1056, 1057, 1057, 1058, 1058, 1059,
1655 1059, 1063, 1063, 1064, 1064, 1065, 1065, 1066, 1066, 1067,
1656 1067, 1068, 1068, 1069, 1069, 1070, 1071, 1076, 1076, 1076,
1657 1076, 1077, 1077, 1080, 1084, 1090, 1091, 1092, 1093, 1094,
1658 1098, 1099, 1100, 1104, 1105, 1106, 1110, 1111, 1112, 1113,
1659 1114, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1131,
1660 1132, 1135, 1136, 1141, 1142, 1145, 1146, 1153, 1154, 1160,
1661 1161, 1169, 1177, 1178, 1183, 1184, 1185, 1190, 1203, 1203,
1662 1203, 1203, 1203, 1203, 1203, 1203, 1206, 1210, 1214, 1221,
1663 1226, 1234, 1252, 1270, 1275, 1287, 1297, 1301, 1311, 1318,
1664 1325, 1332, 1337, 1342, 1349, 1350, 1357, 1364, 1372, 1377,
1665 1388, 1416, 1432, 1461, 1489, 1510, 1525, 1537, 1544, 1607,
1666 1617, 1627, 1633, 1639, 1643, 1647, 1655, 1669, 1690, 1698,
1667 1704, 1715, 1720, 1725, 1734, 1740, 1746, 1755, 1759, 1767,
1668 1767, 1778, 1783, 1791, 1792, 1796, 1796, 1800, 1800, 1803,
1669 1806, 1818, 1842, 1853, 1853, 1862, 1862, 1870, 1870, 1880,
1670 1883, 1889, 1902, 1903, 1905, 1909, 1918, 1922, 1927, 1929,
1671 1934, 1939, 1948, 1948, 1949, 1949, 1951, 1961, 1972, 1976,
1672 1985, 1994, 1999, 2104, 2104, 2106, 2114, 2114, 2116, 2121,
1673 2132, 2136, 2141, 2145, 2149, 2153, 2157, 2161, 2165, 2169,
1674 2173, 2198, 2202, 2216, 2220, 2226, 2226, 2232, 2241, 2245,
1675 2254, 2265, 2274, 2286, 2299, 2303, 2307, 2312, 2321, 2340,
1676 2349, 2416, 2420, 2427, 2438, 2451, 2460, 2471, 2481, 2489,
1677 2497, 2500, 2501, 2508, 2512, 2517, 2538, 2555, 2568, 2581,
1678 2594, 2603, 2616, 2624, 2631, 2637, 2643, 2649, 2664, 2727,
1679 2732, 2736, 2743, 2750, 2758, 2765, 2773, 2781, 2795, 2812
Reid Spencer3822ff52006-11-08 06:47:33 +00001680};
1681#endif
1682
Reid Spencere4d87aa2006-12-23 06:05:41 +00001683#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1684/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
Andrew Lenharth6353e052006-12-08 18:07:09 +00001685 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
Reid Spencer3822ff52006-11-08 06:47:33 +00001686static const char *const yytname[] =
1687{
1688 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
Reid Spencer14310612006-12-31 05:40:51 +00001689 "UINTVAL", "FPVAL", "VOID", "BOOL", "INT8", "INT16", "INT32", "INT64",
1690 "FLOAT", "DOUBLE", "LABEL", "TYPE", "VAR_ID", "LABELSTR",
1691 "STRINGCONSTANT", "IMPLEMENTATION", "ZEROINITIALIZER", "TRUETOK",
1692 "FALSETOK", "BEGINTOK", "ENDTOK", "DECLARE", "DEFINE", "GLOBAL",
1693 "CONSTANT", "SECTION", "VOLATILE", "TO", "DOTDOTDOT", "NULL_TOK",
1694 "UNDEF", "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT",
1695 "DLLEXPORT", "EXTERN_WEAK", "OPAQUE", "NOT", "EXTERNAL", "TARGET",
1696 "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE", "BIG", "ALIGN", "DEPLIBS",
1697 "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK",
1698 "CSRETCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
1699 "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
1700 "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
1701 "UREM", "SREM", "FREM", "AND", "OR", "XOR", "ICMP", "FCMP", "EQ", "NE",
1702 "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE",
1703 "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC",
1704 "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT",
1705 "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI",
1706 "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK", "SELECT", "SHL", "LSHR",
1707 "ASHR", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT", "SHUFFLEVECTOR",
Reid Spencer218ded22007-01-05 17:07:23 +00001708 "NORETURN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
1709 "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "INTVAL",
1710 "ArithmeticOps", "LogicalOps", "CastOps", "ShiftOps", "IPredicates",
1711 "FPredicates", "IntType", "FPType", "OptAssign", "GVInternalLinkage",
Reid Spencer14310612006-12-31 05:40:51 +00001712 "GVExternalLinkage", "FunctionDeclareLinkage", "FunctionDefineLinkage",
Reid Spencer218ded22007-01-05 17:07:23 +00001713 "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
1714 "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
Reid Spencer14310612006-12-31 05:40:51 +00001715 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
Reid Spencer218ded22007-01-05 17:07:23 +00001716 "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
Reid Spencer14310612006-12-31 05:40:51 +00001717 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
1718 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1719 "BigOrLittle", "TargetDefinition", "LibrariesDefinition", "LibList",
1720 "Name", "OptName", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
Reid Spencer6fd36ab2006-12-29 20:35:03 +00001721 "FunctionHeader", "END", "Function", "FunctionProto", "OptSideEffect",
1722 "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
1723 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
Reid Spencer14310612006-12-31 05:40:51 +00001724 "JumpTable", "Inst", "PHIList", "ValueRefList", "IndexList",
1725 "OptTailCall", "InstVal", "OptVolatile", "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001726};
1727#endif
1728
1729# ifdef YYPRINT
1730/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1731 token YYLEX-NUM. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001732static const unsigned short int yytoknum[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001733{
1734 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1735 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1736 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1737 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1738 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1739 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1740 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1741 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1742 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1743 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1744 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001745 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001746 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
Reid Spencer218ded22007-01-05 17:07:23 +00001747 385, 386, 387, 388, 389, 390, 61, 44, 42, 92,
1748 40, 41, 91, 120, 93, 60, 62, 123, 125, 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001749};
1750# endif
1751
1752/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001753static const unsigned char yyr1[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001754{
Reid Spencer14310612006-12-31 05:40:51 +00001755 0, 150, 151, 151, 152, 152, 152, 152, 152, 152,
1756 152, 152, 152, 153, 153, 153, 154, 154, 154, 154,
1757 154, 154, 154, 154, 154, 154, 154, 154, 155, 155,
1758 155, 156, 156, 156, 156, 156, 156, 156, 156, 156,
1759 156, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1760 157, 157, 157, 157, 157, 157, 157, 158, 158, 158,
1761 158, 159, 159, 160, 160, 161, 161, 161, 161, 161,
1762 162, 162, 162, 163, 163, 163, 164, 164, 164, 164,
1763 164, 165, 165, 165, 165, 165, 165, 165, 165, 166,
Reid Spencer218ded22007-01-05 17:07:23 +00001764 166, 167, 167, 168, 168, 169, 169, 170, 170, 171,
1765 171, 172, 173, 173, 174, 174, 175, 175, 176, 176,
1766 176, 176, 176, 176, 176, 176, 177, 177, 177, 177,
1767 177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
1768 179, 179, 180, 180, 181, 181, 181, 181, 182, 182,
1769 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
1770 183, 183, 183, 183, 183, 183, 184, 184, 184, 184,
1771 184, 184, 184, 184, 184, 184, 184, 185, 185, 186,
1772 186, 187, 187, 188, 188, 190, 189, 191, 189, 189,
1773 189, 189, 189, 192, 189, 193, 189, 194, 189, 189,
1774 189, 195, 196, 196, 197, 197, 197, 197, 198, 199,
1775 199, 199, 200, 200, 201, 201, 202, 202, 203, 203,
1776 203, 203, 204, 205, 205, 206, 207, 207, 208, 209,
1777 210, 210, 211, 211, 211, 211, 211, 211, 211, 211,
1778 211, 211, 211, 212, 212, 213, 213, 214, 215, 215,
1779 216, 217, 217, 217, 218, 218, 218, 218, 218, 218,
1780 218, 218, 218, 219, 219, 220, 221, 221, 222, 222,
1781 222, 223, 223, 224, 224, 225, 225, 225, 225, 225,
1782 225, 225, 225, 225, 225, 225, 225, 225, 225, 225,
1783 226, 226, 227, 227, 227, 227, 227, 227, 227, 227
Reid Spencer3822ff52006-11-08 06:47:33 +00001784};
1785
1786/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00001787static const unsigned char yyr2[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001788{
1789 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1790 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1791 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001792 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001793 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001794 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer14310612006-12-31 05:40:51 +00001795 1, 1, 1, 2, 0, 1, 1, 1, 1, 1,
1796 1, 1, 1, 0, 1, 1, 0, 1, 1, 1,
1797 1, 0, 1, 1, 1, 1, 1, 1, 2, 1,
Reid Spencer218ded22007-01-05 17:07:23 +00001798 1, 0, 2, 1, 1, 0, 2, 0, 2, 0,
1799 3, 2, 0, 1, 0, 3, 1, 2, 1, 1,
1800 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
1801 2, 5, 5, 5, 5, 3, 2, 5, 4, 2,
1802 1, 1, 1, 3, 1, 3, 1, 0, 1, 3,
1803 4, 3, 3, 4, 4, 3, 2, 2, 2, 2,
1804 2, 2, 2, 2, 2, 2, 6, 5, 8, 6,
1805 6, 7, 7, 6, 6, 8, 8, 3, 1, 1,
1806 1, 1, 0, 1, 2, 0, 3, 0, 3, 3,
1807 1, 3, 3, 0, 5, 0, 6, 0, 6, 2,
1808 3, 1, 1, 1, 3, 3, 3, 3, 3, 3,
1809 1, 0, 1, 1, 1, 0, 5, 3, 1, 3,
1810 1, 0, 9, 1, 1, 3, 1, 1, 2, 2,
1811 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1812 3, 1, 5, 1, 1, 1, 1, 2, 2, 2,
1813 3, 2, 0, 1, 2, 2, 3, 9, 9, 8,
1814 14, 1, 1, 6, 5, 2, 6, 7, 3, 5,
1815 0, 0, 3, 2, 1, 5, 5, 6, 6, 2,
1816 4, 4, 6, 4, 4, 6, 6, 2, 8, 1,
1817 1, 0, 3, 6, 3, 6, 2, 4, 6, 4
Reid Spencer3822ff52006-11-08 06:47:33 +00001818};
1819
1820/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1821 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1822 means the default is an error. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001823static const unsigned short int yydefact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001824{
Reid Spencer218ded22007-01-05 17:07:23 +00001825 64, 202, 203, 180, 177, 175, 0, 0, 0, 0,
1826 0, 64, 173, 0, 73, 76, 0, 0, 0, 0,
1827 189, 0, 0, 0, 169, 170, 65, 67, 66, 68,
1828 70, 69, 71, 72, 0, 0, 0, 1, 174, 63,
1829 74, 75, 81, 178, 77, 78, 79, 80, 81, 242,
1830 176, 242, 0, 0, 0, 0, 201, 190, 191, 179,
1831 2, 3, 182, 108, 109, 110, 111, 112, 113, 114,
1832 115, 116, 0, 0, 0, 0, 233, 117, 181, 234,
1833 119, 0, 0, 0, 108, 109, 110, 111, 112, 113,
1834 114, 0, 0, 0, 183, 0, 82, 83, 84, 85,
1835 86, 87, 0, 219, 0, 243, 239, 64, 216, 217,
1836 218, 238, 196, 193, 192, 194, 195, 197, 200, 0,
1837 137, 120, 0, 0, 0, 126, 138, 0, 118, 137,
1838 185, 187, 153, 154, 151, 152, 155, 150, 146, 147,
1839 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
1840 14, 15, 0, 0, 0, 16, 17, 18, 19, 20,
1841 21, 22, 23, 24, 25, 26, 27, 0, 28, 29,
1842 30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1843 0, 0, 149, 148, 104, 88, 131, 130, 0, 213,
1844 214, 215, 281, 241, 0, 198, 136, 91, 132, 134,
1845 0, 0, 0, 0, 0, 0, 125, 0, 104, 104,
1846 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1847 0, 55, 56, 51, 52, 53, 54, 41, 42, 43,
1848 44, 45, 46, 47, 48, 49, 50, 0, 0, 0,
1849 0, 0, 0, 141, 168, 0, 0, 145, 0, 142,
1850 0, 0, 0, 0, 0, 184, 0, 280, 0, 264,
1851 0, 0, 0, 0, 81, 251, 252, 0, 0, 0,
Reid Spencer3822ff52006-11-08 06:47:33 +00001852 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer218ded22007-01-05 17:07:23 +00001853 0, 0, 0, 240, 81, 255, 0, 279, 199, 129,
1854 0, 95, 0, 0, 128, 0, 139, 95, 186, 188,
1855 0, 0, 261, 0, 0, 0, 0, 0, 140, 143,
1856 144, 0, 0, 0, 0, 0, 0, 106, 104, 211,
1857 0, 269, 263, 245, 244, 0, 0, 60, 59, 58,
1858 57, 0, 0, 0, 0, 99, 99, 286, 0, 0,
1859 277, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1860 0, 0, 0, 89, 90, 92, 135, 133, 122, 123,
1861 124, 127, 121, 0, 0, 0, 0, 0, 0, 0,
1862 167, 0, 0, 0, 0, 101, 107, 105, 210, 91,
1863 208, 0, 222, 223, 224, 229, 225, 226, 227, 228,
1864 220, 0, 231, 236, 235, 237, 0, 246, 0, 0,
1865 0, 0, 0, 282, 0, 284, 261, 0, 0, 0,
1866 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1867 0, 93, 94, 96, 0, 0, 0, 157, 0, 0,
1868 0, 0, 0, 0, 0, 0, 205, 0, 95, 221,
1869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1870 289, 0, 0, 0, 273, 274, 0, 0, 0, 0,
1871 271, 270, 0, 287, 0, 0, 0, 262, 0, 164,
1872 0, 0, 159, 160, 156, 163, 204, 207, 209, 91,
1873 102, 0, 230, 0, 0, 260, 0, 0, 99, 100,
1874 99, 0, 0, 0, 0, 0, 265, 266, 260, 0,
1875 161, 162, 0, 0, 0, 205, 103, 97, 0, 0,
1876 0, 0, 0, 267, 268, 0, 283, 285, 0, 0,
1877 272, 275, 276, 0, 288, 158, 165, 166, 206, 0,
1878 212, 232, 0, 0, 91, 0, 95, 256, 0, 95,
1879 98, 0, 249, 0, 0, 258, 0, 0, 257, 278,
1880 247, 0, 248, 0, 91, 0, 0, 0, 259, 0,
1881 0, 0, 0, 254, 0, 0, 253, 0, 250
Reid Spencer3822ff52006-11-08 06:47:33 +00001882};
1883
Andrew Lenharth6353e052006-12-08 18:07:09 +00001884/* YYDEFGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001885static const short int yydefgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001886{
Reid Spencer218ded22007-01-05 17:07:23 +00001887 -1, 76, 178, 179, 180, 181, 220, 237, 91, 92,
1888 9, 34, 35, 42, 48, 102, 355, 289, 423, 358,
1889 530, 403, 317, 507, 255, 318, 77, 93, 198, 188,
1890 199, 200, 127, 244, 392, 245, 36, 10, 11, 12,
1891 15, 14, 184, 208, 209, 59, 115, 20, 57, 119,
1892 79, 477, 380, 381, 103, 191, 49, 110, 50, 43,
1893 440, 393, 80, 395, 321, 51, 106, 107, 283, 544,
1894 193, 340, 512, 365, 284, 285, 286, 287
Reid Spencer3822ff52006-11-08 06:47:33 +00001895};
1896
1897/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1898 STATE-NUM. */
Reid Spencer218ded22007-01-05 17:07:23 +00001899#define YYPACT_NINF -468
Reid Spencere4d87aa2006-12-23 06:05:41 +00001900static const short int yypact[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001901{
Reid Spencer218ded22007-01-05 17:07:23 +00001902 384, -468, -468, -468, -468, -468, 23, -99, -3, 74,
1903 78, 507, -468, -66, 129, 148, -26, 0, 26, 31,
1904 -468, 6, 156, 1114, -468, -468, -468, -468, -468, -468,
1905 -468, -468, -468, -468, 66, 66, 1130, -468, -468, -468,
1906 -468, -468, 138, -468, -468, -468, -468, -468, 138, 172,
1907 -468, 20, 163, 104, 208, 196, 202, -468, -468, -468,
1908 -468, -468, 90, -468, -468, -468, -468, -468, -468, -468,
1909 -468, -468, 258, 262, 4, 18, -468, -468, -89, -468,
1910 -468, 1130, 1167, 90, 216, 240, 257, 261, 266, 264,
1911 277, 270, 278, 495, -468, 283, -468, -468, -468, -468,
1912 -468, -468, 1183, -468, -14, -468, -468, 119, -468, -468,
1913 -468, -468, -468, -468, -468, -468, -468, -468, -468, -19,
1914 749, -468, 145, 147, 357, -468, -89, -87, -468, 749,
1915 -468, -89, -468, -468, -468, -468, -468, -468, -468, -468,
1916 -468, -468, -468, -468, -468, -468, -468, -468, -468, -468,
1917 -468, -468, 557, 804, 157, -468, -468, -468, -468, -468,
1918 -468, -468, -468, -468, -468, -468, -468, 158, -468, -468,
1919 -468, 167, 168, 173, 853, 1130, 582, 282, 174, 175,
1920 176, 177, -468, -468, 181, -468, 90, -89, 119, -468,
1921 -468, -468, 1271, -468, 292, -468, -468, -89, -468, 183,
1922 180, 1167, 1167, 185, -63, 1167, -468, 182, 181, 181,
1923 -468, -468, -468, -468, -468, -468, -468, -468, -468, -468,
1924 186, -468, -468, -468, -468, -468, -468, -468, -468, -468,
1925 -468, -468, -468, -468, -468, -468, -468, 192, 1130, 1130,
1926 1130, 1130, 1130, -468, -468, -13, -44, -468, -43, -468,
1927 1130, 1130, 1130, 1130, 12, -468, 193, -468, 1167, -468,
1928 267, 1230, 126, 214, 138, -468, -468, 557, 804, 1167,
1929 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
1930 1167, 1167, 1167, -468, 138, -468, 164, -468, -468, 162,
1931 1024, -468, 5, -8, -468, 188, -89, -468, -468, -468,
1932 1130, 1130, -468, 198, 199, 201, 203, 1130, -468, -468,
1933 -468, 204, 205, 306, 206, 324, 343, -468, 181, 1070,
1934 657, -468, -468, 90, -468, 800, 800, -468, -468, -468,
1935 -468, 800, 1183, 1167, 1167, 56, 91, -468, 657, 35,
1936 211, 212, 215, 218, 219, 220, 657, 657, 318, 221,
1937 1183, 1167, 1167, -468, -468, -468, -468, -468, -71, -468,
1938 -468, -468, -71, 222, 224, 51, 1130, 1130, 1130, 1130,
1939 -468, 1130, 1130, 1167, 1130, -468, -468, -468, -468, -89,
1940 227, 233, -468, -468, -468, -468, -468, -468, -468, -468,
1941 317, 1130, -468, -468, -468, -468, 241, -468, 242, 800,
1942 657, 657, 10, -468, 13, -468, -468, 800, 238, 1167,
1943 1167, 1167, 1167, 1167, 244, 246, 1167, 1167, 800, 657,
1944 248, -468, -468, -468, 1130, 1130, 1167, -468, 254, 251,
1945 259, 260, 268, 269, 96, 272, 38, 1087, -468, -468,
1946 362, -39, 379, 391, 275, 271, 279, 800, 419, 800,
1947 289, 291, 800, 293, -89, -468, 295, 296, 800, 800,
1948 -89, -468, 294, -468, 1167, 288, 298, -468, 1130, -468,
1949 1130, 1130, -468, -468, -468, -468, -468, -468, -468, -89,
1950 11, 299, -468, 800, 800, 1167, 800, 800, 303, -468,
1951 303, 800, 307, 1167, 1167, 1167, -468, -468, 1167, 657,
1952 -468, -468, 302, 304, 308, 38, -468, 382, 427, 313,
1953 310, 657, 70, -468, -468, 400, -468, -468, 311, 800,
1954 -468, -468, -468, 73, -468, -468, -468, -468, -468, 450,
1955 -468, -468, 440, 3, -468, 1167, -468, -468, 315, -468,
1956 -468, 800, -468, 932, 8, 162, 657, -16, -468, -71,
1957 -468, 323, -468, 932, -468, 445, 447, 327, 162, 800,
1958 800, 449, 394, -468, 800, 451, -468, 800, -468
Reid Spencer3822ff52006-11-08 06:47:33 +00001959};
1960
1961/* YYPGOTO[NTERM-NUM]. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00001962static const short int yypgoto[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001963{
Reid Spencer218ded22007-01-05 17:07:23 +00001964 -468, -468, 276, 281, 284, 287, 207, 213, -261, -468,
1965 373, -468, -468, -468, -468, -229, -352, -370, -468, -294,
1966 -468, -329, -11, -468, -168, -468, -468, -23, 194, -275,
1967 -468, 358, 364, 53, 396, -171, 245, -468, -468, 480,
1968 -468, -468, -468, -468, -468, -468, -468, -468, -468, -468,
1969 1, -12, -468, -468, 444, -468, -468, -468, -468, -468,
1970 -468, -467, -1, -278, -194, -468, 443, -468, -468, -468,
1971 -468, -468, 16, 89, -468, -468, -468, -468
Reid Spencer3822ff52006-11-08 06:47:33 +00001972};
1973
1974/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1975 positive, shift that token. If negative, reduce the rule which
1976 number is the opposite. If zero, do what YYDEFACT says.
1977 If YYTABLE_NINF, syntax error. */
Reid Spencer218ded22007-01-05 17:07:23 +00001978#define YYTABLE_NINF -173
Reid Spencere4d87aa2006-12-23 06:05:41 +00001979static const short int yytable[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00001980{
Reid Spencer218ded22007-01-05 17:07:23 +00001981 78, 13, 331, 362, 246, 248, 422, 405, 123, 436,
1982 422, 189, 13, 327, 328, 329, 330, 555, 327, 328,
1983 329, 330, 447, 60, 61, 449, 83, 63, 64, 65,
1984 66, 67, 68, 69, 70, 332, 1, 21, 2, 105,
1985 298, 299, 315, 315, 353, 354, 108, 396, 397, 128,
1986 205, 129, 126, 398, 22, 350, 1, 399, 2, 131,
1987 406, 206, 71, 448, 421, 316, 448, 324, 414, 415,
1988 39, 16, 17, 18, 205, 418, 551, 337, 37, 187,
1989 341, 342, 343, 344, 345, 295, 557, 348, 349, 94,
1990 19, 23, 183, 307, 307, 24, 25, 197, 307, 353,
1991 354, 126, 309, 24, 25, 310, 197, 482, 13, 505,
1992 52, 26, 27, 28, 29, 30, 31, 32, 194, 421,
1993 33, 444, 445, 446, 307, 195, 353, 354, 422, 451,
1994 128, 308, 129, 190, 130, 325, 53, 1, 360, 2,
1995 462, 463, 326, 128, 480, 129, 421, 542, 56, 359,
1996 377, 124, 552, 353, 354, 113, 114, 72, 420, 516,
1997 73, 517, 54, 74, 545, 75, 125, 55, 109, 488,
1998 40, 490, 41, 128, 492, 129, 58, 407, 292, 293,
1999 496, 497, 296, 112, 558, 44, 45, 46, 426, 256,
2000 47, 105, 427, 402, 128, 422, 129, 422, 95, 96,
2001 97, 98, 99, 100, 101, 509, 510, 535, 513, 514,
2002 535, 536, 116, 518, 539, 453, 117, 455, 456, 457,
2003 441, 524, 118, 461, 327, 328, 329, 330, 404, 128,
2004 120, 129, 467, 534, 128, 320, 129, 474, 320, 132,
2005 133, 538, 547, -60, -60, 549, 335, 336, 320, 338,
2006 339, 320, 320, 320, 320, 320, 346, 347, 320, 320,
2007 -59, -59, 121, 550, -58, -58, 122, 197, 554, -57,
2008 -57, -61, 543, 134, 135, 351, 352, 353, 354, 81,
2009 82, 562, 563, 553, -62, 136, 566, 185, 201, 568,
2010 202, 302, 303, 304, 305, 306, 379, 238, 239, 520,
2011 521, 522, 249, 311, 312, 313, 314, 240, 241, 187,
2012 400, 401, 288, 242, 250, 251, 252, 253, 254, 394,
2013 290, 291, 322, 297, 394, 394, 300, 187, 419, 320,
2014 394, 294, 301, 319, 361, 366, 367, 394, 368, 373,
2015 369, 371, 372, 374, 375, 394, 394, 376, 408, 409,
2016 434, 416, 410, 363, 364, 411, 412, 413, 417, 424,
2017 370, 425, 60, 61, 437, 83, 63, 64, 65, 66,
2018 67, 68, 69, 70, 438, 1, 439, 2, 442, 443,
2019 452, 458, 481, 459, -172, 464, 320, 454, 320, 320,
2020 320, 468, 469, 460, 320, 483, 470, 471, 394, 394,
2021 394, 71, 1, 320, 2, 3, 394, 484, 486, 472,
2022 473, 4, 5, 475, 479, 485, 487, 394, 394, 428,
2023 429, 430, 431, 489, 432, 433, 426, 435, 491, 500,
2024 493, 6, 494, 495, 498, 529, 508, 476, 7, 501,
2025 515, 499, 8, 525, 519, 526, 394, 531, 394, 527,
2026 532, 394, 533, 448, 540, 537, 541, 394, 394, 548,
2027 556, 559, 511, 560, 561, 564, 565, 567, 279, 506,
2028 320, 320, 320, 280, 333, 511, 281, 465, 466, 282,
2029 192, 334, 394, 394, 357, 394, 394, 207, 204, 182,
2030 394, 38, 104, 528, 111, 450, 72, 0, 394, 73,
2031 60, 61, 74, 0, 75, 203, 476, -171, 0, 0,
2032 394, 0, 546, 1, 523, 2, 0, 137, 394, 0,
2033 0, 502, 0, 503, 504, 1, 0, 2, 3, 0,
2034 138, 139, 0, 0, 4, 5, 0, 0, 0, 0,
2035 394, 0, 0, 0, 0, 394, 0, 0, 0, 0,
2036 0, 0, 0, 0, 6, 0, 0, 0, 394, 394,
2037 0, 7, 0, 394, 0, 8, 394, 0, 0, 140,
Reid Spencer14310612006-12-31 05:40:51 +00002038 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
Reid Spencer218ded22007-01-05 17:07:23 +00002039 151, 152, 153, 0, 0, 0, 0, 60, 61, 0,
2040 83, 84, 85, 86, 87, 88, 89, 90, 70, 0,
2041 1, 0, 2, 0, 0, 0, 0, 0, 154, 155,
Reid Spencer14310612006-12-31 05:40:51 +00002042 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
Reid Spencer218ded22007-01-05 17:07:23 +00002043 166, 0, 167, 168, 169, 170, 71, 171, 172, 173,
2044 0, 0, 0, 128, 0, 129, 0, 174, 0, 0,
2045 175, 0, 176, 0, 177, 210, 211, 212, 213, 214,
2046 215, 216, 217, 218, 219, 0, 0, 0, 0, 0,
2047 382, 383, 60, 61, 384, 0, 0, 0, 0, 0,
2048 0, 0, 0, 0, 0, 1, 0, 2, 0, 385,
2049 386, 387, 0, 0, 0, 0, 0, 0, 0, 0,
2050 0, 0, 388, 389, 0, 0, 0, 0, 0, 0,
2051 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2052 0, 0, 0, 0, 390, 0, 0, 0, 0, 0,
2053 0, 72, 0, 0, 73, 0, 0, 74, 0, 75,
2054 247, 140, 141, 142, 143, 144, 145, 146, 147, 148,
2055 149, 150, 151, 152, 153, 0, 0, 0, 0, 0,
2056 0, 0, 0, 0, 60, 61, 0, 83, 63, 64,
Reid Spencer14310612006-12-31 05:40:51 +00002057 65, 66, 67, 68, 69, 70, 0, 1, 0, 2,
Reid Spencer218ded22007-01-05 17:07:23 +00002058 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2059 164, 165, 166, 196, 167, 168, 169, 170, 0, 171,
2060 172, 173, 0, 71, 0, 128, 0, 129, 0, 0,
2061 0, 0, 391, 382, 383, 60, 61, 384, 0, 0,
2062 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
2063 2, 0, 385, 386, 387, 0, 0, 221, 222, 0,
2064 0, 0, 0, 0, 0, 388, 389, 0, 0, 0,
Reid Spencer14310612006-12-31 05:40:51 +00002065 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer218ded22007-01-05 17:07:23 +00002066 0, 0, 0, 0, 0, 0, 0, 390, 60, 61,
2067 0, 83, 84, 85, 86, 87, 88, 89, 90, 70,
2068 0, 1, 0, 2, 140, 141, 142, 143, 144, 145,
2069 146, 147, 148, 149, 150, 151, 152, 153, 72, 0,
2070 0, 73, 0, 0, 74, 0, 75, 71, 223, 224,
2071 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
2072 235, 236, 0, 154, 155, 156, 157, 158, 159, 160,
2073 161, 162, 163, 164, 165, 166, 0, 167, 168, 169,
2074 170, 0, 171, 172, 173, 382, 383, 0, 0, 384,
2075 0, 0, 0, 0, 0, 391, 0, 0, 0, 0,
2076 0, 0, 0, 0, 385, 386, 387, 0, 0, 0,
2077 0, 0, 0, 0, 0, 0, 0, 388, 389, 0,
Reid Spencer14310612006-12-31 05:40:51 +00002078 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer218ded22007-01-05 17:07:23 +00002079 0, 0, 0, 0, 0, 0, 0, 0, 0, 390,
2080 0, 0, 72, 0, 0, 73, 0, 243, 74, 0,
2081 75, 0, 0, 0, 0, 0, 140, 141, 142, 143,
2082 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
2083 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,
2084 61, 0, 83, 63, 64, 65, 66, 67, 68, 69,
2085 70, 0, 1, 0, 2, 154, 155, 156, 157, 158,
2086 159, 160, 161, 162, 163, 164, 165, 166, 356, 167,
2087 168, 169, 170, 0, 171, 172, 173, 0, 71, 0,
2088 0, 0, 0, 0, 0, 60, 61, 391, 83, 63,
2089 64, 65, 66, 67, 68, 69, 70, 0, 1, 0,
2090 2, 0, 60, 61, 0, 83, 63, 64, 65, 66,
2091 67, 68, 69, 70, 378, 1, 0, 2, 0, 0,
2092 0, 0, 0, 0, 71, 0, 0, 0, 0, 60,
2093 61, 478, 62, 63, 64, 65, 66, 67, 68, 69,
2094 70, 71, 1, 0, 2, 60, 61, 0, 83, 84,
2095 85, 86, 87, 88, 89, 90, 70, 0, 1, 0,
2096 2, 0, 0, 0, 0, 0, 0, 0, 71, 0,
2097 0, 0, 0, 72, 0, 0, 73, 0, 0, 74,
2098 0, 75, 60, 61, 71, 83, 63, 64, 65, 66,
2099 67, 68, 69, 70, 0, 1, 0, 2, 60, 61,
2100 0, 186, 63, 64, 65, 66, 67, 68, 69, 70,
2101 0, 1, 0, 2, 0, 0, 0, 0, 0, 72,
2102 0, 71, 73, 0, 0, 74, 0, 75, 0, 0,
2103 0, 0, 0, 0, 0, 0, 72, 71, 0, 73,
2104 0, 0, 74, 0, 75, 60, 61, 0, 323, 63,
2105 64, 65, 66, 67, 68, 69, 70, 0, 1, 0,
2106 2, 0, 0, 72, 0, 0, 73, 0, 0, 74,
2107 0, 75, 0, 0, 0, 0, 0, 0, 0, 72,
2108 0, 0, 73, 0, 71, 74, 0, 75, 0, 0,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer218ded22007-01-05 17:07:23 +00002111 0, 0, 0, 257, 0, 0, 72, 0, 0, 73,
2112 0, 0, 74, 0, 75, 0, 258, 0, 0, 0,
2113 0, 0, 72, 0, 0, 73, 259, 260, 74, 0,
2114 75, 0, 0, 0, 0, 0, 0, 0, 0, 261,
2115 262, 263, 264, 265, 266, 140, 141, 142, 143, 144,
2116 145, 146, 147, 148, 149, 150, 151, 267, 268, 0,
2117 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,
2118 0, 0, 73, 0, 0, 74, 0, 75, 0, 269,
2119 270, 271, 0, 0, 272, 155, 156, 157, 158, 159,
2120 160, 161, 162, 163, 164, 165, 166, 273, 274, 168,
2121 169, 170, 275, 276, 277, 278
Reid Spencer3822ff52006-11-08 06:47:33 +00002122};
2123
Reid Spencere4d87aa2006-12-23 06:05:41 +00002124static const short int yycheck[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002125{
Reid Spencer218ded22007-01-05 17:07:23 +00002126 23, 0, 263, 297, 175, 176, 358, 336, 4, 379,
2127 362, 25, 11, 10, 11, 12, 13, 33, 10, 11,
2128 12, 13, 12, 5, 6, 12, 8, 9, 10, 11,
2129 12, 13, 14, 15, 16, 264, 18, 136, 20, 19,
2130 208, 209, 31, 31, 115, 116, 26, 325, 326, 138,
2131 137, 140, 75, 331, 57, 284, 18, 332, 20, 82,
2132 338, 148, 44, 53, 135, 53, 53, 261, 346, 347,
2133 136, 48, 49, 50, 137, 350, 543, 271, 0, 102,
2134 274, 275, 276, 277, 278, 148, 553, 281, 282, 36,
2135 67, 17, 93, 137, 137, 29, 30, 120, 137, 115,
2136 116, 124, 146, 29, 30, 148, 129, 146, 107, 479,
2137 136, 37, 38, 39, 40, 41, 42, 43, 137, 135,
2138 46, 399, 400, 401, 137, 144, 115, 116, 480, 407,
2139 138, 144, 140, 147, 81, 9, 136, 18, 146, 20,
2140 418, 419, 16, 138, 438, 140, 135, 144, 142, 144,
2141 318, 147, 144, 115, 116, 51, 52, 139, 352, 488,
2142 142, 490, 136, 145, 534, 147, 148, 136, 148, 447,
2143 41, 449, 43, 138, 452, 140, 20, 142, 201, 202,
2144 458, 459, 205, 20, 554, 37, 38, 39, 137, 188,
2145 42, 19, 141, 137, 138, 547, 140, 549, 60, 61,
2146 62, 63, 64, 65, 66, 483, 484, 137, 486, 487,
2147 137, 141, 4, 491, 141, 409, 20, 411, 412, 413,
2148 391, 499, 20, 417, 10, 11, 12, 13, 137, 138,
2149 140, 140, 426, 511, 138, 258, 140, 141, 261, 23,
2150 24, 519, 536, 3, 4, 539, 269, 270, 271, 272,
Reid Spencer14310612006-12-31 05:40:51 +00002151 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
Reid Spencer218ded22007-01-05 17:07:23 +00002152 3, 4, 4, 541, 3, 4, 4, 290, 546, 3,
2153 4, 7, 533, 3, 4, 111, 112, 115, 116, 34,
2154 35, 559, 560, 544, 7, 7, 564, 4, 143, 567,
2155 143, 238, 239, 240, 241, 242, 319, 140, 140, 493,
2156 494, 495, 20, 250, 251, 252, 253, 140, 140, 332,
2157 333, 334, 20, 140, 140, 140, 140, 140, 137, 320,
2158 137, 141, 55, 141, 325, 326, 140, 350, 351, 352,
2159 331, 146, 140, 140, 146, 137, 137, 338, 137, 33,
2160 137, 137, 137, 137, 20, 346, 347, 4, 137, 137,
2161 373, 33, 137, 300, 301, 137, 137, 137, 137, 137,
2162 307, 137, 5, 6, 137, 8, 9, 10, 11, 12,
2163 13, 14, 15, 16, 141, 18, 59, 20, 137, 137,
2164 142, 137, 20, 137, 0, 137, 409, 410, 411, 412,
2165 413, 137, 141, 416, 417, 16, 137, 137, 399, 400,
2166 401, 44, 18, 426, 20, 21, 407, 16, 137, 141,
2167 141, 27, 28, 141, 437, 140, 137, 418, 419, 366,
2168 367, 368, 369, 4, 371, 372, 137, 374, 137, 141,
2169 137, 47, 137, 137, 140, 53, 137, 436, 54, 141,
2170 137, 464, 58, 141, 137, 141, 447, 20, 449, 141,
2171 137, 452, 142, 53, 4, 144, 16, 458, 459, 144,
2172 137, 16, 485, 16, 137, 16, 72, 16, 192, 480,
2173 493, 494, 495, 192, 267, 498, 192, 424, 425, 192,
2174 107, 268, 483, 484, 290, 486, 487, 129, 124, 93,
2175 491, 11, 48, 505, 51, 406, 139, -1, 499, 142,
2176 5, 6, 145, -1, 147, 148, 505, 0, -1, -1,
2177 511, -1, 535, 18, 498, 20, -1, 22, 519, -1,
2178 -1, 468, -1, 470, 471, 18, -1, 20, 21, -1,
2179 35, 36, -1, -1, 27, 28, -1, -1, -1, -1,
2180 541, -1, -1, -1, -1, 546, -1, -1, -1, -1,
2181 -1, -1, -1, -1, 47, -1, -1, -1, 559, 560,
2182 -1, 54, -1, 564, -1, 58, 567, -1, -1, 74,
Reid Spencer14310612006-12-31 05:40:51 +00002183 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
Reid Spencer218ded22007-01-05 17:07:23 +00002184 85, 86, 87, -1, -1, -1, -1, 5, 6, -1,
2185 8, 9, 10, 11, 12, 13, 14, 15, 16, -1,
2186 18, -1, 20, -1, -1, -1, -1, -1, 113, 114,
Reid Spencer14310612006-12-31 05:40:51 +00002187 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
Reid Spencer218ded22007-01-05 17:07:23 +00002188 125, -1, 127, 128, 129, 130, 44, 132, 133, 134,
2189 -1, -1, -1, 138, -1, 140, -1, 142, -1, -1,
2190 145, -1, 147, -1, 149, 88, 89, 90, 91, 92,
2191 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
2192 3, 4, 5, 6, 7, -1, -1, -1, -1, -1,
2193 -1, -1, -1, -1, -1, 18, -1, 20, -1, 22,
2194 23, 24, -1, -1, -1, -1, -1, -1, -1, -1,
2195 -1, -1, 35, 36, -1, -1, -1, -1, -1, -1,
Reid Spencer14310612006-12-31 05:40:51 +00002196 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer218ded22007-01-05 17:07:23 +00002197 -1, -1, -1, -1, 57, -1, -1, -1, -1, -1,
2198 -1, 139, -1, -1, 142, -1, -1, 145, -1, 147,
2199 148, 74, 75, 76, 77, 78, 79, 80, 81, 82,
2200 83, 84, 85, 86, 87, -1, -1, -1, -1, -1,
2201 -1, -1, -1, -1, 5, 6, -1, 8, 9, 10,
Reid Spencer14310612006-12-31 05:40:51 +00002202 11, 12, 13, 14, 15, 16, -1, 18, -1, 20,
Reid Spencer218ded22007-01-05 17:07:23 +00002203 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
2204 123, 124, 125, 34, 127, 128, 129, 130, -1, 132,
2205 133, 134, -1, 44, -1, 138, -1, 140, -1, -1,
2206 -1, -1, 145, 3, 4, 5, 6, 7, -1, -1,
2207 -1, -1, -1, -1, -1, -1, -1, -1, 18, -1,
2208 20, -1, 22, 23, 24, -1, -1, 23, 24, -1,
2209 -1, -1, -1, -1, -1, 35, 36, -1, -1, -1,
Reid Spencer14310612006-12-31 05:40:51 +00002210 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer218ded22007-01-05 17:07:23 +00002211 -1, -1, -1, -1, -1, -1, -1, 57, 5, 6,
Reid Spencere4d87aa2006-12-23 06:05:41 +00002212 -1, 8, 9, 10, 11, 12, 13, 14, 15, 16,
Reid Spencer218ded22007-01-05 17:07:23 +00002213 -1, 18, -1, 20, 74, 75, 76, 77, 78, 79,
2214 80, 81, 82, 83, 84, 85, 86, 87, 139, -1,
2215 -1, 142, -1, -1, 145, -1, 147, 44, 94, 95,
2216 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
2217 106, 107, -1, 113, 114, 115, 116, 117, 118, 119,
2218 120, 121, 122, 123, 124, 125, -1, 127, 128, 129,
2219 130, -1, 132, 133, 134, 3, 4, -1, -1, 7,
2220 -1, -1, -1, -1, -1, 145, -1, -1, -1, -1,
2221 -1, -1, -1, -1, 22, 23, 24, -1, -1, -1,
2222 -1, -1, -1, -1, -1, -1, -1, 35, 36, -1,
2223 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2224 -1, -1, -1, -1, -1, -1, -1, -1, -1, 57,
2225 -1, -1, 139, -1, -1, 142, -1, 144, 145, -1,
2226 147, -1, -1, -1, -1, -1, 74, 75, 76, 77,
2227 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
2228 -1, -1, -1, -1, -1, -1, -1, -1, -1, 5,
2229 6, -1, 8, 9, 10, 11, 12, 13, 14, 15,
2230 16, -1, 18, -1, 20, 113, 114, 115, 116, 117,
2231 118, 119, 120, 121, 122, 123, 124, 125, 34, 127,
2232 128, 129, 130, -1, 132, 133, 134, -1, 44, -1,
2233 -1, -1, -1, -1, -1, 5, 6, 145, 8, 9,
2234 10, 11, 12, 13, 14, 15, 16, -1, 18, -1,
2235 20, -1, 5, 6, -1, 8, 9, 10, 11, 12,
2236 13, 14, 15, 16, 34, 18, -1, 20, -1, -1,
2237 -1, -1, -1, -1, 44, -1, -1, -1, -1, 5,
2238 6, 34, 8, 9, 10, 11, 12, 13, 14, 15,
2239 16, 44, 18, -1, 20, 5, 6, -1, 8, 9,
2240 10, 11, 12, 13, 14, 15, 16, -1, 18, -1,
2241 20, -1, -1, -1, -1, -1, -1, -1, 44, -1,
2242 -1, -1, -1, 139, -1, -1, 142, -1, -1, 145,
2243 -1, 147, 5, 6, 44, 8, 9, 10, 11, 12,
2244 13, 14, 15, 16, -1, 18, -1, 20, 5, 6,
2245 -1, 8, 9, 10, 11, 12, 13, 14, 15, 16,
2246 -1, 18, -1, 20, -1, -1, -1, -1, -1, 139,
2247 -1, 44, 142, -1, -1, 145, -1, 147, -1, -1,
2248 -1, -1, -1, -1, -1, -1, 139, 44, -1, 142,
2249 -1, -1, 145, -1, 147, 5, 6, -1, 8, 9,
2250 10, 11, 12, 13, 14, 15, 16, -1, 18, -1,
2251 20, -1, -1, 139, -1, -1, 142, -1, -1, 145,
2252 -1, 147, -1, -1, -1, -1, -1, -1, -1, 139,
2253 -1, -1, 142, -1, 44, 145, -1, 147, -1, -1,
Reid Spencere4d87aa2006-12-23 06:05:41 +00002254 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002255 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer218ded22007-01-05 17:07:23 +00002256 -1, -1, -1, 32, -1, -1, 139, -1, -1, 142,
2257 -1, -1, 145, -1, 147, -1, 45, -1, -1, -1,
2258 -1, -1, 139, -1, -1, 142, 55, 56, 145, -1,
2259 147, -1, -1, -1, -1, -1, -1, -1, -1, 68,
2260 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2261 79, 80, 81, 82, 83, 84, 85, 86, 87, -1,
2262 -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
2263 -1, -1, 142, -1, -1, 145, -1, 147, -1, 108,
2264 109, 110, -1, -1, 113, 114, 115, 116, 117, 118,
2265 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
2266 129, 130, 131, 132, 133, 134
Reid Spencer3822ff52006-11-08 06:47:33 +00002267};
2268
2269/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2270 symbol of state STATE-NUM. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002271static const unsigned char yystos[] =
Reid Spencer3822ff52006-11-08 06:47:33 +00002272{
Reid Spencer14310612006-12-31 05:40:51 +00002273 0, 18, 20, 21, 27, 28, 47, 54, 58, 160,
Reid Spencer218ded22007-01-05 17:07:23 +00002274 187, 188, 189, 200, 191, 190, 48, 49, 50, 67,
2275 197, 136, 57, 17, 29, 30, 37, 38, 39, 40,
2276 41, 42, 43, 46, 161, 162, 186, 0, 189, 136,
2277 41, 43, 163, 209, 37, 38, 39, 42, 164, 206,
2278 208, 215, 136, 136, 136, 136, 142, 198, 20, 195,
Reid Spencer6fd36ab2006-12-29 20:35:03 +00002279 5, 6, 8, 9, 10, 11, 12, 13, 14, 15,
Reid Spencer218ded22007-01-05 17:07:23 +00002280 16, 44, 139, 142, 145, 147, 151, 176, 177, 200,
2281 212, 186, 186, 8, 9, 10, 11, 12, 13, 14,
2282 15, 158, 159, 177, 183, 60, 61, 62, 63, 64,
2283 65, 66, 165, 204, 204, 19, 216, 217, 26, 148,
2284 207, 216, 20, 51, 52, 196, 4, 20, 20, 199,
2285 140, 4, 4, 4, 147, 148, 177, 182, 138, 140,
2286 183, 177, 23, 24, 3, 4, 7, 22, 35, 36,
2287 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2288 84, 85, 86, 87, 113, 114, 115, 116, 117, 118,
2289 119, 120, 121, 122, 123, 124, 125, 127, 128, 129,
2290 130, 132, 133, 134, 142, 145, 147, 149, 152, 153,
2291 154, 155, 184, 212, 192, 4, 8, 177, 179, 25,
2292 147, 205, 160, 220, 137, 144, 34, 177, 178, 180,
2293 181, 143, 143, 148, 182, 137, 148, 181, 193, 194,
2294 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
2295 156, 23, 24, 94, 95, 96, 97, 98, 99, 100,
2296 101, 102, 103, 104, 105, 106, 107, 157, 140, 140,
2297 140, 140, 140, 144, 183, 185, 185, 148, 185, 20,
2298 140, 140, 140, 140, 137, 174, 200, 32, 45, 55,
2299 56, 68, 69, 70, 71, 72, 73, 86, 87, 108,
2300 109, 110, 113, 126, 127, 131, 132, 133, 134, 152,
2301 153, 154, 155, 218, 224, 225, 226, 227, 20, 167,
2302 137, 141, 177, 177, 146, 148, 177, 141, 174, 174,
2303 140, 140, 183, 183, 183, 183, 183, 137, 144, 146,
2304 148, 183, 183, 183, 183, 31, 53, 172, 175, 140,
2305 177, 214, 55, 8, 214, 9, 16, 10, 11, 12,
2306 13, 158, 165, 156, 157, 177, 177, 214, 177, 177,
2307 221, 214, 214, 214, 214, 214, 177, 177, 214, 214,
2308 165, 111, 112, 115, 116, 166, 34, 178, 169, 144,
2309 146, 146, 169, 183, 183, 223, 137, 137, 137, 137,
2310 183, 137, 137, 33, 137, 20, 4, 174, 34, 177,
2311 202, 203, 3, 4, 7, 22, 23, 24, 35, 36,
2312 57, 145, 184, 211, 212, 213, 213, 213, 213, 179,
2313 177, 177, 137, 171, 137, 171, 213, 142, 137, 137,
2314 137, 137, 137, 137, 213, 213, 33, 137, 179, 177,
2315 214, 135, 166, 168, 137, 137, 137, 141, 183, 183,
2316 183, 183, 183, 183, 177, 183, 167, 137, 141, 59,
2317 210, 185, 137, 137, 213, 213, 213, 12, 53, 12,
2318 223, 213, 142, 214, 177, 214, 214, 214, 137, 137,
2319 177, 214, 213, 213, 137, 183, 183, 214, 137, 141,
2320 137, 137, 141, 141, 141, 141, 200, 201, 34, 177,
2321 169, 20, 146, 16, 16, 140, 137, 137, 213, 4,
2322 213, 137, 213, 137, 137, 137, 213, 213, 140, 177,
2323 141, 141, 183, 183, 183, 167, 172, 173, 137, 213,
2324 213, 177, 222, 213, 213, 137, 171, 171, 213, 137,
2325 214, 214, 214, 222, 213, 141, 141, 141, 201, 53,
2326 170, 20, 137, 142, 213, 137, 141, 144, 213, 141,
2327 4, 16, 144, 158, 219, 167, 177, 169, 144, 169,
2328 213, 211, 144, 158, 213, 33, 137, 211, 167, 16,
2329 16, 137, 213, 213, 16, 72, 213, 16, 213
Reid Spencer3822ff52006-11-08 06:47:33 +00002330};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002331
2332#define yyerrok (yyerrstatus = 0)
2333#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002334#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002335#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002336
Reid Spencer68a24bd2005-08-27 18:50:39 +00002337#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002338#define YYABORT goto yyabortlab
2339#define YYERROR goto yyerrorlab
2340
2341
2342/* Like YYERROR except do call yyerror. This remains here temporarily
2343 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002344 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002345
Reid Spencer68a24bd2005-08-27 18:50:39 +00002346#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002347
Reid Spencer68a24bd2005-08-27 18:50:39 +00002348#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002349
2350#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002351do \
2352 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002353 { \
2354 yychar = (Token); \
2355 yylval = (Value); \
2356 yytoken = YYTRANSLATE (yychar); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002357 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002358 goto yybackup; \
2359 } \
2360 else \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002361 { \
2362 yyerror (YY_("syntax error: cannot back up")); \
Reid Spencer3822ff52006-11-08 06:47:33 +00002363 YYERROR; \
2364 } \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002365while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002366
Reid Spencere4d87aa2006-12-23 06:05:41 +00002367
Reid Spencer68a24bd2005-08-27 18:50:39 +00002368#define YYTERROR 1
2369#define YYERRCODE 256
2370
Reid Spencer3822ff52006-11-08 06:47:33 +00002371
Reid Spencere4d87aa2006-12-23 06:05:41 +00002372/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2373 If N is 0, then set CURRENT to the empty location which ends
2374 the previous symbol: RHS[0] (always defined). */
2375
2376#define YYRHSLOC(Rhs, K) ((Rhs)[K])
Reid Spencer3822ff52006-11-08 06:47:33 +00002377#ifndef YYLLOC_DEFAULT
Reid Spencere4d87aa2006-12-23 06:05:41 +00002378# define YYLLOC_DEFAULT(Current, Rhs, N) \
2379 do \
2380 if (N) \
2381 { \
2382 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2383 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2384 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2385 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2386 } \
2387 else \
2388 { \
2389 (Current).first_line = (Current).last_line = \
2390 YYRHSLOC (Rhs, 0).last_line; \
2391 (Current).first_column = (Current).last_column = \
2392 YYRHSLOC (Rhs, 0).last_column; \
2393 } \
2394 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002395#endif
2396
Reid Spencere4d87aa2006-12-23 06:05:41 +00002397
2398/* YY_LOCATION_PRINT -- Print the location on the stream.
2399 This macro was not mandated originally: define only if we know
2400 we won't break user code: when these are the locations we know. */
2401
2402#ifndef YY_LOCATION_PRINT
2403# if YYLTYPE_IS_TRIVIAL
2404# define YY_LOCATION_PRINT(File, Loc) \
2405 fprintf (File, "%d.%d-%d.%d", \
2406 (Loc).first_line, (Loc).first_column, \
2407 (Loc).last_line, (Loc).last_column)
2408# else
2409# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2410# endif
2411#endif
2412
2413
Reid Spencer3822ff52006-11-08 06:47:33 +00002414/* YYLEX -- calling `yylex' with the right arguments. */
2415
Reid Spencer68a24bd2005-08-27 18:50:39 +00002416#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002417# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002418#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002419# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002420#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002421
2422/* Enable debugging if requested. */
2423#if YYDEBUG
2424
2425# ifndef YYFPRINTF
2426# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2427# define YYFPRINTF fprintf
2428# endif
2429
2430# define YYDPRINTF(Args) \
2431do { \
2432 if (yydebug) \
2433 YYFPRINTF Args; \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002434} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002435
Reid Spencere4d87aa2006-12-23 06:05:41 +00002436# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002437do { \
2438 if (yydebug) \
2439 { \
2440 YYFPRINTF (stderr, "%s ", Title); \
Reid Spencere4d87aa2006-12-23 06:05:41 +00002441 yysymprint (stderr, \
2442 Type, Value); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002443 YYFPRINTF (stderr, "\n"); \
2444 } \
2445} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002446
2447/*------------------------------------------------------------------.
2448| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2449| TOP (included). |
2450`------------------------------------------------------------------*/
2451
Andrew Lenharth6353e052006-12-08 18:07:09 +00002452#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002453static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002454yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002455#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002456static void
2457yy_stack_print (bottom, top)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002458 short int *bottom;
2459 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002460#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002461{
2462 YYFPRINTF (stderr, "Stack now");
Andrew Lenharth6353e052006-12-08 18:07:09 +00002463 for (/* Nothing. */; bottom <= top; ++bottom)
Reid Spencer3822ff52006-11-08 06:47:33 +00002464 YYFPRINTF (stderr, " %d", *bottom);
2465 YYFPRINTF (stderr, "\n");
2466}
2467
2468# define YY_STACK_PRINT(Bottom, Top) \
2469do { \
2470 if (yydebug) \
2471 yy_stack_print ((Bottom), (Top)); \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002472} while (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00002473
2474
2475/*------------------------------------------------.
2476| Report that the YYRULE is going to be reduced. |
2477`------------------------------------------------*/
2478
Andrew Lenharth6353e052006-12-08 18:07:09 +00002479#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002480static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002481yy_reduce_print (int yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002482#else
2483static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002484yy_reduce_print (yyrule)
Reid Spencer3822ff52006-11-08 06:47:33 +00002485 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002486#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002487{
2488 int yyi;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002489 unsigned long int yylno = yyrline[yyrule];
2490 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
Andrew Lenharth6353e052006-12-08 18:07:09 +00002491 yyrule - 1, yylno);
2492 /* Print the symbols being reduced, and their result. */
2493 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002494 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2495 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
Reid Spencer3822ff52006-11-08 06:47:33 +00002496}
Reid Spencer21be8652006-10-22 07:03:43 +00002497
Reid Spencer3822ff52006-11-08 06:47:33 +00002498# define YY_REDUCE_PRINT(Rule) \
2499do { \
2500 if (yydebug) \
Andrew Lenharth6353e052006-12-08 18:07:09 +00002501 yy_reduce_print (Rule); \
2502} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002503
Reid Spencer3822ff52006-11-08 06:47:33 +00002504/* Nonzero means print parse trace. It is left uninitialized so that
2505 multiple parsers can coexist. */
2506int yydebug;
2507#else /* !YYDEBUG */
2508# define YYDPRINTF(Args)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002509# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Reid Spencer3822ff52006-11-08 06:47:33 +00002510# define YY_STACK_PRINT(Bottom, Top)
2511# define YY_REDUCE_PRINT(Rule)
2512#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002513
Reid Spencer21be8652006-10-22 07:03:43 +00002514
Reid Spencer3822ff52006-11-08 06:47:33 +00002515/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002516#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002517# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002518#endif
2519
Reid Spencer3822ff52006-11-08 06:47:33 +00002520/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2521 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002522
Reid Spencer3822ff52006-11-08 06:47:33 +00002523 Do not make this value too large; the results are undefined if
Reid Spencere4d87aa2006-12-23 06:05:41 +00002524 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
Reid Spencer3822ff52006-11-08 06:47:33 +00002525 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002526
2527#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002528# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002529#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002530
Reid Spencer68a24bd2005-08-27 18:50:39 +00002531
2532
Reid Spencer3822ff52006-11-08 06:47:33 +00002533#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002534
Reid Spencer3822ff52006-11-08 06:47:33 +00002535# ifndef yystrlen
Andrew Lenharth6353e052006-12-08 18:07:09 +00002536# if defined (__GLIBC__) && defined (_STRING_H)
Reid Spencer3822ff52006-11-08 06:47:33 +00002537# define yystrlen strlen
2538# else
2539/* Return the length of YYSTR. */
2540static YYSIZE_T
Andrew Lenharth6353e052006-12-08 18:07:09 +00002541# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002542yystrlen (const char *yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002543# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002544yystrlen (yystr)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002545 const char *yystr;
2546# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002547{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002548 const char *yys = yystr;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002549
2550 while (*yys++ != '\0')
Reid Spencer3822ff52006-11-08 06:47:33 +00002551 continue;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002552
2553 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002554}
Reid Spencer3822ff52006-11-08 06:47:33 +00002555# endif
2556# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002557
Reid Spencer3822ff52006-11-08 06:47:33 +00002558# ifndef yystpcpy
Andrew Lenharth6353e052006-12-08 18:07:09 +00002559# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
Reid Spencer3822ff52006-11-08 06:47:33 +00002560# define yystpcpy stpcpy
2561# else
2562/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2563 YYDEST. */
2564static char *
Andrew Lenharth6353e052006-12-08 18:07:09 +00002565# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002566yystpcpy (char *yydest, const char *yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002567# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002568yystpcpy (yydest, yysrc)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002569 char *yydest;
2570 const char *yysrc;
2571# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002572{
Reid Spencere4d87aa2006-12-23 06:05:41 +00002573 char *yyd = yydest;
2574 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002575
Reid Spencer3822ff52006-11-08 06:47:33 +00002576 while ((*yyd++ = *yys++) != '\0')
2577 continue;
2578
2579 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002580}
Reid Spencer3822ff52006-11-08 06:47:33 +00002581# endif
2582# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002583
Reid Spencere4d87aa2006-12-23 06:05:41 +00002584# ifndef yytnamerr
2585/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2586 quotes and backslashes, so that it's suitable for yyerror. The
2587 heuristic is that double-quoting is unnecessary unless the string
2588 contains an apostrophe, a comma, or backslash (other than
2589 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2590 null, do not copy; instead, return the length of what the result
2591 would have been. */
2592static YYSIZE_T
2593yytnamerr (char *yyres, const char *yystr)
2594{
2595 if (*yystr == '"')
2596 {
2597 size_t yyn = 0;
2598 char const *yyp = yystr;
2599
2600 for (;;)
2601 switch (*++yyp)
2602 {
2603 case '\'':
2604 case ',':
2605 goto do_not_strip_quotes;
2606
2607 case '\\':
2608 if (*++yyp != '\\')
2609 goto do_not_strip_quotes;
2610 /* Fall through. */
2611 default:
2612 if (yyres)
2613 yyres[yyn] = *yyp;
2614 yyn++;
2615 break;
2616
2617 case '"':
2618 if (yyres)
2619 yyres[yyn] = '\0';
2620 return yyn;
2621 }
2622 do_not_strip_quotes: ;
2623 }
2624
2625 if (! yyres)
2626 return yystrlen (yystr);
2627
2628 return yystpcpy (yyres, yystr) - yyres;
2629}
2630# endif
2631
2632#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00002633
Reid Spencer21be8652006-10-22 07:03:43 +00002634
2635
Andrew Lenharth6353e052006-12-08 18:07:09 +00002636#if YYDEBUG
2637/*--------------------------------.
2638| Print this symbol on YYOUTPUT. |
2639`--------------------------------*/
Reid Spencer3822ff52006-11-08 06:47:33 +00002640
Andrew Lenharth6353e052006-12-08 18:07:09 +00002641#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002642static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002643yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Reid Spencer3822ff52006-11-08 06:47:33 +00002644#else
2645static void
Andrew Lenharth6353e052006-12-08 18:07:09 +00002646yysymprint (yyoutput, yytype, yyvaluep)
2647 FILE *yyoutput;
Reid Spencer3822ff52006-11-08 06:47:33 +00002648 int yytype;
2649 YYSTYPE *yyvaluep;
2650#endif
2651{
Andrew Lenharth6353e052006-12-08 18:07:09 +00002652 /* Pacify ``unused variable'' warnings. */
2653 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002654
Andrew Lenharth6353e052006-12-08 18:07:09 +00002655 if (yytype < YYNTOKENS)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002656 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002657 else
2658 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2659
Reid Spencere4d87aa2006-12-23 06:05:41 +00002660
2661# ifdef YYPRINT
2662 if (yytype < YYNTOKENS)
2663 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2664# endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00002665 switch (yytype)
2666 {
2667 default:
2668 break;
2669 }
2670 YYFPRINTF (yyoutput, ")");
2671}
2672
2673#endif /* ! YYDEBUG */
2674/*-----------------------------------------------.
2675| Release the memory associated to this symbol. |
2676`-----------------------------------------------*/
2677
2678#if defined (__STDC__) || defined (__cplusplus)
2679static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002680yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
Andrew Lenharth6353e052006-12-08 18:07:09 +00002681#else
2682static void
Reid Spencere4d87aa2006-12-23 06:05:41 +00002683yydestruct (yymsg, yytype, yyvaluep)
2684 const char *yymsg;
Andrew Lenharth6353e052006-12-08 18:07:09 +00002685 int yytype;
2686 YYSTYPE *yyvaluep;
2687#endif
2688{
2689 /* Pacify ``unused variable'' warnings. */
2690 (void) yyvaluep;
Reid Spencer3822ff52006-11-08 06:47:33 +00002691
Reid Spencere4d87aa2006-12-23 06:05:41 +00002692 if (!yymsg)
2693 yymsg = "Deleting";
2694 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2695
Reid Spencer3822ff52006-11-08 06:47:33 +00002696 switch (yytype)
2697 {
2698
2699 default:
Andrew Lenharth6353e052006-12-08 18:07:09 +00002700 break;
Reid Spencer3822ff52006-11-08 06:47:33 +00002701 }
2702}
2703
2704
2705/* Prevent warnings from -Wmissing-prototypes. */
2706
2707#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002708# if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002709int yyparse (void *YYPARSE_PARAM);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002710# else
Reid Spencer3822ff52006-11-08 06:47:33 +00002711int yyparse ();
Andrew Lenharth6353e052006-12-08 18:07:09 +00002712# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002713#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002714#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002715int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002716#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002717int yyparse ();
2718#endif
2719#endif /* ! YYPARSE_PARAM */
2720
2721
2722
Reid Spencere4d87aa2006-12-23 06:05:41 +00002723/* The look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002724int yychar;
2725
Reid Spencere4d87aa2006-12-23 06:05:41 +00002726/* The semantic value of the look-ahead symbol. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002727YYSTYPE yylval;
2728
2729/* Number of syntax errors so far. */
2730int yynerrs;
2731
2732
2733
2734/*----------.
2735| yyparse. |
2736`----------*/
2737
2738#ifdef YYPARSE_PARAM
Andrew Lenharth6353e052006-12-08 18:07:09 +00002739# if defined (__STDC__) || defined (__cplusplus)
2740int yyparse (void *YYPARSE_PARAM)
2741# else
2742int yyparse (YYPARSE_PARAM)
2743 void *YYPARSE_PARAM;
2744# endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002745#else /* ! YYPARSE_PARAM */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002746#if defined (__STDC__) || defined (__cplusplus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002747int
2748yyparse (void)
2749#else
2750int
2751yyparse ()
2752
2753#endif
2754#endif
2755{
2756
Reid Spencere4d87aa2006-12-23 06:05:41 +00002757 int yystate;
2758 int yyn;
Reid Spencer3822ff52006-11-08 06:47:33 +00002759 int yyresult;
2760 /* Number of tokens to shift before error messages enabled. */
2761 int yyerrstatus;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002762 /* Look-ahead token as an internal (translated) token number. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002763 int yytoken = 0;
2764
2765 /* Three stacks and their tools:
2766 `yyss': related to states,
2767 `yyvs': related to semantic values,
2768 `yyls': related to locations.
2769
2770 Refer to the stacks thru separate pointers, to allow yyoverflow
2771 to reallocate them elsewhere. */
2772
2773 /* The state stack. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002774 short int yyssa[YYINITDEPTH];
2775 short int *yyss = yyssa;
2776 short int *yyssp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002777
2778 /* The semantic value stack. */
2779 YYSTYPE yyvsa[YYINITDEPTH];
2780 YYSTYPE *yyvs = yyvsa;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002781 YYSTYPE *yyvsp;
Reid Spencer3822ff52006-11-08 06:47:33 +00002782
2783
2784
Andrew Lenharth6353e052006-12-08 18:07:09 +00002785#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002786
Reid Spencer3822ff52006-11-08 06:47:33 +00002787 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002788
Reid Spencer3822ff52006-11-08 06:47:33 +00002789 /* The variables used to return semantic value and location from the
2790 action routines. */
2791 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002792
2793
Andrew Lenharth6353e052006-12-08 18:07:09 +00002794 /* When reducing, the number of symbols on the RHS of the reduced
2795 rule. */
2796 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002797
Reid Spencer3822ff52006-11-08 06:47:33 +00002798 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002799
Reid Spencer68a24bd2005-08-27 18:50:39 +00002800 yystate = 0;
2801 yyerrstatus = 0;
2802 yynerrs = 0;
2803 yychar = YYEMPTY; /* Cause a token to be read. */
2804
2805 /* Initialize stack pointers.
2806 Waste one element of value and location stack
2807 so that they stay on the same level as the state stack.
2808 The wasted elements are never initialized. */
2809
Reid Spencer3822ff52006-11-08 06:47:33 +00002810 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002811 yyvsp = yyvs;
2812
Reid Spencer3822ff52006-11-08 06:47:33 +00002813 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002814
Reid Spencer3822ff52006-11-08 06:47:33 +00002815/*------------------------------------------------------------.
2816| yynewstate -- Push a new state, which is found in yystate. |
2817`------------------------------------------------------------*/
2818 yynewstate:
2819 /* In all cases, when you get here, the value and location stacks
Andrew Lenharth6353e052006-12-08 18:07:09 +00002820 have just been pushed. so pushing a state here evens the stacks.
2821 */
Reid Spencer3822ff52006-11-08 06:47:33 +00002822 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002823
Reid Spencer3822ff52006-11-08 06:47:33 +00002824 yysetstate:
2825 *yyssp = yystate;
2826
2827 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002828 {
2829 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002830 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002831
2832#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002833 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00002834 /* Give user a chance to reallocate the stack. Use copies of
Reid Spencer3822ff52006-11-08 06:47:33 +00002835 these so that the &'s don't force the real ones into
2836 memory. */
2837 YYSTYPE *yyvs1 = yyvs;
Reid Spencere4d87aa2006-12-23 06:05:41 +00002838 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002839
Reid Spencer3822ff52006-11-08 06:47:33 +00002840
2841 /* Each stack pointer address is followed by the size of the
2842 data in use in that stack, in bytes. This used to be a
2843 conditional around just the two extra args, but that might
2844 be undefined if yyoverflow is a macro. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002845 yyoverflow (YY_("memory exhausted"),
Reid Spencer3822ff52006-11-08 06:47:33 +00002846 &yyss1, yysize * sizeof (*yyssp),
2847 &yyvs1, yysize * sizeof (*yyvsp),
2848
2849 &yystacksize);
2850
2851 yyss = yyss1;
2852 yyvs = yyvs1;
2853 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002854#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002855# ifndef YYSTACK_RELOCATE
Reid Spencere4d87aa2006-12-23 06:05:41 +00002856 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002857# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002858 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002859 if (YYMAXDEPTH <= yystacksize)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002860 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002861 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002862 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002863 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00002864
2865 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00002866 short int *yyss1 = yyss;
Reid Spencer3822ff52006-11-08 06:47:33 +00002867 union yyalloc *yyptr =
2868 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2869 if (! yyptr)
Reid Spencere4d87aa2006-12-23 06:05:41 +00002870 goto yyexhaustedlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002871 YYSTACK_RELOCATE (yyss);
2872 YYSTACK_RELOCATE (yyvs);
2873
2874# undef YYSTACK_RELOCATE
2875 if (yyss1 != yyssa)
2876 YYSTACK_FREE (yyss1);
2877 }
2878# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002879#endif /* no yyoverflow */
2880
Reid Spencer3822ff52006-11-08 06:47:33 +00002881 yyssp = yyss + yysize - 1;
2882 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002883
2884
Reid Spencer3822ff52006-11-08 06:47:33 +00002885 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2886 (unsigned long int) yystacksize));
2887
2888 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002889 YYABORT;
2890 }
2891
Reid Spencer3822ff52006-11-08 06:47:33 +00002892 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002893
2894 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00002895
2896/*-----------.
2897| yybackup. |
2898`-----------*/
2899yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002900
Andrew Lenharth6353e052006-12-08 18:07:09 +00002901/* Do appropriate processing given the current state. */
Reid Spencere4d87aa2006-12-23 06:05:41 +00002902/* Read a look-ahead token if we need one and don't already have one. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002903/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002904
Reid Spencere4d87aa2006-12-23 06:05:41 +00002905 /* First try to decide what to do without reference to look-ahead token. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002906
Reid Spencer68a24bd2005-08-27 18:50:39 +00002907 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00002908 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002909 goto yydefault;
2910
Reid Spencere4d87aa2006-12-23 06:05:41 +00002911 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002912
Reid Spencere4d87aa2006-12-23 06:05:41 +00002913 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002914 if (yychar == YYEMPTY)
2915 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002916 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002917 yychar = YYLEX;
2918 }
2919
Reid Spencer3822ff52006-11-08 06:47:33 +00002920 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002921 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002922 yychar = yytoken = YYEOF;
2923 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002924 }
2925 else
2926 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002927 yytoken = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00002928 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00002929 }
2930
Reid Spencer3822ff52006-11-08 06:47:33 +00002931 /* If the proper action on seeing token YYTOKEN is to reduce or to
2932 detect an error, take that action. */
2933 yyn += yytoken;
2934 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002935 goto yydefault;
2936 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00002937 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002938 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002939 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002940 goto yyerrlab;
2941 yyn = -yyn;
2942 goto yyreduce;
2943 }
2944
2945 if (yyn == YYFINAL)
2946 YYACCEPT;
2947
Reid Spencere4d87aa2006-12-23 06:05:41 +00002948 /* Shift the look-ahead token. */
2949 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Andrew Lenharth6353e052006-12-08 18:07:09 +00002950
2951 /* Discard the token being shifted unless it is eof. */
2952 if (yychar != YYEOF)
2953 yychar = YYEMPTY;
2954
2955 *++yyvsp = yylval;
2956
2957
Reid Spencer3822ff52006-11-08 06:47:33 +00002958 /* Count tokens shifted since error; after three, turn off error
2959 status. */
2960 if (yyerrstatus)
2961 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00002962
Reid Spencer68a24bd2005-08-27 18:50:39 +00002963 yystate = yyn;
2964 goto yynewstate;
2965
Chris Lattnerf49c1762006-11-08 05:58:47 +00002966
Reid Spencer3822ff52006-11-08 06:47:33 +00002967/*-----------------------------------------------------------.
2968| yydefault -- do the default action for the current state. |
2969`-----------------------------------------------------------*/
2970yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002971 yyn = yydefact[yystate];
2972 if (yyn == 0)
2973 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002974 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002975
Reid Spencer3822ff52006-11-08 06:47:33 +00002976
2977/*-----------------------------.
2978| yyreduce -- Do a reduction. |
2979`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00002980yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00002981 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002982 yylen = yyr2[yyn];
2983
Reid Spencer3822ff52006-11-08 06:47:33 +00002984 /* If YYLEN is nonzero, implement the default value of the action:
2985 `$$ = $1'.
2986
2987 Otherwise, the following line sets YYVAL to garbage.
2988 This behavior is undocumented and Bison
2989 users should not rely upon it. Assigning to YYVAL
2990 unconditionally makes the parser a bit smaller, and it avoids a
2991 GCC warning that YYVAL may be used uninitialized. */
2992 yyval = yyvsp[1-yylen];
2993
2994
2995 YY_REDUCE_PRINT (yyn);
2996 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002997 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002998 case 3:
Reid Spencer218ded22007-01-05 17:07:23 +00002999#line 1039 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003000 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003001 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003002 GEN_ERROR("Value too large for type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003003 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003004 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003005;}
3006 break;
3007
Reid Spencere4d87aa2006-12-23 06:05:41 +00003008 case 31:
Reid Spencer218ded22007-01-05 17:07:23 +00003009#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003010 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3011 break;
3012
3013 case 32:
Reid Spencer218ded22007-01-05 17:07:23 +00003014#line 1055 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003015 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3016 break;
3017
3018 case 33:
Reid Spencer218ded22007-01-05 17:07:23 +00003019#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003020 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3021 break;
3022
3023 case 34:
Reid Spencer218ded22007-01-05 17:07:23 +00003024#line 1056 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003025 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3026 break;
3027
3028 case 35:
Reid Spencer218ded22007-01-05 17:07:23 +00003029#line 1057 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003030 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3031 break;
3032
3033 case 36:
Reid Spencer218ded22007-01-05 17:07:23 +00003034#line 1057 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003035 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3036 break;
3037
3038 case 37:
Reid Spencer218ded22007-01-05 17:07:23 +00003039#line 1058 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003040 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3041 break;
3042
3043 case 38:
Reid Spencer218ded22007-01-05 17:07:23 +00003044#line 1058 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003045 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003046 break;
3047
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003048 case 39:
Reid Spencer218ded22007-01-05 17:07:23 +00003049#line 1059 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003050 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003051 break;
3052
3053 case 40:
Reid Spencer218ded22007-01-05 17:07:23 +00003054#line 1059 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003055 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003056 break;
3057
3058 case 41:
Reid Spencer218ded22007-01-05 17:07:23 +00003059#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003060 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003061 break;
3062
3063 case 42:
Reid Spencer218ded22007-01-05 17:07:23 +00003064#line 1063 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003065 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003066 break;
3067
3068 case 43:
Reid Spencer218ded22007-01-05 17:07:23 +00003069#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003070 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003071 break;
3072
3073 case 44:
Reid Spencer218ded22007-01-05 17:07:23 +00003074#line 1064 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003075 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003076 break;
3077
3078 case 45:
Reid Spencer218ded22007-01-05 17:07:23 +00003079#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003080 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003081 break;
3082
3083 case 46:
Reid Spencer218ded22007-01-05 17:07:23 +00003084#line 1065 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003085 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003086 break;
3087
3088 case 47:
Reid Spencer218ded22007-01-05 17:07:23 +00003089#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003090 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003091 break;
3092
3093 case 48:
Reid Spencer218ded22007-01-05 17:07:23 +00003094#line 1066 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003095 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003096 break;
3097
3098 case 49:
Reid Spencer218ded22007-01-05 17:07:23 +00003099#line 1067 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003100 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003101 break;
3102
3103 case 50:
Reid Spencer218ded22007-01-05 17:07:23 +00003104#line 1067 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003105 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003106 break;
3107
3108 case 51:
Reid Spencer218ded22007-01-05 17:07:23 +00003109#line 1068 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003110 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003111 break;
3112
3113 case 52:
Reid Spencer218ded22007-01-05 17:07:23 +00003114#line 1068 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003115 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003116 break;
3117
3118 case 53:
Reid Spencer218ded22007-01-05 17:07:23 +00003119#line 1069 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003120 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003121 break;
3122
3123 case 54:
Reid Spencer218ded22007-01-05 17:07:23 +00003124#line 1069 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003125 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003126 break;
3127
3128 case 55:
Reid Spencer218ded22007-01-05 17:07:23 +00003129#line 1070 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003130 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003131 break;
3132
3133 case 56:
Reid Spencer218ded22007-01-05 17:07:23 +00003134#line 1071 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003135 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003136 break;
3137
Reid Spencer14310612006-12-31 05:40:51 +00003138 case 63:
Reid Spencer218ded22007-01-05 17:07:23 +00003139#line 1080 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003140 {
3141 (yyval.StrVal) = (yyvsp[-1].StrVal);
3142 CHECK_FOR_ERROR
3143 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003144 break;
3145
Reid Spencer14310612006-12-31 05:40:51 +00003146 case 64:
Reid Spencer218ded22007-01-05 17:07:23 +00003147#line 1084 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003148 {
3149 (yyval.StrVal) = 0;
3150 CHECK_FOR_ERROR
3151 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003152 break;
3153
Reid Spencer14310612006-12-31 05:40:51 +00003154 case 65:
Reid Spencer218ded22007-01-05 17:07:23 +00003155#line 1090 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003156 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003157 break;
3158
Reid Spencer14310612006-12-31 05:40:51 +00003159 case 66:
Reid Spencer218ded22007-01-05 17:07:23 +00003160#line 1091 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003161 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003162 break;
3163
Reid Spencer14310612006-12-31 05:40:51 +00003164 case 67:
Reid Spencer218ded22007-01-05 17:07:23 +00003165#line 1092 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003166 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3167 break;
3168
Reid Spencer14310612006-12-31 05:40:51 +00003169 case 68:
Reid Spencer218ded22007-01-05 17:07:23 +00003170#line 1093 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003171 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003172 break;
3173
Reid Spencer14310612006-12-31 05:40:51 +00003174 case 69:
Reid Spencer218ded22007-01-05 17:07:23 +00003175#line 1094 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003176 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003177 break;
3178
Reid Spencer14310612006-12-31 05:40:51 +00003179 case 70:
Reid Spencer218ded22007-01-05 17:07:23 +00003180#line 1098 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003181 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3182 break;
3183
Reid Spencer14310612006-12-31 05:40:51 +00003184 case 71:
Reid Spencer218ded22007-01-05 17:07:23 +00003185#line 1099 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003186 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003187 break;
3188
Reid Spencer14310612006-12-31 05:40:51 +00003189 case 72:
Reid Spencer218ded22007-01-05 17:07:23 +00003190#line 1100 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003191 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003192 break;
3193
Reid Spencer14310612006-12-31 05:40:51 +00003194 case 73:
Reid Spencer218ded22007-01-05 17:07:23 +00003195#line 1104 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003196 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003197 break;
3198
Reid Spencer14310612006-12-31 05:40:51 +00003199 case 74:
Reid Spencer218ded22007-01-05 17:07:23 +00003200#line 1105 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003201 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003202 break;
3203
Reid Spencer14310612006-12-31 05:40:51 +00003204 case 75:
Reid Spencer218ded22007-01-05 17:07:23 +00003205#line 1106 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003206 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003207 break;
3208
Reid Spencer14310612006-12-31 05:40:51 +00003209 case 76:
Reid Spencer218ded22007-01-05 17:07:23 +00003210#line 1110 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003211 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3212 break;
3213
3214 case 77:
Reid Spencer218ded22007-01-05 17:07:23 +00003215#line 1111 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003216 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003217 break;
3218
Reid Spencer14310612006-12-31 05:40:51 +00003219 case 78:
Reid Spencer218ded22007-01-05 17:07:23 +00003220#line 1112 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003221 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003222 break;
3223
Reid Spencer14310612006-12-31 05:40:51 +00003224 case 79:
Reid Spencer218ded22007-01-05 17:07:23 +00003225#line 1113 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003226 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003227 break;
3228
Reid Spencer14310612006-12-31 05:40:51 +00003229 case 80:
Reid Spencer218ded22007-01-05 17:07:23 +00003230#line 1114 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003231 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003232 break;
3233
Reid Spencer14310612006-12-31 05:40:51 +00003234 case 81:
Reid Spencer218ded22007-01-05 17:07:23 +00003235#line 1117 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003236 { (yyval.UIntVal) = CallingConv::C; ;}
3237 break;
3238
Reid Spencer14310612006-12-31 05:40:51 +00003239 case 82:
Reid Spencer218ded22007-01-05 17:07:23 +00003240#line 1118 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003241 { (yyval.UIntVal) = CallingConv::C; ;}
3242 break;
3243
Reid Spencer14310612006-12-31 05:40:51 +00003244 case 83:
Reid Spencer218ded22007-01-05 17:07:23 +00003245#line 1119 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003246 { (yyval.UIntVal) = CallingConv::CSRet; ;}
3247 break;
3248
Reid Spencer14310612006-12-31 05:40:51 +00003249 case 84:
Reid Spencer218ded22007-01-05 17:07:23 +00003250#line 1120 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003251 { (yyval.UIntVal) = CallingConv::Fast; ;}
3252 break;
3253
Reid Spencer14310612006-12-31 05:40:51 +00003254 case 85:
Reid Spencer218ded22007-01-05 17:07:23 +00003255#line 1121 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003256 { (yyval.UIntVal) = CallingConv::Cold; ;}
3257 break;
3258
Reid Spencer14310612006-12-31 05:40:51 +00003259 case 86:
Reid Spencer218ded22007-01-05 17:07:23 +00003260#line 1122 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003261 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3262 break;
3263
Reid Spencer14310612006-12-31 05:40:51 +00003264 case 87:
Reid Spencer218ded22007-01-05 17:07:23 +00003265#line 1123 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003266 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3267 break;
3268
Reid Spencer14310612006-12-31 05:40:51 +00003269 case 88:
Reid Spencer218ded22007-01-05 17:07:23 +00003270#line 1124 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003271 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003272 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003273 GEN_ERROR("Calling conv too large!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003274 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003275 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003276 ;}
3277 break;
3278
Reid Spencer14310612006-12-31 05:40:51 +00003279 case 89:
Reid Spencer218ded22007-01-05 17:07:23 +00003280#line 1131 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003281 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3282 break;
3283
3284 case 90:
Reid Spencer218ded22007-01-05 17:07:23 +00003285#line 1132 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003286 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3287 break;
3288
3289 case 91:
Reid Spencer218ded22007-01-05 17:07:23 +00003290#line 1135 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3291 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
Reid Spencer14310612006-12-31 05:40:51 +00003292 break;
3293
3294 case 92:
Reid Spencer218ded22007-01-05 17:07:23 +00003295#line 1136 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003296 {
Reid Spencer218ded22007-01-05 17:07:23 +00003297 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
Reid Spencer14310612006-12-31 05:40:51 +00003298 ;}
3299 break;
3300
3301 case 93:
Reid Spencer218ded22007-01-05 17:07:23 +00003302#line 1141 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3303 { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
Reid Spencer14310612006-12-31 05:40:51 +00003304 break;
3305
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003306 case 95:
Reid Spencer218ded22007-01-05 17:07:23 +00003307#line 1145 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3308 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00003309 break;
3310
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003311 case 96:
Reid Spencer218ded22007-01-05 17:07:23 +00003312#line 1146 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3313 {
3314 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3315 ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00003316 break;
3317
Reid Spencer14310612006-12-31 05:40:51 +00003318 case 97:
Reid Spencer218ded22007-01-05 17:07:23 +00003319#line 1153 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003320 { (yyval.UIntVal) = 0; ;}
3321 break;
3322
Reid Spencer218ded22007-01-05 17:07:23 +00003323 case 98:
3324#line 1154 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003325 {
3326 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3327 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3328 GEN_ERROR("Alignment must be a power of two!");
3329 CHECK_FOR_ERROR
3330;}
3331 break;
3332
Reid Spencer218ded22007-01-05 17:07:23 +00003333 case 99:
3334#line 1160 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3335 { (yyval.UIntVal) = 0; ;}
3336 break;
3337
Reid Spencer14310612006-12-31 05:40:51 +00003338 case 100:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003339#line 1161 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003340 {
Reid Spencer218ded22007-01-05 17:07:23 +00003341 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3342 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3343 GEN_ERROR("Alignment must be a power of two!");
3344 CHECK_FOR_ERROR
3345;}
3346 break;
3347
3348 case 101:
3349#line 1169 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3350 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003351 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3352 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
3353 GEN_ERROR("Invalid character in section name!");
3354 (yyval.StrVal) = (yyvsp[0].StrVal);
3355 CHECK_FOR_ERROR
3356;}
3357 break;
3358
Reid Spencer218ded22007-01-05 17:07:23 +00003359 case 102:
3360#line 1177 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003361 { (yyval.StrVal) = 0; ;}
3362 break;
3363
Reid Spencer218ded22007-01-05 17:07:23 +00003364 case 103:
3365#line 1178 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003366 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3367 break;
3368
Reid Spencer6fd36ab2006-12-29 20:35:03 +00003369 case 104:
Reid Spencer218ded22007-01-05 17:07:23 +00003370#line 1183 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003371 {;}
3372 break;
3373
3374 case 105:
Reid Spencer218ded22007-01-05 17:07:23 +00003375#line 1184 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3376 {;}
3377 break;
3378
3379 case 106:
3380#line 1185 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003381 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003382 CurGV->setSection((yyvsp[0].StrVal));
3383 free((yyvsp[0].StrVal));
3384 CHECK_FOR_ERROR
3385 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003386 break;
3387
Reid Spencer218ded22007-01-05 17:07:23 +00003388 case 107:
3389#line 1190 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003390 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003391 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
3392 GEN_ERROR("Alignment must be a power of two!");
3393 CurGV->setAlignment((yyvsp[0].UInt64Val));
3394 CHECK_FOR_ERROR
3395 ;}
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003396 break;
3397
Reid Spencer218ded22007-01-05 17:07:23 +00003398 case 116:
3399#line 1206 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003400 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003401 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencera132e042006-12-03 05:46:11 +00003402 CHECK_FOR_ERROR
3403 ;}
3404 break;
3405
Reid Spencer218ded22007-01-05 17:07:23 +00003406 case 117:
3407#line 1210 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003408 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003409 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Reid Spencera132e042006-12-03 05:46:11 +00003410 CHECK_FOR_ERROR
3411 ;}
3412 break;
3413
Reid Spencer218ded22007-01-05 17:07:23 +00003414 case 118:
3415#line 1214 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003416 { // Pointer type?
3417 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
3418 GEN_ERROR("Cannot form a pointer to a basic block");
3419 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3420 delete (yyvsp[-1].TypeVal);
3421 CHECK_FOR_ERROR
3422 ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003423 break;
3424
Reid Spencer218ded22007-01-05 17:07:23 +00003425 case 119:
3426#line 1221 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003427 { // Named types are also simple types...
3428 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3429 CHECK_FOR_ERROR
3430 (yyval.TypeVal) = new PATypeHolder(tmp);
3431 ;}
3432 break;
3433
Reid Spencer218ded22007-01-05 17:07:23 +00003434 case 120:
3435#line 1226 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003436 { // Type UpReference
Reid Spencere4d87aa2006-12-23 06:05:41 +00003437 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
Reid Spencer3da59db2006-11-27 01:05:10 +00003438 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencere4d87aa2006-12-23 06:05:41 +00003439 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3440 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003441 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003442 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003443 ;}
3444 break;
3445
Reid Spencer218ded22007-01-05 17:07:23 +00003446 case 121:
3447#line 1234 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003448 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003449 std::vector<const Type*> Params;
Reid Spencer14310612006-12-31 05:40:51 +00003450 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer218ded22007-01-05 17:07:23 +00003451 Attrs.push_back((yyvsp[0].ParamAttrs));
3452 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003453 Params.push_back(I->Ty->get());
3454 if (I->Ty->get() != Type::VoidTy)
3455 Attrs.push_back(I->Attrs);
3456 }
Reid Spencer3da59db2006-11-27 01:05:10 +00003457 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3458 if (isVarArg) Params.pop_back();
3459
Reid Spencer14310612006-12-31 05:40:51 +00003460 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
Reid Spencer218ded22007-01-05 17:07:23 +00003461 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
Reid Spencer14310612006-12-31 05:40:51 +00003462 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3463 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003464 CHECK_FOR_ERROR
3465 ;}
3466 break;
3467
Reid Spencer218ded22007-01-05 17:07:23 +00003468 case 122:
3469#line 1252 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003470 {
3471 std::vector<const Type*> Params;
3472 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer218ded22007-01-05 17:07:23 +00003473 Attrs.push_back((yyvsp[0].ParamAttrs));
3474 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00003475 Params.push_back(I->Ty->get());
3476 if (I->Ty->get() != Type::VoidTy)
3477 Attrs.push_back(I->Attrs);
3478 }
3479 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3480 if (isVarArg) Params.pop_back();
3481
3482 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
Reid Spencer218ded22007-01-05 17:07:23 +00003483 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
Reid Spencer14310612006-12-31 05:40:51 +00003484 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
3485 CHECK_FOR_ERROR
3486 ;}
3487 break;
3488
Reid Spencer218ded22007-01-05 17:07:23 +00003489 case 123:
3490#line 1270 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003491 { // Sized array type?
3492 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3493 delete (yyvsp[-1].TypeVal);
3494 CHECK_FOR_ERROR
3495 ;}
3496 break;
3497
Reid Spencer218ded22007-01-05 17:07:23 +00003498 case 124:
3499#line 1275 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003500 { // Packed array type?
3501 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3502 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3503 GEN_ERROR("Unsigned result not equal to signed result");
3504 if (!ElemTy->isPrimitiveType())
3505 GEN_ERROR("Elemental type of a PackedType must be primitive");
3506 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3507 GEN_ERROR("Vector length should be a power of 2!");
3508 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3509 delete (yyvsp[-1].TypeVal);
3510 CHECK_FOR_ERROR
3511 ;}
3512 break;
3513
Reid Spencer218ded22007-01-05 17:07:23 +00003514 case 125:
3515#line 1287 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003516 { // Structure type?
3517 std::vector<const Type*> Elements;
3518 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3519 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
3520 Elements.push_back(*I);
3521
3522 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3523 delete (yyvsp[-1].TypeList);
3524 CHECK_FOR_ERROR
3525 ;}
3526 break;
3527
Reid Spencer218ded22007-01-05 17:07:23 +00003528 case 126:
3529#line 1297 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003530 { // Empty structure type?
3531 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
3532 CHECK_FOR_ERROR
3533 ;}
3534 break;
3535
Reid Spencer218ded22007-01-05 17:07:23 +00003536 case 127:
3537#line 1301 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003538 {
3539 std::vector<const Type*> Elements;
3540 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3541 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
3542 Elements.push_back(*I);
3543
3544 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3545 delete (yyvsp[-2].TypeList);
3546 CHECK_FOR_ERROR
3547 ;}
3548 break;
3549
Reid Spencer218ded22007-01-05 17:07:23 +00003550 case 128:
3551#line 1311 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003552 { // Empty structure type?
3553 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
3554 CHECK_FOR_ERROR
3555 ;}
3556 break;
3557
Reid Spencer218ded22007-01-05 17:07:23 +00003558 case 129:
3559#line 1318 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003560 {
3561 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3562 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3563 ;}
3564 break;
3565
Reid Spencer14310612006-12-31 05:40:51 +00003566 case 130:
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00003567#line 1325 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003568 {
Reid Spencer218ded22007-01-05 17:07:23 +00003569 if (!UpRefs.empty())
3570 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3571 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
3572 GEN_ERROR("LLVM functions cannot return aggregate types!");
3573 (yyval.TypeVal) = (yyvsp[0].TypeVal);
Reid Spencer14310612006-12-31 05:40:51 +00003574 ;}
3575 break;
3576
3577 case 131:
Reid Spencer218ded22007-01-05 17:07:23 +00003578#line 1332 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
3579 {
3580 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3581 ;}
3582 break;
3583
3584 case 132:
3585#line 1337 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003586 {
3587 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3588 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
3589 CHECK_FOR_ERROR
3590 ;}
3591 break;
3592
Reid Spencer218ded22007-01-05 17:07:23 +00003593 case 133:
3594#line 1342 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003595 {
3596 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
3597 CHECK_FOR_ERROR
3598 ;}
3599 break;
3600
Reid Spencer218ded22007-01-05 17:07:23 +00003601 case 135:
3602#line 1350 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003603 {
3604 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
3605 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3606 TWA.Ty = new PATypeHolder(Type::VoidTy);
3607 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencere4d87aa2006-12-23 06:05:41 +00003608 CHECK_FOR_ERROR
3609 ;}
3610 break;
3611
Reid Spencer218ded22007-01-05 17:07:23 +00003612 case 136:
3613#line 1357 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003614 {
3615 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
3616 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3617 TWA.Ty = new PATypeHolder(Type::VoidTy);
3618 (yyval.TypeWithAttrsList)->push_back(TWA);
3619 CHECK_FOR_ERROR
3620 ;}
3621 break;
3622
Reid Spencer218ded22007-01-05 17:07:23 +00003623 case 137:
3624#line 1364 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003625 {
3626 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3627 CHECK_FOR_ERROR
3628 ;}
3629 break;
3630
Reid Spencer218ded22007-01-05 17:07:23 +00003631 case 138:
3632#line 1372 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003633 {
3634 (yyval.TypeList) = new std::list<PATypeHolder>();
3635 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003636 CHECK_FOR_ERROR
3637 ;}
3638 break;
3639
Reid Spencer218ded22007-01-05 17:07:23 +00003640 case 139:
3641#line 1377 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003642 {
3643 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003644 CHECK_FOR_ERROR
3645 ;}
3646 break;
3647
Reid Spencer218ded22007-01-05 17:07:23 +00003648 case 140:
3649#line 1388 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003650 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003651 if (!UpRefs.empty())
3652 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003653 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
3654 if (ATy == 0)
3655 GEN_ERROR("Cannot make array constant with type: '" +
3656 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
3657 const Type *ETy = ATy->getElementType();
3658 int NumElements = ATy->getNumElements();
3659
3660 // Verify that we have the correct size...
3661 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
3662 GEN_ERROR("Type mismatch: constant sized array initialized with " +
3663 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
3664 itostr(NumElements) + "!");
3665
3666 // Verify all elements are correct type!
3667 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3668 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
3669 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3670 ETy->getDescription() +"' as required!\nIt is of type '"+
3671 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
3672 }
3673
3674 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3675 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer3da59db2006-11-27 01:05:10 +00003676 CHECK_FOR_ERROR
3677 ;}
3678 break;
3679
Reid Spencer218ded22007-01-05 17:07:23 +00003680 case 141:
3681#line 1416 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003682 {
Reid Spencer14310612006-12-31 05:40:51 +00003683 if (!UpRefs.empty())
3684 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003685 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003686 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003687 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003688 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003689
Andrew Lenharth6353e052006-12-08 18:07:09 +00003690 int NumElements = ATy->getNumElements();
3691 if (NumElements != -1 && NumElements != 0)
3692 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3693 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003694 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3695 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003696 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003697 ;}
3698 break;
3699
Reid Spencer218ded22007-01-05 17:07:23 +00003700 case 142:
3701#line 1432 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003702 {
Reid Spencer14310612006-12-31 05:40:51 +00003703 if (!UpRefs.empty())
3704 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003705 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003706 if (ATy == 0)
3707 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003708 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003709
Andrew Lenharth6353e052006-12-08 18:07:09 +00003710 int NumElements = ATy->getNumElements();
3711 const Type *ETy = ATy->getElementType();
Reid Spencere4d87aa2006-12-23 06:05:41 +00003712 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3713 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003714 GEN_ERROR("Can't build string constant of size " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003715 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003716 " when array has size " + itostr(NumElements) + "!");
3717 std::vector<Constant*> Vals;
Reid Spencer14310612006-12-31 05:40:51 +00003718 if (ETy == Type::Int8Ty) {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003719 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Reid Spencer14310612006-12-31 05:40:51 +00003720 C != (unsigned char*)EndStr; ++C)
3721 Vals.push_back(ConstantInt::get(ETy, *C));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003722 } else {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003723 free((yyvsp[0].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00003724 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
3725 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00003726 free((yyvsp[0].StrVal));
3727 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3728 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003729 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003730 ;}
3731 break;
3732
Reid Spencer218ded22007-01-05 17:07:23 +00003733 case 143:
3734#line 1461 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003735 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003736 if (!UpRefs.empty())
3737 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003738 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003739 if (PTy == 0)
3740 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003741 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003742 const Type *ETy = PTy->getElementType();
3743 int NumElements = PTy->getNumElements();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003744
Andrew Lenharth6353e052006-12-08 18:07:09 +00003745 // Verify that we have the correct size...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003746 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003747 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003748 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Andrew Lenharth6353e052006-12-08 18:07:09 +00003749 itostr(NumElements) + "!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003750
Andrew Lenharth6353e052006-12-08 18:07:09 +00003751 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003752 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3753 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003754 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3755 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencere4d87aa2006-12-23 06:05:41 +00003756 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003757 }
3758
Reid Spencere4d87aa2006-12-23 06:05:41 +00003759 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3760 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003761 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003762 ;}
3763 break;
3764
Reid Spencer218ded22007-01-05 17:07:23 +00003765 case 144:
3766#line 1489 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003767 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003768 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003769 if (STy == 0)
3770 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003771 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003772
Reid Spencere4d87aa2006-12-23 06:05:41 +00003773 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Andrew Lenharth6353e052006-12-08 18:07:09 +00003774 GEN_ERROR("Illegal number of initializers for structure type!");
3775
3776 // Check to ensure that constants are compatible with the type initializer!
Reid Spencere4d87aa2006-12-23 06:05:41 +00003777 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3778 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003779 GEN_ERROR("Expected type '" +
3780 STy->getElementType(i)->getDescription() +
3781 "' for element #" + utostr(i) +
3782 " of structure initializer!");
3783
Reid Spencere4d87aa2006-12-23 06:05:41 +00003784 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3785 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003786 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003787 ;}
3788 break;
3789
Reid Spencer218ded22007-01-05 17:07:23 +00003790 case 145:
3791#line 1510 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003792 {
Reid Spencer14310612006-12-31 05:40:51 +00003793 if (!UpRefs.empty())
3794 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003795 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003796 if (STy == 0)
3797 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003798 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003799
3800 if (STy->getNumContainedTypes() != 0)
3801 GEN_ERROR("Illegal number of initializers for structure type!");
3802
Reid Spencere4d87aa2006-12-23 06:05:41 +00003803 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3804 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003805 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003806 ;}
3807 break;
3808
Reid Spencer218ded22007-01-05 17:07:23 +00003809 case 146:
3810#line 1525 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003811 {
Reid Spencer14310612006-12-31 05:40:51 +00003812 if (!UpRefs.empty())
3813 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003814 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Andrew Lenharth6353e052006-12-08 18:07:09 +00003815 if (PTy == 0)
3816 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00003817 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003818
Reid Spencere4d87aa2006-12-23 06:05:41 +00003819 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3820 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003821 CHECK_FOR_ERROR
3822 ;}
3823 break;
3824
Reid Spencer218ded22007-01-05 17:07:23 +00003825 case 147:
3826#line 1537 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003827 {
Reid Spencer14310612006-12-31 05:40:51 +00003828 if (!UpRefs.empty())
3829 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003830 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3831 delete (yyvsp[-1].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00003832 CHECK_FOR_ERROR
3833 ;}
3834 break;
3835
Reid Spencer218ded22007-01-05 17:07:23 +00003836 case 148:
3837#line 1544 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003838 {
Reid Spencer14310612006-12-31 05:40:51 +00003839 if (!UpRefs.empty())
3840 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003841 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003842 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003843 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003844
3845 // ConstExprs can exist in the body of a function, thus creating
3846 // GlobalValues whenever they refer to a variable. Because we are in
3847 // the context of a function, getValNonImprovising will search the functions
3848 // symbol table instead of the module symbol table for the global symbol,
3849 // which throws things all off. To get around this, we just tell
3850 // getValNonImprovising that we are at global scope here.
3851 //
3852 Function *SavedCurFn = CurFun.CurrentFunction;
3853 CurFun.CurrentFunction = 0;
3854
Reid Spencere4d87aa2006-12-23 06:05:41 +00003855 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003856 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003857
3858 CurFun.CurrentFunction = SavedCurFn;
3859
3860 // If this is an initializer for a constant pointer, which is referencing a
3861 // (currently) undefined variable, create a stub now that shall be replaced
3862 // in the future with the right type of variable.
3863 //
3864 if (V == 0) {
3865 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3866 const PointerType *PT = cast<PointerType>(Ty);
3867
3868 // First check to see if the forward references value is already created!
3869 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencere4d87aa2006-12-23 06:05:41 +00003870 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003871
3872 if (I != CurModule.GlobalRefs.end()) {
3873 V = I->second; // Placeholder already exists, use it...
Reid Spencere4d87aa2006-12-23 06:05:41 +00003874 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003875 } else {
3876 std::string Name;
Reid Spencere4d87aa2006-12-23 06:05:41 +00003877 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003878
3879 // Create the forward referenced global.
3880 GlobalValue *GV;
3881 if (const FunctionType *FTy =
3882 dyn_cast<FunctionType>(PT->getElementType())) {
3883 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3884 CurModule.CurrentModule);
3885 } else {
3886 GV = new GlobalVariable(PT->getElementType(), false,
3887 GlobalValue::ExternalLinkage, 0,
3888 Name, CurModule.CurrentModule);
3889 }
3890
3891 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencere4d87aa2006-12-23 06:05:41 +00003892 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003893 V = GV;
3894 }
3895 }
3896
Reid Spencere4d87aa2006-12-23 06:05:41 +00003897 (yyval.ConstVal) = cast<GlobalValue>(V);
3898 delete (yyvsp[-1].TypeVal); // Free the type handle
3899 CHECK_FOR_ERROR
3900 ;}
3901 break;
3902
Reid Spencer218ded22007-01-05 17:07:23 +00003903 case 149:
3904#line 1607 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003905 {
Reid Spencer14310612006-12-31 05:40:51 +00003906 if (!UpRefs.empty())
3907 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003908 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Reid Spencere68853b2007-01-04 00:06:14 +00003909 GEN_ERROR("Mismatched types for constant expression: " +
3910 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003911 (yyval.ConstVal) = (yyvsp[0].ConstVal);
3912 delete (yyvsp[-1].TypeVal);
3913 CHECK_FOR_ERROR
3914 ;}
3915 break;
3916
Reid Spencer218ded22007-01-05 17:07:23 +00003917 case 150:
3918#line 1617 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003919 {
Reid Spencer14310612006-12-31 05:40:51 +00003920 if (!UpRefs.empty())
3921 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003922 const Type *Ty = (yyvsp[-1].TypeVal)->get();
3923 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3924 GEN_ERROR("Cannot create a null initialized value of this type!");
3925 (yyval.ConstVal) = Constant::getNullValue(Ty);
3926 delete (yyvsp[-1].TypeVal);
3927 CHECK_FOR_ERROR
3928 ;}
3929 break;
3930
Reid Spencer218ded22007-01-05 17:07:23 +00003931 case 151:
3932#line 1627 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003933 { // integral constants
3934 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
3935 GEN_ERROR("Constant value doesn't fit in type!");
3936 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
3937 CHECK_FOR_ERROR
3938 ;}
3939 break;
3940
Reid Spencer218ded22007-01-05 17:07:23 +00003941 case 152:
3942#line 1633 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00003943 { // integral constants
3944 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
3945 GEN_ERROR("Constant value doesn't fit in type!");
3946 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
3947 CHECK_FOR_ERROR
3948 ;}
3949 break;
3950
Reid Spencer218ded22007-01-05 17:07:23 +00003951 case 153:
3952#line 1639 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003953 { // Boolean constants
3954 (yyval.ConstVal) = ConstantBool::getTrue();
3955 CHECK_FOR_ERROR
3956 ;}
3957 break;
3958
Reid Spencer218ded22007-01-05 17:07:23 +00003959 case 154:
3960#line 1643 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003961 { // Boolean constants
3962 (yyval.ConstVal) = ConstantBool::getFalse();
Reid Spencer61c83e02006-08-18 08:43:06 +00003963 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003964 ;}
3965 break;
3966
Reid Spencer218ded22007-01-05 17:07:23 +00003967 case 155:
3968#line 1647 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00003969 { // Float & Double constants
3970 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
3971 GEN_ERROR("Floating point constant invalid for type!!");
3972 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003973 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003974 ;}
3975 break;
3976
Reid Spencer218ded22007-01-05 17:07:23 +00003977 case 156:
3978#line 1655 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00003979 {
Reid Spencer14310612006-12-31 05:40:51 +00003980 if (!UpRefs.empty())
3981 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00003982 Constant *Val = (yyvsp[-3].ConstVal);
3983 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00003984 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003985 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003986 Val->getType()->getDescription() + "'!");
3987 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003988 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003989 Ty->getDescription() + "'!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00003990 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
3991 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00003992 ;}
3993 break;
3994
Reid Spencer218ded22007-01-05 17:07:23 +00003995 case 157:
3996#line 1669 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003997 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00003998 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Andrew Lenharth6353e052006-12-08 18:07:09 +00003999 GEN_ERROR("GetElementPtr requires a pointer operand!");
4000
4001 const Type *IdxTy =
Reid Spencere4d87aa2006-12-23 06:05:41 +00004002 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004003 if (!IdxTy)
4004 GEN_ERROR("Index list invalid for constant getelementptr!");
4005
4006 std::vector<Constant*> IdxVec;
Reid Spencere4d87aa2006-12-23 06:05:41 +00004007 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4008 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Andrew Lenharth6353e052006-12-08 18:07:09 +00004009 IdxVec.push_back(C);
4010 else
4011 GEN_ERROR("Indices to constant getelementptr must be constants!");
4012
Reid Spencere4d87aa2006-12-23 06:05:41 +00004013 delete (yyvsp[-1].ValueList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004014
Reid Spencere4d87aa2006-12-23 06:05:41 +00004015 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
4016 CHECK_FOR_ERROR
4017 ;}
4018 break;
4019
Reid Spencer218ded22007-01-05 17:07:23 +00004020 case 158:
4021#line 1690 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004022 {
4023 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
4024 GEN_ERROR("Select condition must be of boolean type!");
4025 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4026 GEN_ERROR("Select operand types must match!");
4027 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4028 CHECK_FOR_ERROR
4029 ;}
4030 break;
4031
Reid Spencer218ded22007-01-05 17:07:23 +00004032 case 159:
4033#line 1698 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004034 {
4035 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4036 GEN_ERROR("Binary operator types must match!");
4037 CHECK_FOR_ERROR;
4038 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4039 ;}
4040 break;
4041
Reid Spencer218ded22007-01-05 17:07:23 +00004042 case 160:
4043#line 1704 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004044 {
4045 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4046 GEN_ERROR("Logical operator types must match!");
4047 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4048 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4049 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
4050 GEN_ERROR("Logical operator requires integral operands!");
4051 }
4052 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4053 CHECK_FOR_ERROR
4054 ;}
4055 break;
4056
Reid Spencer218ded22007-01-05 17:07:23 +00004057 case 161:
4058#line 1715 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004059 {
4060 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4061 GEN_ERROR("icmp operand types must match!");
4062 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4063 ;}
4064 break;
4065
Reid Spencer218ded22007-01-05 17:07:23 +00004066 case 162:
4067#line 1720 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004068 {
4069 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4070 GEN_ERROR("fcmp operand types must match!");
4071 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4072 ;}
4073 break;
4074
Reid Spencer218ded22007-01-05 17:07:23 +00004075 case 163:
4076#line 1725 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004077 {
Reid Spencer14310612006-12-31 05:40:51 +00004078 if ((yyvsp[-1].ConstVal)->getType() != Type::Int8Ty)
4079 GEN_ERROR("Shift count for shift constant must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004080 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
4081 GEN_ERROR("Shift constant expression requires integer operand!");
4082 CHECK_FOR_ERROR;
4083 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004084 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004085 ;}
4086 break;
4087
Reid Spencer218ded22007-01-05 17:07:23 +00004088 case 164:
4089#line 1734 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004090 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004091 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4092 GEN_ERROR("Invalid extractelement operands!");
4093 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004094 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004095 ;}
4096 break;
4097
Reid Spencer218ded22007-01-05 17:07:23 +00004098 case 165:
4099#line 1740 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004100 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004101 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4102 GEN_ERROR("Invalid insertelement operands!");
4103 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4104 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004105 ;}
4106 break;
4107
Reid Spencer218ded22007-01-05 17:07:23 +00004108 case 166:
4109#line 1746 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004110 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004111 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
4112 GEN_ERROR("Invalid shufflevector operands!");
4113 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004114 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004115 ;}
4116 break;
4117
Reid Spencer218ded22007-01-05 17:07:23 +00004118 case 167:
4119#line 1755 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004120 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004121 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004122 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004123 ;}
4124 break;
4125
Reid Spencer218ded22007-01-05 17:07:23 +00004126 case 168:
4127#line 1759 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004128 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004129 (yyval.ConstVector) = new std::vector<Constant*>();
4130 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
4131 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004132 ;}
4133 break;
4134
Reid Spencer218ded22007-01-05 17:07:23 +00004135 case 169:
4136#line 1767 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004137 { (yyval.BoolVal) = false; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004138 break;
4139
Reid Spencer218ded22007-01-05 17:07:23 +00004140 case 170:
4141#line 1767 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004142 { (yyval.BoolVal) = true; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004143 break;
4144
Reid Spencer14310612006-12-31 05:40:51 +00004145 case 171:
Reid Spencer218ded22007-01-05 17:07:23 +00004146#line 1778 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004147 {
4148 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4149 CurModule.ModuleDone();
4150 CHECK_FOR_ERROR;
4151 ;}
4152 break;
4153
Reid Spencer218ded22007-01-05 17:07:23 +00004154 case 172:
4155#line 1783 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4156 {
4157 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
4158 CurModule.ModuleDone();
4159 CHECK_FOR_ERROR;
4160 ;}
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004161 break;
4162
Reid Spencer14310612006-12-31 05:40:51 +00004163 case 175:
Reid Spencer218ded22007-01-05 17:07:23 +00004164#line 1796 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4165 { CurFun.isDeclare = false ;}
4166 break;
4167
4168 case 176:
4169#line 1796 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004170 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004171 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004172 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004173 ;}
4174 break;
4175
Reid Spencer218ded22007-01-05 17:07:23 +00004176 case 177:
4177#line 1800 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004178 { CurFun.isDeclare = true; ;}
4179 break;
4180
Reid Spencer14310612006-12-31 05:40:51 +00004181 case 178:
Reid Spencer218ded22007-01-05 17:07:23 +00004182#line 1800 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004183 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00004184 CHECK_FOR_ERROR
4185 ;}
4186 break;
4187
Reid Spencer14310612006-12-31 05:40:51 +00004188 case 179:
Reid Spencer218ded22007-01-05 17:07:23 +00004189#line 1803 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4190 {
4191 CHECK_FOR_ERROR
4192 ;}
4193 break;
4194
4195 case 180:
4196#line 1806 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004197 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004198 // Emit an error if there are any unresolved types left.
4199 if (!CurModule.LateResolveTypes.empty()) {
4200 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004201 if (DID.Type == ValID::NameVal) {
4202 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4203 } else {
4204 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4205 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004206 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004207 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004208 ;}
4209 break;
4210
Reid Spencer218ded22007-01-05 17:07:23 +00004211 case 181:
4212#line 1818 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004213 {
Reid Spencer14310612006-12-31 05:40:51 +00004214 if (!UpRefs.empty())
4215 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004216 // Eagerly resolve types. This is not an optimization, this is a
4217 // requirement that is due to the fact that we could have this:
4218 //
4219 // %list = type { %list * }
4220 // %list = type { %list * } ; repeated type decl
4221 //
4222 // If types are not resolved eagerly, then the two types will not be
4223 // determined to be the same type!
4224 //
Reid Spencere4d87aa2006-12-23 06:05:41 +00004225 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004226
Reid Spencere4d87aa2006-12-23 06:05:41 +00004227 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004228 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004229 // If this is a named type that is not a redefinition, add it to the slot
4230 // table.
Reid Spencere4d87aa2006-12-23 06:05:41 +00004231 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004232 }
Reid Spencera132e042006-12-03 05:46:11 +00004233
Reid Spencere4d87aa2006-12-23 06:05:41 +00004234 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004235 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004236 ;}
4237 break;
4238
Reid Spencer218ded22007-01-05 17:07:23 +00004239 case 182:
4240#line 1842 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00004241 {
4242 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4243
4244 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
4245 CHECK_FOR_ERROR
4246 // If this is a named type that is not a redefinition, add it to the slot
4247 // table.
4248 CurModule.Types.push_back((yyvsp[0].PrimType));
4249 }
4250 CHECK_FOR_ERROR
4251 ;}
4252 break;
4253
Reid Spencer218ded22007-01-05 17:07:23 +00004254 case 183:
4255#line 1853 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004256 { /* "Externally Visible" Linkage */
4257 if ((yyvsp[0].ConstVal) == 0)
4258 GEN_ERROR("Global value initializer is not a constant!");
4259 CurGV = ParseGlobalVariable((yyvsp[-2].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal),
4260 (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004261 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004262 ;}
4263 break;
4264
Reid Spencer218ded22007-01-05 17:07:23 +00004265 case 184:
4266#line 1859 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004267 {
4268 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004269 ;}
4270 break;
4271
Reid Spencer218ded22007-01-05 17:07:23 +00004272 case 185:
4273#line 1862 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004274 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004275 if ((yyvsp[0].ConstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00004276 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00004277 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
4278 CHECK_FOR_ERROR
4279 ;}
4280 break;
4281
Reid Spencer218ded22007-01-05 17:07:23 +00004282 case 186:
4283#line 1867 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004284 {
4285 CurGV = 0;
4286 ;}
4287 break;
4288
Reid Spencer218ded22007-01-05 17:07:23 +00004289 case 187:
4290#line 1870 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004291 {
Reid Spencer14310612006-12-31 05:40:51 +00004292 if (!UpRefs.empty())
4293 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004294 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004295 CHECK_FOR_ERROR
4296 delete (yyvsp[0].TypeVal);
4297 ;}
4298 break;
4299
Reid Spencer218ded22007-01-05 17:07:23 +00004300 case 188:
4301#line 1876 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004302 {
4303 CurGV = 0;
4304 CHECK_FOR_ERROR
4305 ;}
4306 break;
4307
Reid Spencer14310612006-12-31 05:40:51 +00004308 case 189:
Reid Spencer218ded22007-01-05 17:07:23 +00004309#line 1880 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4310 {
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004311 CHECK_FOR_ERROR
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004312 ;}
4313 break;
4314
Reid Spencer14310612006-12-31 05:40:51 +00004315 case 190:
Reid Spencere68853b2007-01-04 00:06:14 +00004316#line 1883 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004317 {
Reid Spencer218ded22007-01-05 17:07:23 +00004318 CHECK_FOR_ERROR
4319 ;}
4320 break;
4321
4322 case 191:
4323#line 1889 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4324 {
Chris Lattner66316012006-01-24 04:14:29 +00004325 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencere4d87aa2006-12-23 06:05:41 +00004326 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4327 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4328 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004329
4330 if (AsmSoFar.empty())
4331 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4332 else
4333 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004334 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004335;}
4336 break;
4337
Reid Spencer218ded22007-01-05 17:07:23 +00004338 case 192:
4339#line 1902 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004340 { (yyval.Endianness) = Module::BigEndian; ;}
4341 break;
4342
Reid Spencer218ded22007-01-05 17:07:23 +00004343 case 193:
4344#line 1903 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004345 { (yyval.Endianness) = Module::LittleEndian; ;}
4346 break;
4347
Reid Spencer218ded22007-01-05 17:07:23 +00004348 case 194:
4349#line 1905 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004350 {
4351 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
4352 CHECK_FOR_ERROR
4353 ;}
4354 break;
4355
Reid Spencer218ded22007-01-05 17:07:23 +00004356 case 195:
4357#line 1909 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004358 {
4359 if ((yyvsp[0].UInt64Val) == 32)
4360 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
4361 else if ((yyvsp[0].UInt64Val) == 64)
4362 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4363 else
4364 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
4365 CHECK_FOR_ERROR
4366 ;}
4367 break;
4368
Reid Spencer218ded22007-01-05 17:07:23 +00004369 case 196:
4370#line 1918 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004371 {
4372 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4373 free((yyvsp[0].StrVal));
4374 ;}
4375 break;
4376
Reid Spencer218ded22007-01-05 17:07:23 +00004377 case 197:
4378#line 1922 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004379 {
4380 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4381 free((yyvsp[0].StrVal));
4382 ;}
4383 break;
4384
Reid Spencer14310612006-12-31 05:40:51 +00004385 case 199:
Reid Spencer218ded22007-01-05 17:07:23 +00004386#line 1929 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004387 {
4388 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4389 free((yyvsp[0].StrVal));
4390 CHECK_FOR_ERROR
4391 ;}
4392 break;
4393
Reid Spencer14310612006-12-31 05:40:51 +00004394 case 200:
Reid Spencer218ded22007-01-05 17:07:23 +00004395#line 1934 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
4396 {
4397 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4398 free((yyvsp[0].StrVal));
4399 CHECK_FOR_ERROR
4400 ;}
4401 break;
4402
4403 case 201:
4404#line 1939 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004405 {
4406 CHECK_FOR_ERROR
4407 ;}
4408 break;
4409
Reid Spencer218ded22007-01-05 17:07:23 +00004410 case 205:
4411#line 1949 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6fd36ab2006-12-29 20:35:03 +00004412 { (yyval.StrVal) = 0; ;}
4413 break;
4414
Reid Spencer218ded22007-01-05 17:07:23 +00004415 case 206:
4416#line 1951 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004417 {
Reid Spencer14310612006-12-31 05:40:51 +00004418 if (!UpRefs.empty())
4419 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4420 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4421 GEN_ERROR("void typed arguments are invalid!");
4422 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4423 (yyval.ArgList) = (yyvsp[-4].ArgList);
4424 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004425 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004426 ;}
4427 break;
4428
Reid Spencer218ded22007-01-05 17:07:23 +00004429 case 207:
4430#line 1961 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004431 {
Reid Spencer14310612006-12-31 05:40:51 +00004432 if (!UpRefs.empty())
4433 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4434 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
4435 GEN_ERROR("void typed arguments are invalid!");
4436 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4437 (yyval.ArgList) = new ArgListType;
4438 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004439 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004440 ;}
4441 break;
4442
Reid Spencer218ded22007-01-05 17:07:23 +00004443 case 208:
4444#line 1972 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004445 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004446 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004447 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004448 ;}
4449 break;
4450
Reid Spencer218ded22007-01-05 17:07:23 +00004451 case 209:
4452#line 1976 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004453 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004454 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencer14310612006-12-31 05:40:51 +00004455 struct ArgListEntry E;
4456 E.Ty = new PATypeHolder(Type::VoidTy);
4457 E.Name = 0;
4458 E.Attrs = FunctionType::NoAttributeSet;
4459 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004460 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004461 ;}
4462 break;
4463
Reid Spencer218ded22007-01-05 17:07:23 +00004464 case 210:
4465#line 1985 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004466 {
Reid Spencer14310612006-12-31 05:40:51 +00004467 (yyval.ArgList) = new ArgListType;
4468 struct ArgListEntry E;
4469 E.Ty = new PATypeHolder(Type::VoidTy);
4470 E.Name = 0;
4471 E.Attrs = FunctionType::NoAttributeSet;
4472 (yyval.ArgList)->push_back(E);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004473 CHECK_FOR_ERROR
4474 ;}
4475 break;
4476
Reid Spencer218ded22007-01-05 17:07:23 +00004477 case 211:
4478#line 1994 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004479 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004480 (yyval.ArgList) = 0;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004481 CHECK_FOR_ERROR
4482 ;}
4483 break;
4484
Reid Spencer218ded22007-01-05 17:07:23 +00004485 case 212:
4486#line 2000 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004487 {
Reid Spencer218ded22007-01-05 17:07:23 +00004488 UnEscapeLexed((yyvsp[-6].StrVal));
4489 std::string FunctionName((yyvsp[-6].StrVal));
4490 free((yyvsp[-6].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004491
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004492 // Check the function result for abstractness if this is a define. We should
4493 // have no abstract types at this point
Reid Spencer218ded22007-01-05 17:07:23 +00004494 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4495 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004496
Reid Spencer68a24bd2005-08-27 18:50:39 +00004497 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00004498 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00004499 ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
4500 if ((yyvsp[-4].ArgList)) { // If there are arguments...
4501 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004502 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004503 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4504 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004505 ParamTypeList.push_back(Ty);
4506 if (Ty != Type::VoidTy)
4507 ParamAttrs.push_back(I->Attrs);
4508 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004509 }
4510
4511 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4512 if (isVarArg) ParamTypeList.pop_back();
4513
Reid Spencer218ded22007-01-05 17:07:23 +00004514 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00004515 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004516 const PointerType *PFT = PointerType::get(FT);
Reid Spencer218ded22007-01-05 17:07:23 +00004517 delete (yyvsp[-7].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004518
4519 ValID ID;
4520 if (!FunctionName.empty()) {
4521 ID = ValID::create((char*)FunctionName.c_str());
4522 } else {
4523 ID = ValID::create((int)CurModule.Values[PFT].size());
4524 }
4525
4526 Function *Fn = 0;
4527 // See if this function was forward referenced. If so, recycle the object.
4528 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4529 // Move the function to the end of the list, from whereever it was
4530 // previously inserted.
4531 Fn = cast<Function>(FWRef);
4532 CurModule.CurrentModule->getFunctionList().remove(Fn);
4533 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4534 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4535 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4536 // If this is the case, either we need to be a forward decl, or it needs
4537 // to be.
4538 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004539 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004540
4541 // Make sure to strip off any argument names so we can't get conflicts.
4542 if (Fn->isExternal())
4543 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4544 AI != AE; ++AI)
4545 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004546 } else { // Not already defined?
4547 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4548 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004549
Reid Spencer68a24bd2005-08-27 18:50:39 +00004550 InsertValue(Fn, CurModule.Values);
4551 }
4552
4553 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004554
4555 if (CurFun.isDeclare) {
4556 // If we have declaration, always overwrite linkage. This will allow us to
4557 // correctly handle cases, when pointer to function is passed as argument to
4558 // another function.
4559 Fn->setLinkage(CurFun.Linkage);
4560 }
Reid Spencer218ded22007-01-05 17:07:23 +00004561 Fn->setCallingConv((yyvsp[-8].UIntVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004562 Fn->setAlignment((yyvsp[0].UIntVal));
4563 if ((yyvsp[-1].StrVal)) {
4564 Fn->setSection((yyvsp[-1].StrVal));
4565 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004566 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004567
4568 // Add all of the arguments we parsed to the function...
Reid Spencer218ded22007-01-05 17:07:23 +00004569 if ((yyvsp[-4].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004570 if (isVarArg) { // Nuke the last entry
Reid Spencer218ded22007-01-05 17:07:23 +00004571 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0&&
Reid Spencera132e042006-12-03 05:46:11 +00004572 "Not a varargs marker!");
Reid Spencer218ded22007-01-05 17:07:23 +00004573 delete (yyvsp[-4].ArgList)->back().Ty;
4574 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004575 }
4576 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencer14310612006-12-31 05:40:51 +00004577 unsigned Idx = 1;
Reid Spencer218ded22007-01-05 17:07:23 +00004578 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004579 delete I->Ty; // Delete the typeholder...
4580 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004581 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004582 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004583 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004584 }
Reid Spencera132e042006-12-03 05:46:11 +00004585
Reid Spencer218ded22007-01-05 17:07:23 +00004586 delete (yyvsp[-4].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004587 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004588 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004589;}
4590 break;
4591
Reid Spencer218ded22007-01-05 17:07:23 +00004592 case 215:
4593#line 2106 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004594 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004595 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004596
4597 // Make sure that we keep track of the linkage type even if there was a
4598 // previous "declare".
Reid Spencere4d87aa2006-12-23 06:05:41 +00004599 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
Reid Spencer3822ff52006-11-08 06:47:33 +00004600;}
4601 break;
4602
Reid Spencer218ded22007-01-05 17:07:23 +00004603 case 218:
4604#line 2116 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004605 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004606 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004607 CHECK_FOR_ERROR
4608;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004609 break;
4610
Reid Spencer218ded22007-01-05 17:07:23 +00004611 case 219:
4612#line 2121 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004613 {
Reid Spencer14310612006-12-31 05:40:51 +00004614 CurFun.CurrentFunction->setLinkage((yyvsp[-1].Linkage));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004615 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004616 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004617 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004618 ;}
4619 break;
4620
Reid Spencer218ded22007-01-05 17:07:23 +00004621 case 220:
4622#line 2132 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004623 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004624 (yyval.BoolVal) = false;
4625 CHECK_FOR_ERROR
4626 ;}
4627 break;
4628
Reid Spencer218ded22007-01-05 17:07:23 +00004629 case 221:
4630#line 2136 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004631 {
4632 (yyval.BoolVal) = true;
4633 CHECK_FOR_ERROR
4634 ;}
4635 break;
4636
Reid Spencer218ded22007-01-05 17:07:23 +00004637 case 222:
4638#line 2141 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004639 { // A reference to a direct constant
4640 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
4641 CHECK_FOR_ERROR
4642 ;}
4643 break;
4644
Reid Spencer218ded22007-01-05 17:07:23 +00004645 case 223:
4646#line 2145 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004647 {
4648 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
4649 CHECK_FOR_ERROR
4650 ;}
4651 break;
4652
Reid Spencer218ded22007-01-05 17:07:23 +00004653 case 224:
4654#line 2149 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004655 { // Perhaps it's an FP constant?
4656 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
4657 CHECK_FOR_ERROR
4658 ;}
4659 break;
4660
Reid Spencer218ded22007-01-05 17:07:23 +00004661 case 225:
4662#line 2153 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004663 {
4664 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
4665 CHECK_FOR_ERROR
4666 ;}
4667 break;
4668
Reid Spencer218ded22007-01-05 17:07:23 +00004669 case 226:
4670#line 2157 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004671 {
4672 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
4673 CHECK_FOR_ERROR
4674 ;}
4675 break;
4676
Reid Spencer218ded22007-01-05 17:07:23 +00004677 case 227:
4678#line 2161 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004679 {
4680 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004681 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004682 ;}
4683 break;
4684
Reid Spencer218ded22007-01-05 17:07:23 +00004685 case 228:
4686#line 2165 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004687 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004688 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004689 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004690 ;}
4691 break;
4692
Reid Spencer218ded22007-01-05 17:07:23 +00004693 case 229:
4694#line 2169 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004695 { // A vector zero constant.
4696 (yyval.ValIDVal) = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004697 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004698 ;}
4699 break;
4700
Reid Spencer218ded22007-01-05 17:07:23 +00004701 case 230:
4702#line 2173 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004703 { // Nonempty unsized packed vector
Reid Spencere4d87aa2006-12-23 06:05:41 +00004704 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
4705 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004706
4707 PackedType* pt = PackedType::get(ETy, NumElements);
4708 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004709 HandleUpRefs(
4710 PackedType::get(
4711 ETy,
4712 NumElements)
4713 )
4714 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004715
4716 // Verify all elements are correct type!
Reid Spencere4d87aa2006-12-23 06:05:41 +00004717 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4718 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004719 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004720 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00004721 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004722 }
4723
Reid Spencere4d87aa2006-12-23 06:05:41 +00004724 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
4725 delete PTy; delete (yyvsp[-1].ConstVector);
4726 CHECK_FOR_ERROR
4727 ;}
4728 break;
4729
Reid Spencer218ded22007-01-05 17:07:23 +00004730 case 231:
4731#line 2198 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004732 {
4733 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
4734 CHECK_FOR_ERROR
4735 ;}
4736 break;
4737
Reid Spencer218ded22007-01-05 17:07:23 +00004738 case 232:
4739#line 2202 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004740 {
4741 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4742 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4743 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4744 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4745 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4746 free((yyvsp[-2].StrVal));
4747 free((yyvsp[0].StrVal));
4748 CHECK_FOR_ERROR
4749 ;}
4750 break;
4751
Reid Spencer218ded22007-01-05 17:07:23 +00004752 case 233:
4753#line 2216 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004754 { // Is it an integer reference...?
4755 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4756 CHECK_FOR_ERROR
4757 ;}
4758 break;
4759
Reid Spencer218ded22007-01-05 17:07:23 +00004760 case 234:
4761#line 2220 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004762 { // Is it a named reference...?
4763 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4764 CHECK_FOR_ERROR
4765 ;}
4766 break;
4767
Reid Spencer218ded22007-01-05 17:07:23 +00004768 case 237:
4769#line 2232 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004770 {
Reid Spencer14310612006-12-31 05:40:51 +00004771 if (!UpRefs.empty())
4772 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4773 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
4774 delete (yyvsp[-1].TypeVal);
Reid Spencer21be8652006-10-22 07:03:43 +00004775 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004776 ;}
4777 break;
4778
Reid Spencer218ded22007-01-05 17:07:23 +00004779 case 238:
4780#line 2241 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00004781 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004782 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004783 CHECK_FOR_ERROR
4784 ;}
4785 break;
4786
Reid Spencer218ded22007-01-05 17:07:23 +00004787 case 239:
4788#line 2245 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004789 { // Do not allow functions with 0 basic blocks
4790 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004791 CHECK_FOR_ERROR
4792 ;}
4793 break;
4794
Reid Spencer218ded22007-01-05 17:07:23 +00004795 case 240:
4796#line 2254 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004797 {
4798 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4799 CHECK_FOR_ERROR
4800 InsertValue((yyvsp[0].TermInstVal));
4801
4802 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4803 InsertValue((yyvsp[-2].BasicBlockVal));
4804 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004805 CHECK_FOR_ERROR
4806 ;}
4807 break;
4808
Reid Spencer218ded22007-01-05 17:07:23 +00004809 case 241:
4810#line 2265 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004811 {
4812 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4813 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4814 if (CI2->getParent() == 0)
4815 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
4816 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4817 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4818 CHECK_FOR_ERROR
4819 ;}
4820 break;
4821
Reid Spencer218ded22007-01-05 17:07:23 +00004822 case 242:
4823#line 2274 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004824 {
4825 (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
4826 CHECK_FOR_ERROR
4827
4828 // Make sure to move the basic block to the correct location in the
4829 // function, instead of leaving it inserted wherever it was first
4830 // referenced.
4831 Function::BasicBlockListType &BBL =
4832 CurFun.CurrentFunction->getBasicBlockList();
4833 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
4834 CHECK_FOR_ERROR
4835 ;}
4836 break;
4837
Reid Spencer218ded22007-01-05 17:07:23 +00004838 case 243:
4839#line 2286 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004840 {
4841 (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
4842 CHECK_FOR_ERROR
4843
4844 // Make sure to move the basic block to the correct location in the
4845 // function, instead of leaving it inserted wherever it was first
4846 // referenced.
4847 Function::BasicBlockListType &BBL =
4848 CurFun.CurrentFunction->getBasicBlockList();
4849 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004850 CHECK_FOR_ERROR
4851 ;}
4852 break;
4853
Reid Spencer218ded22007-01-05 17:07:23 +00004854 case 244:
4855#line 2299 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004856 { // Return with a result...
4857 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004858 CHECK_FOR_ERROR
4859 ;}
4860 break;
4861
Reid Spencer218ded22007-01-05 17:07:23 +00004862 case 245:
4863#line 2303 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004864 { // Return with no result...
4865 (yyval.TermInstVal) = new ReturnInst();
Reid Spencer3822ff52006-11-08 06:47:33 +00004866 CHECK_FOR_ERROR
4867 ;}
4868 break;
4869
Reid Spencer218ded22007-01-05 17:07:23 +00004870 case 246:
4871#line 2307 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004872 { // Unconditional Branch...
4873 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004874 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004875 (yyval.TermInstVal) = new BranchInst(tmpBB);
Reid Spencer3822ff52006-11-08 06:47:33 +00004876 ;}
4877 break;
4878
Reid Spencer218ded22007-01-05 17:07:23 +00004879 case 247:
4880#line 2312 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00004881 {
4882 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004883 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004884 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004885 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004886 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4887 CHECK_FOR_ERROR
4888 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004889 ;}
4890 break;
4891
Reid Spencer218ded22007-01-05 17:07:23 +00004892 case 248:
4893#line 2321 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004894 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004895 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004896 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004897 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4898 CHECK_FOR_ERROR
4899 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4900 (yyval.TermInstVal) = S;
Andrew Lenharth6353e052006-12-08 18:07:09 +00004901
Reid Spencere4d87aa2006-12-23 06:05:41 +00004902 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4903 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004904 for (; I != E; ++I) {
4905 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4906 S->addCase(CI, I->second);
4907 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004908 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004909 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00004910 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004911 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004912 ;}
4913 break;
4914
Reid Spencer218ded22007-01-05 17:07:23 +00004915 case 249:
4916#line 2340 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004917 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00004918 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004919 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004920 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004921 CHECK_FOR_ERROR
4922 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004923 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004924 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004925 ;}
4926 break;
4927
Reid Spencer218ded22007-01-05 17:07:23 +00004928 case 250:
4929#line 2350 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004930 {
Reid Spencer3822ff52006-11-08 06:47:33 +00004931
Reid Spencer14310612006-12-31 05:40:51 +00004932 // Handle the short syntax
4933 const PointerType *PFTy = 0;
4934 const FunctionType *Ty = 0;
Reid Spencer218ded22007-01-05 17:07:23 +00004935 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004936 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4937 // Pull out the types of all of the arguments...
4938 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00004939 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00004940 ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
4941 for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004942 const Type *Ty = I->Val->getType();
4943 if (Ty == Type::VoidTy)
4944 GEN_ERROR("Short call syntax cannot be used with varargs");
4945 ParamTypes.push_back(Ty);
4946 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004947 }
4948
Reid Spencer218ded22007-01-05 17:07:23 +00004949 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004950 PFTy = PointerType::get(Ty);
4951 }
4952
Reid Spencer218ded22007-01-05 17:07:23 +00004953 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00004954 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004955 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00004956 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00004957 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004958 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004959
Reid Spencer14310612006-12-31 05:40:51 +00004960 // Check the arguments
4961 ValueList Args;
Reid Spencer218ded22007-01-05 17:07:23 +00004962 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00004963 // Make sure no arguments is a good thing!
4964 if (Ty->getNumParams() != 0)
4965 GEN_ERROR("No arguments passed to a function that "
4966 "expects arguments!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004967 } else { // Has arguments?
4968 // Loop through FunctionType's arguments and ensure they are specified
4969 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004970 FunctionType::param_iterator I = Ty->param_begin();
4971 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer218ded22007-01-05 17:07:23 +00004972 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004973
Reid Spencer14310612006-12-31 05:40:51 +00004974 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4975 if (ArgI->Val->getType() != *I)
4976 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004977 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00004978 Args.push_back(ArgI->Val);
4979 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004980
Reid Spencer14310612006-12-31 05:40:51 +00004981 if (Ty->isVarArg()) {
4982 if (I == E)
4983 for (; ArgI != ArgE; ++ArgI)
4984 Args.push_back(ArgI->Val); // push the remaining varargs
4985 } else if (I != E || ArgI != ArgE)
Reid Spencer61c83e02006-08-18 08:43:06 +00004986 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004987 }
Reid Spencer14310612006-12-31 05:40:51 +00004988
4989 // Create the InvokeInst
4990 InvokeInst *II = new InvokeInst(V, Normal, Except, Args);
Reid Spencer218ded22007-01-05 17:07:23 +00004991 II->setCallingConv((yyvsp[-12].UIntVal));
Reid Spencer14310612006-12-31 05:40:51 +00004992 (yyval.TermInstVal) = II;
Reid Spencer218ded22007-01-05 17:07:23 +00004993 delete (yyvsp[-8].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00004994 CHECK_FOR_ERROR
4995 ;}
4996 break;
4997
Reid Spencer218ded22007-01-05 17:07:23 +00004998 case 251:
4999#line 2416 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005000 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005001 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005002 CHECK_FOR_ERROR
5003 ;}
5004 break;
5005
Reid Spencer218ded22007-01-05 17:07:23 +00005006 case 252:
5007#line 2420 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005008 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005009 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005010 CHECK_FOR_ERROR
5011 ;}
5012 break;
5013
Reid Spencer218ded22007-01-05 17:07:23 +00005014 case 253:
5015#line 2427 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005016 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005017 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5018 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005019 CHECK_FOR_ERROR
5020 if (V == 0)
5021 GEN_ERROR("May only switch on a constant pool value!");
5022
Reid Spencere4d87aa2006-12-23 06:05:41 +00005023 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005024 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005025 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005026 ;}
5027 break;
5028
Reid Spencer218ded22007-01-05 17:07:23 +00005029 case 254:
5030#line 2438 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005031 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005032 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5033 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005034 CHECK_FOR_ERROR
5035
5036 if (V == 0)
5037 GEN_ERROR("May only switch on a constant pool value!");
5038
Reid Spencere4d87aa2006-12-23 06:05:41 +00005039 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005040 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005041 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005042 ;}
5043 break;
5044
Reid Spencer218ded22007-01-05 17:07:23 +00005045 case 255:
5046#line 2451 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005047 {
5048 // Is this definition named?? if so, assign the name...
Reid Spencere4d87aa2006-12-23 06:05:41 +00005049 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005050 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005051 InsertValue((yyvsp[0].InstVal));
5052 (yyval.InstVal) = (yyvsp[0].InstVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005053 CHECK_FOR_ERROR
5054;}
5055 break;
5056
Reid Spencer218ded22007-01-05 17:07:23 +00005057 case 256:
5058#line 2460 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005059 { // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00005060 if (!UpRefs.empty())
5061 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005062 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5063 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005064 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005065 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005066 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005067 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5068 delete (yyvsp[-5].TypeVal);
5069 ;}
5070 break;
5071
Reid Spencer218ded22007-01-05 17:07:23 +00005072 case 257:
5073#line 2471 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005074 {
5075 (yyval.PHIList) = (yyvsp[-6].PHIList);
5076 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
5077 CHECK_FOR_ERROR
5078 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
5079 CHECK_FOR_ERROR
5080 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5081 ;}
5082 break;
5083
Reid Spencer218ded22007-01-05 17:07:23 +00005084 case 258:
5085#line 2481 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005086 {
5087 if (!UpRefs.empty())
5088 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5089 // Used for call and invoke instructions
5090 (yyval.ValueRefList) = new ValueRefList();
5091 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5092 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005093 ;}
5094 break;
5095
Reid Spencer218ded22007-01-05 17:07:23 +00005096 case 259:
5097#line 2489 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005098 {
Reid Spencer14310612006-12-31 05:40:51 +00005099 if (!UpRefs.empty())
5100 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5101 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5102 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5103 (yyval.ValueRefList)->push_back(E);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005104 CHECK_FOR_ERROR
5105 ;}
5106 break;
5107
Reid Spencer218ded22007-01-05 17:07:23 +00005108 case 260:
5109#line 2497 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005110 { (yyval.ValueRefList) = new ValueRefList(); ;}
Reid Spencere4d87aa2006-12-23 06:05:41 +00005111 break;
5112
Reid Spencer218ded22007-01-05 17:07:23 +00005113 case 261:
5114#line 2500 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005115 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5116 break;
5117
Reid Spencer218ded22007-01-05 17:07:23 +00005118 case 262:
5119#line 2501 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer14310612006-12-31 05:40:51 +00005120 {
5121 (yyval.ValueList) = (yyvsp[-2].ValueList);
5122 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5123 CHECK_FOR_ERROR
5124 ;}
5125 break;
5126
Reid Spencer218ded22007-01-05 17:07:23 +00005127 case 263:
5128#line 2508 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005129 {
5130 (yyval.BoolVal) = true;
5131 CHECK_FOR_ERROR
5132 ;}
5133 break;
5134
Reid Spencer218ded22007-01-05 17:07:23 +00005135 case 264:
5136#line 2512 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005137 {
5138 (yyval.BoolVal) = false;
5139 CHECK_FOR_ERROR
Andrew Lenharth6353e052006-12-08 18:07:09 +00005140 ;}
5141 break;
5142
Reid Spencer218ded22007-01-05 17:07:23 +00005143 case 265:
5144#line 2517 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005145 {
Reid Spencer14310612006-12-31 05:40:51 +00005146 if (!UpRefs.empty())
5147 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005148 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5149 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5150 GEN_ERROR(
5151 "Arithmetic operator requires integer, FP, or packed operands!");
5152 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5153 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5154 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5155 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
5156 GEN_ERROR("U/S/FRem not supported on packed types!");
5157 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005158 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005159 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005160 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005161 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5162 if ((yyval.InstVal) == 0)
5163 GEN_ERROR("binary operator returned null!");
5164 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005165 ;}
5166 break;
5167
Reid Spencer218ded22007-01-05 17:07:23 +00005168 case 266:
5169#line 2538 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005170 {
Reid Spencer14310612006-12-31 05:40:51 +00005171 if (!UpRefs.empty())
5172 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005173 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5174 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5175 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
5176 GEN_ERROR("Logical operator requires integral operands!");
5177 }
5178 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5179 CHECK_FOR_ERROR
5180 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5181 CHECK_FOR_ERROR
5182 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5183 if ((yyval.InstVal) == 0)
5184 GEN_ERROR("binary operator returned null!");
5185 delete (yyvsp[-3].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005186 ;}
5187 break;
5188
Reid Spencer218ded22007-01-05 17:07:23 +00005189 case 267:
5190#line 2555 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005191 {
Reid Spencer14310612006-12-31 05:40:51 +00005192 if (!UpRefs.empty())
5193 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005194 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5195 GEN_ERROR("Packed types not supported by icmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005196 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005197 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005198 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005199 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005200 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5201 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005202 GEN_ERROR("icmp operator returned null!");
5203 ;}
5204 break;
5205
Reid Spencer218ded22007-01-05 17:07:23 +00005206 case 268:
5207#line 2568 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005208 {
Reid Spencer14310612006-12-31 05:40:51 +00005209 if (!UpRefs.empty())
5210 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
Reid Spencerac4a1dd2007-01-04 02:57:52 +00005211 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5212 GEN_ERROR("Packed types not supported by fcmp instruction");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005213 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005214 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005215 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005216 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005217 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5218 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005219 GEN_ERROR("fcmp operator returned null!");
5220 ;}
5221 break;
5222
Reid Spencer218ded22007-01-05 17:07:23 +00005223 case 269:
5224#line 2581 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005225 {
5226 cerr << "WARNING: Use of eliminated 'not' instruction:"
5227 << " Replacing with 'xor'.\n";
5228
Reid Spencere4d87aa2006-12-23 06:05:41 +00005229 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Andrew Lenharth6353e052006-12-08 18:07:09 +00005230 if (Ones == 0)
5231 GEN_ERROR("Expected integral type for not instruction!");
5232
Reid Spencere4d87aa2006-12-23 06:05:41 +00005233 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
5234 if ((yyval.InstVal) == 0)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005235 GEN_ERROR("Could not create a xor instruction!");
5236 CHECK_FOR_ERROR
5237 ;}
5238 break;
5239
Reid Spencer218ded22007-01-05 17:07:23 +00005240 case 270:
5241#line 2594 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005242 {
Reid Spencer14310612006-12-31 05:40:51 +00005243 if ((yyvsp[0].ValueVal)->getType() != Type::Int8Ty)
5244 GEN_ERROR("Shift amount must be i8 type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005245 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005246 GEN_ERROR("Shift constant expression requires integer operand!");
5247 CHECK_FOR_ERROR;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005248 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005249 CHECK_FOR_ERROR
5250 ;}
5251 break;
5252
Reid Spencer218ded22007-01-05 17:07:23 +00005253 case 271:
5254#line 2603 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005255 {
Reid Spencer14310612006-12-31 05:40:51 +00005256 if (!UpRefs.empty())
5257 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005258 Value* Val = (yyvsp[-2].ValueVal);
5259 const Type* Ty = (yyvsp[0].TypeVal)->get();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005260 if (!Val->getType()->isFirstClassType())
5261 GEN_ERROR("cast from a non-primitive type: '" +
5262 Val->getType()->getDescription() + "'!");
5263 if (!Ty->isFirstClassType())
5264 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencer14310612006-12-31 05:40:51 +00005265 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, (yyvsp[0].TypeVal)->get());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005266 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005267 ;}
5268 break;
5269
Reid Spencer218ded22007-01-05 17:07:23 +00005270 case 272:
5271#line 2616 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005272 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005273 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005274 GEN_ERROR("select condition must be boolean!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005275 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Andrew Lenharth6353e052006-12-08 18:07:09 +00005276 GEN_ERROR("select value types should match!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005277 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005278 CHECK_FOR_ERROR
5279 ;}
5280 break;
5281
Reid Spencer218ded22007-01-05 17:07:23 +00005282 case 273:
5283#line 2624 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005284 {
Reid Spencer14310612006-12-31 05:40:51 +00005285 if (!UpRefs.empty())
5286 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005287 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5288 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005289 CHECK_FOR_ERROR
5290 ;}
5291 break;
5292
Reid Spencer218ded22007-01-05 17:07:23 +00005293 case 274:
5294#line 2631 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005295 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005296 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005297 GEN_ERROR("Invalid extractelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005298 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005299 CHECK_FOR_ERROR
5300 ;}
5301 break;
5302
Reid Spencer218ded22007-01-05 17:07:23 +00005303 case 275:
5304#line 2637 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005305 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005306 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005307 GEN_ERROR("Invalid insertelement operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005308 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005309 CHECK_FOR_ERROR
5310 ;}
5311 break;
5312
Reid Spencer218ded22007-01-05 17:07:23 +00005313 case 276:
5314#line 2643 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005315 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005316 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005317 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005318 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005319 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005320 ;}
5321 break;
5322
Reid Spencer218ded22007-01-05 17:07:23 +00005323 case 277:
5324#line 2649 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005325 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005326 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005327 if (!Ty->isFirstClassType())
5328 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005329 (yyval.InstVal) = new PHINode(Ty);
5330 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5331 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5332 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005333 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencere4d87aa2006-12-23 06:05:41 +00005334 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5335 (yyvsp[0].PHIList)->pop_front();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005336 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005337 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005338 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005339 ;}
5340 break;
5341
Reid Spencer218ded22007-01-05 17:07:23 +00005342 case 278:
5343#line 2665 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005344 {
Reid Spencer14310612006-12-31 05:40:51 +00005345
5346 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005347 const PointerType *PFTy = 0;
5348 const FunctionType *Ty = 0;
Reid Spencer218ded22007-01-05 17:07:23 +00005349 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005350 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5351 // Pull out the types of all of the arguments...
5352 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005353 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer218ded22007-01-05 17:07:23 +00005354 ParamAttrs.push_back((yyvsp[0].ParamAttrs));
5355 for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005356 const Type *Ty = I->Val->getType();
5357 if (Ty == Type::VoidTy)
5358 GEN_ERROR("Short call syntax cannot be used with varargs");
5359 ParamTypes.push_back(Ty);
5360 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005361 }
5362
Reid Spencer218ded22007-01-05 17:07:23 +00005363 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005364 PFTy = PointerType::get(Ty);
5365 }
5366
Reid Spencer218ded22007-01-05 17:07:23 +00005367 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005368 CHECK_FOR_ERROR
5369
Reid Spencer14310612006-12-31 05:40:51 +00005370 // Check the arguments
5371 ValueList Args;
Reid Spencer218ded22007-01-05 17:07:23 +00005372 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005373 // Make sure no arguments is a good thing!
5374 if (Ty->getNumParams() != 0)
5375 GEN_ERROR("No arguments passed to a function that "
5376 "expects arguments!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005377 } else { // Has arguments?
5378 // Loop through FunctionType's arguments and ensure they are specified
5379 // correctly!
5380 //
5381 FunctionType::param_iterator I = Ty->param_begin();
5382 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer218ded22007-01-05 17:07:23 +00005383 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005384
Reid Spencer14310612006-12-31 05:40:51 +00005385 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5386 if (ArgI->Val->getType() != *I)
5387 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Andrew Lenharth6353e052006-12-08 18:07:09 +00005388 (*I)->getDescription() + "'!");
Reid Spencer14310612006-12-31 05:40:51 +00005389 Args.push_back(ArgI->Val);
5390 }
5391 if (Ty->isVarArg()) {
5392 if (I == E)
5393 for (; ArgI != ArgE; ++ArgI)
5394 Args.push_back(ArgI->Val); // push the remaining varargs
5395 } else if (I != E || ArgI != ArgE)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005396 GEN_ERROR("Invalid number of parameters detected!");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005397 }
Reid Spencer14310612006-12-31 05:40:51 +00005398 // Create the call node
5399 CallInst *CI = new CallInst(V, Args);
Reid Spencer218ded22007-01-05 17:07:23 +00005400 CI->setTailCall((yyvsp[-7].BoolVal));
5401 CI->setCallingConv((yyvsp[-6].UIntVal));
Reid Spencer14310612006-12-31 05:40:51 +00005402 (yyval.InstVal) = CI;
Reid Spencer218ded22007-01-05 17:07:23 +00005403 delete (yyvsp[-2].ValueRefList);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005404 CHECK_FOR_ERROR
5405 ;}
5406 break;
5407
Reid Spencer218ded22007-01-05 17:07:23 +00005408 case 279:
5409#line 2727 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005410 {
5411 (yyval.InstVal) = (yyvsp[0].InstVal);
5412 CHECK_FOR_ERROR
5413 ;}
5414 break;
5415
Reid Spencer218ded22007-01-05 17:07:23 +00005416 case 280:
5417#line 2732 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005418 {
5419 (yyval.BoolVal) = true;
5420 CHECK_FOR_ERROR
5421 ;}
5422 break;
5423
Reid Spencer218ded22007-01-05 17:07:23 +00005424 case 281:
5425#line 2736 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005426 {
5427 (yyval.BoolVal) = false;
5428 CHECK_FOR_ERROR
5429 ;}
5430 break;
5431
Reid Spencer218ded22007-01-05 17:07:23 +00005432 case 282:
5433#line 2743 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005434 {
Reid Spencer14310612006-12-31 05:40:51 +00005435 if (!UpRefs.empty())
5436 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005437 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5438 delete (yyvsp[-1].TypeVal);
5439 CHECK_FOR_ERROR
5440 ;}
5441 break;
5442
Reid Spencer218ded22007-01-05 17:07:23 +00005443 case 283:
5444#line 2750 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005445 {
Reid Spencer14310612006-12-31 05:40:51 +00005446 if (!UpRefs.empty())
5447 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005448 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
5449 CHECK_FOR_ERROR
5450 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5451 delete (yyvsp[-4].TypeVal);
5452 ;}
5453 break;
5454
Reid Spencer218ded22007-01-05 17:07:23 +00005455 case 284:
5456#line 2758 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005457 {
Reid Spencer14310612006-12-31 05:40:51 +00005458 if (!UpRefs.empty())
5459 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005460 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5461 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005462 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005463 ;}
5464 break;
5465
Reid Spencer218ded22007-01-05 17:07:23 +00005466 case 285:
5467#line 2765 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005468 {
Reid Spencer14310612006-12-31 05:40:51 +00005469 if (!UpRefs.empty())
5470 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005471 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005472 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005473 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5474 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005475 ;}
5476 break;
5477
Reid Spencer218ded22007-01-05 17:07:23 +00005478 case 286:
5479#line 2773 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005480 {
5481 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
5482 GEN_ERROR("Trying to free nonpointer type " +
5483 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5484 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005485 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005486 ;}
5487 break;
5488
Reid Spencer218ded22007-01-05 17:07:23 +00005489 case 287:
5490#line 2781 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencere4d87aa2006-12-23 06:05:41 +00005491 {
Reid Spencer14310612006-12-31 05:40:51 +00005492 if (!UpRefs.empty())
5493 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005494 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
5495 GEN_ERROR("Can't load from nonpointer type: " +
5496 (*(yyvsp[-1].TypeVal))->getDescription());
5497 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
5498 GEN_ERROR("Can't load from pointer of non-first-class type: " +
5499 (*(yyvsp[-1].TypeVal))->getDescription());
5500 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005501 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005502 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5503 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005504 ;}
5505 break;
5506
Reid Spencer218ded22007-01-05 17:07:23 +00005507 case 288:
5508#line 2795 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005509 {
Reid Spencer14310612006-12-31 05:40:51 +00005510 if (!UpRefs.empty())
5511 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005512 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
5513 if (!PT)
5514 GEN_ERROR("Can't store to a nonpointer type: " +
5515 (*(yyvsp[-1].TypeVal))->getDescription());
5516 const Type *ElTy = PT->getElementType();
5517 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5518 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
5519 "' into space of type '" + ElTy->getDescription() + "'!");
5520
5521 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005522 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005523 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5524 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005525 ;}
5526 break;
5527
Reid Spencer218ded22007-01-05 17:07:23 +00005528 case 289:
5529#line 2812 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005530 {
Reid Spencer14310612006-12-31 05:40:51 +00005531 if (!UpRefs.empty())
5532 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Reid Spencere4d87aa2006-12-23 06:05:41 +00005533 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005534 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005535
Reid Spencere4d87aa2006-12-23 06:05:41 +00005536 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005537 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencere4d87aa2006-12-23 06:05:41 +00005538 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5539 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005540 CHECK_FOR_ERROR
Reid Spencere4d87aa2006-12-23 06:05:41 +00005541 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5542 delete (yyvsp[-2].TypeVal);
5543 delete (yyvsp[0].ValueList);
Reid Spencer3822ff52006-11-08 06:47:33 +00005544 ;}
5545 break;
5546
5547
Reid Spencere4d87aa2006-12-23 06:05:41 +00005548 default: break;
Reid Spencer3822ff52006-11-08 06:47:33 +00005549 }
5550
Reid Spencere4d87aa2006-12-23 06:05:41 +00005551/* Line 1126 of yacc.c. */
Reid Spencer218ded22007-01-05 17:07:23 +00005552#line 5553 "llvmAsmParser.tab.c"
Andrew Lenharth6353e052006-12-08 18:07:09 +00005553
5554 yyvsp -= yylen;
5555 yyssp -= yylen;
5556
5557
Reid Spencer3822ff52006-11-08 06:47:33 +00005558 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005559
5560 *++yyvsp = yyval;
5561
5562
Reid Spencer3822ff52006-11-08 06:47:33 +00005563 /* Now `shift' the result of the reduction. Determine what state
5564 that goes to, based on the state we popped back to and the rule
5565 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005566
5567 yyn = yyr1[yyn];
5568
Reid Spencer3822ff52006-11-08 06:47:33 +00005569 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5570 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005571 yystate = yytable[yystate];
5572 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005573 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005574
5575 goto yynewstate;
5576
5577
Reid Spencer3822ff52006-11-08 06:47:33 +00005578/*------------------------------------.
5579| yyerrlab -- here on detecting error |
5580`------------------------------------*/
5581yyerrlab:
5582 /* If not already recovering from an error, report this error. */
5583 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005584 {
5585 ++yynerrs;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005586#if YYERROR_VERBOSE
5587 yyn = yypact[yystate];
Bill Wendlinge8156192006-12-07 01:30:32 +00005588
Andrew Lenharth6353e052006-12-08 18:07:09 +00005589 if (YYPACT_NINF < yyn && yyn < YYLAST)
5590 {
Andrew Lenharth6353e052006-12-08 18:07:09 +00005591 int yytype = YYTRANSLATE (yychar);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005592 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5593 YYSIZE_T yysize = yysize0;
5594 YYSIZE_T yysize1;
5595 int yysize_overflow = 0;
5596 char *yymsg = 0;
5597# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5598 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
Andrew Lenharth6353e052006-12-08 18:07:09 +00005599 int yyx;
5600
Reid Spencere4d87aa2006-12-23 06:05:41 +00005601#if 0
5602 /* This is so xgettext sees the translatable formats that are
5603 constructed on the fly. */
5604 YY_("syntax error, unexpected %s");
5605 YY_("syntax error, unexpected %s, expecting %s");
5606 YY_("syntax error, unexpected %s, expecting %s or %s");
5607 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5608 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5609#endif
5610 char *yyfmt;
5611 char const *yyf;
5612 static char const yyunexpected[] = "syntax error, unexpected %s";
5613 static char const yyexpecting[] = ", expecting %s";
5614 static char const yyor[] = " or %s";
5615 char yyformat[sizeof yyunexpected
5616 + sizeof yyexpecting - 1
5617 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5618 * (sizeof yyor - 1))];
5619 char const *yyprefix = yyexpecting;
5620
Andrew Lenharth6353e052006-12-08 18:07:09 +00005621 /* Start YYX at -YYN if negative to avoid negative indexes in
5622 YYCHECK. */
5623 int yyxbegin = yyn < 0 ? -yyn : 0;
5624
5625 /* Stay within bounds of both yycheck and yytname. */
5626 int yychecklim = YYLAST - yyn;
5627 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005628 int yycount = 1;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005629
Reid Spencere4d87aa2006-12-23 06:05:41 +00005630 yyarg[0] = yytname[yytype];
5631 yyfmt = yystpcpy (yyformat, yyunexpected);
5632
Andrew Lenharth6353e052006-12-08 18:07:09 +00005633 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5634 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5635 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005636 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005637 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005638 yycount = 1;
5639 yysize = yysize0;
5640 yyformat[sizeof yyunexpected - 1] = '\0';
Andrew Lenharth6353e052006-12-08 18:07:09 +00005641 break;
5642 }
Reid Spencere4d87aa2006-12-23 06:05:41 +00005643 yyarg[yycount++] = yytname[yyx];
5644 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5645 yysize_overflow |= yysize1 < yysize;
5646 yysize = yysize1;
5647 yyfmt = yystpcpy (yyfmt, yyprefix);
5648 yyprefix = yyor;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005649 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005650
Reid Spencere4d87aa2006-12-23 06:05:41 +00005651 yyf = YY_(yyformat);
5652 yysize1 = yysize + yystrlen (yyf);
5653 yysize_overflow |= yysize1 < yysize;
5654 yysize = yysize1;
5655
5656 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5657 yymsg = (char *) YYSTACK_ALLOC (yysize);
5658 if (yymsg)
5659 {
5660 /* Avoid sprintf, as that infringes on the user's name space.
5661 Don't have undefined behavior even if the translation
5662 produced a string with the wrong number of "%s"s. */
5663 char *yyp = yymsg;
5664 int yyi = 0;
5665 while ((*yyp = *yyf))
Andrew Lenharth6353e052006-12-08 18:07:09 +00005666 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005667 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5668 {
5669 yyp += yytnamerr (yyp, yyarg[yyi++]);
5670 yyf += 2;
5671 }
5672 else
5673 {
5674 yyp++;
5675 yyf++;
5676 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005677 }
5678 yyerror (yymsg);
5679 YYSTACK_FREE (yymsg);
5680 }
5681 else
Reid Spencere4d87aa2006-12-23 06:05:41 +00005682 {
5683 yyerror (YY_("syntax error"));
5684 goto yyexhaustedlab;
5685 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005686 }
5687 else
5688#endif /* YYERROR_VERBOSE */
Reid Spencere4d87aa2006-12-23 06:05:41 +00005689 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005690 }
5691
Reid Spencer3822ff52006-11-08 06:47:33 +00005692
Reid Spencer68a24bd2005-08-27 18:50:39 +00005693
5694 if (yyerrstatus == 3)
5695 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005696 /* If just tried and failed to reuse look-ahead token after an
Reid Spencer3822ff52006-11-08 06:47:33 +00005697 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005698
Reid Spencer3822ff52006-11-08 06:47:33 +00005699 if (yychar <= YYEOF)
Andrew Lenharth6353e052006-12-08 18:07:09 +00005700 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005701 /* Return failure if at end of input. */
Reid Spencer3822ff52006-11-08 06:47:33 +00005702 if (yychar == YYEOF)
Reid Spencere4d87aa2006-12-23 06:05:41 +00005703 YYABORT;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005704 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005705 else
5706 {
Reid Spencere4d87aa2006-12-23 06:05:41 +00005707 yydestruct ("Error: discarding", yytoken, &yylval);
Reid Spencer3822ff52006-11-08 06:47:33 +00005708 yychar = YYEMPTY;
5709 }
5710 }
5711
Reid Spencere4d87aa2006-12-23 06:05:41 +00005712 /* Else will try to reuse look-ahead token after shifting the error
Reid Spencer3822ff52006-11-08 06:47:33 +00005713 token. */
5714 goto yyerrlab1;
5715
5716
5717/*---------------------------------------------------.
5718| yyerrorlab -- error raised explicitly by YYERROR. |
5719`---------------------------------------------------*/
5720yyerrorlab:
5721
Reid Spencere4d87aa2006-12-23 06:05:41 +00005722 /* Pacify compilers like GCC when the user code never invokes
5723 YYERROR and the label yyerrorlab therefore never appears in user
5724 code. */
Andrew Lenharth6353e052006-12-08 18:07:09 +00005725 if (0)
Reid Spencer3822ff52006-11-08 06:47:33 +00005726 goto yyerrorlab;
5727
Reid Spencere4d87aa2006-12-23 06:05:41 +00005728yyvsp -= yylen;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005729 yyssp -= yylen;
Reid Spencer3822ff52006-11-08 06:47:33 +00005730 yystate = *yyssp;
5731 goto yyerrlab1;
5732
5733
5734/*-------------------------------------------------------------.
5735| yyerrlab1 -- common code for both syntax error and YYERROR. |
5736`-------------------------------------------------------------*/
5737yyerrlab1:
5738 yyerrstatus = 3; /* Each real token shifted decrements this. */
5739
5740 for (;;)
5741 {
5742 yyn = yypact[yystate];
5743 if (yyn != YYPACT_NINF)
5744 {
5745 yyn += YYTERROR;
5746 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5747 {
5748 yyn = yytable[yyn];
5749 if (0 < yyn)
5750 break;
5751 }
5752 }
5753
5754 /* Pop the current state because it cannot handle the error token. */
5755 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005756 YYABORT;
5757
Reid Spencere4d87aa2006-12-23 06:05:41 +00005758
5759 yydestruct ("Error: popping", yystos[yystate], yyvsp);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005760 YYPOPSTACK;
Reid Spencer3822ff52006-11-08 06:47:33 +00005761 yystate = *yyssp;
5762 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005763 }
5764
5765 if (yyn == YYFINAL)
5766 YYACCEPT;
5767
Reid Spencer68a24bd2005-08-27 18:50:39 +00005768 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005769
5770
Reid Spencere4d87aa2006-12-23 06:05:41 +00005771 /* Shift the error token. */
5772 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5773
Reid Spencer68a24bd2005-08-27 18:50:39 +00005774 yystate = yyn;
5775 goto yynewstate;
5776
Chris Lattnerf49c1762006-11-08 05:58:47 +00005777
Reid Spencer3822ff52006-11-08 06:47:33 +00005778/*-------------------------------------.
5779| yyacceptlab -- YYACCEPT comes here. |
5780`-------------------------------------*/
5781yyacceptlab:
5782 yyresult = 0;
5783 goto yyreturn;
5784
5785/*-----------------------------------.
5786| yyabortlab -- YYABORT comes here. |
5787`-----------------------------------*/
5788yyabortlab:
5789 yyresult = 1;
5790 goto yyreturn;
5791
5792#ifndef yyoverflow
Reid Spencere4d87aa2006-12-23 06:05:41 +00005793/*-------------------------------------------------.
5794| yyexhaustedlab -- memory exhaustion comes here. |
5795`-------------------------------------------------*/
5796yyexhaustedlab:
5797 yyerror (YY_("memory exhausted"));
Reid Spencer3822ff52006-11-08 06:47:33 +00005798 yyresult = 2;
5799 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005800#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005801
5802yyreturn:
Reid Spencere4d87aa2006-12-23 06:05:41 +00005803 if (yychar != YYEOF && yychar != YYEMPTY)
5804 yydestruct ("Cleanup: discarding lookahead",
5805 yytoken, &yylval);
5806 while (yyssp != yyss)
5807 {
5808 yydestruct ("Cleanup: popping",
5809 yystos[*yyssp], yyvsp);
5810 YYPOPSTACK;
5811 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005812#ifndef yyoverflow
5813 if (yyss != yyssa)
5814 YYSTACK_FREE (yyss);
5815#endif
Andrew Lenharth6353e052006-12-08 18:07:09 +00005816 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005817}
Reid Spencer3822ff52006-11-08 06:47:33 +00005818
5819
Reid Spencer218ded22007-01-05 17:07:23 +00005820#line 2829 "/proj/llvm/llvm-3/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005821
5822
Reid Spencer14310612006-12-31 05:40:51 +00005823// common code from the two 'RunVMAsmParser' functions
5824static Module* RunParser(Module * M) {
5825
5826 llvmAsmlineno = 1; // Reset the current line number...
5827 CurModule.CurrentModule = M;
5828#if YYDEBUG
5829 yydebug = Debug;
5830#endif
5831
5832 // Check to make sure the parser succeeded
5833 if (yyparse()) {
5834 if (ParserResult)
5835 delete ParserResult;
5836 return 0;
5837 }
5838
5839 // Check to make sure that parsing produced a result
5840 if (!ParserResult)
5841 return 0;
5842
5843 // Reset ParserResult variable while saving its value for the result.
5844 Module *Result = ParserResult;
5845 ParserResult = 0;
5846
5847 return Result;
5848}
5849
Reid Spencer61c83e02006-08-18 08:43:06 +00005850void llvm::GenerateError(const std::string &message, int LineNo) {
5851 if (LineNo == -1) LineNo = llvmAsmlineno;
5852 // TODO: column number in exception
5853 if (TheParseError)
5854 TheParseError->setError(CurFilename, message, LineNo);
5855 TriggerError = 1;
5856}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005857
5858int yyerror(const char *ErrorMsg) {
5859 std::string where
5860 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5861 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5862 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5863 if (yychar == YYEMPTY || yychar == 0)
5864 errMsg += "end-of-file.";
5865 else
5866 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005867 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005868 return 0;
5869}
Reid Spencer3822ff52006-11-08 06:47:33 +00005870