blob: 73903c14acaa0b642077c8dcc34b6cd555c227e4 [file] [log] [blame]
Reid Spencer38c91a92007-02-28 02:24:54 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Reid Spencer38c91a92007-02-28 02:24:54 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00005
Reid Spencer38c91a92007-02-28 02:24:54 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov178a3522007-01-12 19:22:51 +000010
Reid Spencer38c91a92007-02-28 02:24:54 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Bison version. */
40#define YYBISON_VERSION "2.1"
41
42/* Skeleton name. */
43#define YYSKELETON_NAME "yacc.c"
44
45/* Pure parsers. */
46#define YYPURE 0
47
48/* Using locations. */
49#define YYLSP_NEEDED 0
50
51/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yyparse llvmAsmparse
Reid Spencer38c91a92007-02-28 02:24:54 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencer38c91a92007-02-28 02:24:54 +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 Spencer38c91a92007-02-28 02:24:54 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 ESAPINTVAL = 260,
70 EUAPINTVAL = 261,
71 LOCALVAL_ID = 262,
72 GLOBALVAL_ID = 263,
73 FPVAL = 264,
74 VOID = 265,
75 INTTYPE = 266,
76 FLOAT = 267,
77 DOUBLE = 268,
78 LABEL = 269,
79 TYPE = 270,
80 LOCALVAR = 271,
81 GLOBALVAR = 272,
82 LABELSTR = 273,
83 STRINGCONSTANT = 274,
84 ATSTRINGCONSTANT = 275,
85 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 EXTERNAL = 300,
110 TARGET = 301,
111 TRIPLE = 302,
112 ALIGN = 303,
113 DEPLIBS = 304,
114 CALL = 305,
115 TAIL = 306,
116 ASM_TOK = 307,
117 MODULE = 308,
118 SIDEEFFECT = 309,
119 CC_TOK = 310,
120 CCC_TOK = 311,
121 FASTCC_TOK = 312,
122 COLDCC_TOK = 313,
123 X86_STDCALLCC_TOK = 314,
124 X86_FASTCALLCC_TOK = 315,
125 DATALAYOUT = 316,
126 RET = 317,
127 BR = 318,
128 SWITCH = 319,
129 INVOKE = 320,
130 UNWIND = 321,
131 UNREACHABLE = 322,
132 ADD = 323,
133 SUB = 324,
134 MUL = 325,
135 UDIV = 326,
136 SDIV = 327,
137 FDIV = 328,
138 UREM = 329,
139 SREM = 330,
140 FREM = 331,
141 AND = 332,
142 OR = 333,
143 XOR = 334,
144 SHL = 335,
145 LSHR = 336,
146 ASHR = 337,
147 ICMP = 338,
148 FCMP = 339,
149 EQ = 340,
150 NE = 341,
151 SLT = 342,
152 SGT = 343,
153 SLE = 344,
154 SGE = 345,
155 ULT = 346,
156 UGT = 347,
157 ULE = 348,
158 UGE = 349,
159 OEQ = 350,
160 ONE = 351,
161 OLT = 352,
162 OGT = 353,
163 OLE = 354,
164 OGE = 355,
165 ORD = 356,
166 UNO = 357,
167 UEQ = 358,
168 UNE = 359,
169 MALLOC = 360,
170 ALLOCA = 361,
171 FREE = 362,
172 LOAD = 363,
173 STORE = 364,
174 GETELEMENTPTR = 365,
175 TRUNC = 366,
176 ZEXT = 367,
177 SEXT = 368,
178 FPTRUNC = 369,
179 FPEXT = 370,
180 BITCAST = 371,
181 UITOFP = 372,
182 SITOFP = 373,
183 FPTOUI = 374,
184 FPTOSI = 375,
185 INTTOPTR = 376,
186 PTRTOINT = 377,
187 PHI_TOK = 378,
188 SELECT = 379,
189 VAARG = 380,
190 EXTRACTELEMENT = 381,
191 INSERTELEMENT = 382,
192 SHUFFLEVECTOR = 383,
193 NORETURN = 384,
194 INREG = 385,
195 SRET = 386,
196 DEFAULT = 387,
197 HIDDEN = 388
198 };
199#endif
200/* Tokens. */
201#define ESINT64VAL 258
202#define EUINT64VAL 259
203#define ESAPINTVAL 260
204#define EUAPINTVAL 261
205#define LOCALVAL_ID 262
206#define GLOBALVAL_ID 263
207#define FPVAL 264
208#define VOID 265
209#define INTTYPE 266
210#define FLOAT 267
211#define DOUBLE 268
212#define LABEL 269
213#define TYPE 270
214#define LOCALVAR 271
215#define GLOBALVAR 272
216#define LABELSTR 273
217#define STRINGCONSTANT 274
218#define ATSTRINGCONSTANT 275
219#define IMPLEMENTATION 276
220#define ZEROINITIALIZER 277
221#define TRUETOK 278
222#define FALSETOK 279
223#define BEGINTOK 280
224#define ENDTOK 281
225#define DECLARE 282
226#define DEFINE 283
227#define GLOBAL 284
228#define CONSTANT 285
229#define SECTION 286
230#define VOLATILE 287
231#define TO 288
232#define DOTDOTDOT 289
233#define NULL_TOK 290
234#define UNDEF 291
235#define INTERNAL 292
236#define LINKONCE 293
237#define WEAK 294
238#define APPENDING 295
239#define DLLIMPORT 296
240#define DLLEXPORT 297
241#define EXTERN_WEAK 298
242#define OPAQUE 299
243#define EXTERNAL 300
244#define TARGET 301
245#define TRIPLE 302
246#define ALIGN 303
247#define DEPLIBS 304
248#define CALL 305
249#define TAIL 306
250#define ASM_TOK 307
251#define MODULE 308
252#define SIDEEFFECT 309
253#define CC_TOK 310
254#define CCC_TOK 311
255#define FASTCC_TOK 312
256#define COLDCC_TOK 313
257#define X86_STDCALLCC_TOK 314
258#define X86_FASTCALLCC_TOK 315
259#define DATALAYOUT 316
260#define RET 317
261#define BR 318
262#define SWITCH 319
263#define INVOKE 320
264#define UNWIND 321
265#define UNREACHABLE 322
266#define ADD 323
267#define SUB 324
268#define MUL 325
269#define UDIV 326
270#define SDIV 327
271#define FDIV 328
272#define UREM 329
273#define SREM 330
274#define FREM 331
275#define AND 332
276#define OR 333
277#define XOR 334
278#define SHL 335
279#define LSHR 336
280#define ASHR 337
281#define ICMP 338
282#define FCMP 339
283#define EQ 340
284#define NE 341
285#define SLT 342
286#define SGT 343
287#define SLE 344
288#define SGE 345
289#define ULT 346
290#define UGT 347
291#define ULE 348
292#define UGE 349
293#define OEQ 350
294#define ONE 351
295#define OLT 352
296#define OGT 353
297#define OLE 354
298#define OGE 355
299#define ORD 356
300#define UNO 357
301#define UEQ 358
302#define UNE 359
303#define MALLOC 360
304#define ALLOCA 361
305#define FREE 362
306#define LOAD 363
307#define STORE 364
308#define GETELEMENTPTR 365
309#define TRUNC 366
310#define ZEXT 367
311#define SEXT 368
312#define FPTRUNC 369
313#define FPEXT 370
314#define BITCAST 371
315#define UITOFP 372
316#define SITOFP 373
317#define FPTOUI 374
318#define FPTOSI 375
319#define INTTOPTR 376
320#define PTRTOINT 377
321#define PHI_TOK 378
322#define SELECT 379
323#define VAARG 380
324#define EXTRACTELEMENT 381
325#define INSERTELEMENT 382
326#define SHUFFLEVECTOR 383
327#define NORETURN 384
328#define INREG 385
329#define SRET 386
330#define DEFAULT 387
331#define HIDDEN 388
332
333
334
335
336/* Copy the first part of user declarations. */
337#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000338
339#include "ParserInternals.h"
340#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000341#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000342#include "llvm/Instructions.h"
343#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000344#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000345#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000346#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000347#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000348#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000349#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000350#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000351#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000352#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000353#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000354#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000355#ifndef NDEBUG
356#define YYDEBUG 1
357#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000358
Reid Spencere4f47592006-08-18 17:32:55 +0000359// The following is a gross hack. In order to rid the libAsmParser library of
360// exceptions, we have to have a way of getting the yyparse function to go into
361// an error situation. So, whenever we want an error to occur, the GenerateError
362// function (see bottom of file) sets TriggerError. Then, at the end of each
363// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
364// (a goto) to put YACC in error state. Furthermore, several calls to
365// GenerateError are made from inside productions and they must simulate the
366// previous exception behavior by exiting the production immediately. We have
367// replaced these with the GEN_ERROR macro which calls GeneratError and then
368// immediately invokes YYERROR. This would be so much cleaner if it was a
369// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000370static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000371#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000372#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
373
Reid Spencer68a24bd2005-08-27 18:50:39 +0000374int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
375int yylex(); // declaration" of xxx warnings.
376int yyparse();
377
378namespace llvm {
379 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000380#if YYDEBUG
381static cl::opt<bool>
382Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
383 cl::Hidden, cl::init(false));
384#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000385}
386using namespace llvm;
387
388static Module *ParserResult;
389
390// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
391// relating to upreferences in the input stream.
392//
393//#define DEBUG_UPREFS 1
394#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000395#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000396#else
397#define UR_OUT(X)
398#endif
399
400#define YYERROR_VERBOSE 1
401
Chris Lattnerb475c422005-11-12 18:22:38 +0000402static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000403
404
405// This contains info used when building the body of a function. It is
406// destroyed when the function is completed.
407//
408typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000409
Reid Spencer68a24bd2005-08-27 18:50:39 +0000410static void
Reid Spencer93c40032007-03-19 18:40:50 +0000411ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000412
413static struct PerModuleInfo {
414 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000415 ValueList Values; // Module level numbered definitions
416 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000417 std::vector<PATypeHolder> Types;
418 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000419
420 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000421 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000422 /// that we can resolve them later and print error messages as appropriate.
423 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
424
425 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
426 // references to global values. Global values may be referenced before they
427 // are defined, and if so, the temporary object that they represent is held
428 // here. This is used for forward references of GlobalValues.
429 //
430 typedef std::map<std::pair<const PointerType *,
431 ValID>, GlobalValue*> GlobalRefsType;
432 GlobalRefsType GlobalRefs;
433
434 void ModuleDone() {
435 // If we could not resolve some functions at function compilation time
436 // (calls to functions before they are defined), resolve them now... Types
437 // are resolved when the constant pool has been completely parsed.
438 //
439 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000440 if (TriggerError)
441 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000442
443 // Check to make sure that all global value forward references have been
444 // resolved!
445 //
446 if (!GlobalRefs.empty()) {
447 std::string UndefinedReferences = "Unresolved global references exist:\n";
448
449 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
450 I != E; ++I) {
451 UndefinedReferences += " " + I->first.first->getDescription() + " " +
452 I->first.second.getName() + "\n";
453 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000454 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000455 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000456 }
457
458 Values.clear(); // Clear out function local definitions
459 Types.clear();
460 CurrentModule = 0;
461 }
462
Reid Spencer68a24bd2005-08-27 18:50:39 +0000463 // GetForwardRefForGlobal - Check to see if there is a forward reference
464 // for this global. If so, remove it from the GlobalRefs map and return it.
465 // If not, just return null.
466 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
467 // Check to see if there is a forward reference to this global variable...
468 // if there is, eliminate it and patch the reference to use the new def'n.
469 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
470 GlobalValue *Ret = 0;
471 if (I != GlobalRefs.end()) {
472 Ret = I->second;
473 GlobalRefs.erase(I);
474 }
475 return Ret;
476 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000477
478 bool TypeIsUnresolved(PATypeHolder* PATy) {
479 // If it isn't abstract, its resolved
480 const Type* Ty = PATy->get();
481 if (!Ty->isAbstract())
482 return false;
483 // Traverse the type looking for abstract types. If it isn't abstract then
484 // we don't need to traverse that leg of the type.
485 std::vector<const Type*> WorkList, SeenList;
486 WorkList.push_back(Ty);
487 while (!WorkList.empty()) {
488 const Type* Ty = WorkList.back();
489 SeenList.push_back(Ty);
490 WorkList.pop_back();
491 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
492 // Check to see if this is an unresolved type
493 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
494 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
495 for ( ; I != E; ++I) {
496 if (I->second.get() == OpTy)
497 return true;
498 }
499 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
500 const Type* TheTy = SeqTy->getElementType();
501 if (TheTy->isAbstract() && TheTy != Ty) {
502 std::vector<const Type*>::iterator I = SeenList.begin(),
503 E = SeenList.end();
504 for ( ; I != E; ++I)
505 if (*I == TheTy)
506 break;
507 if (I == E)
508 WorkList.push_back(TheTy);
509 }
510 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
511 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
512 const Type* TheTy = StrTy->getElementType(i);
513 if (TheTy->isAbstract() && TheTy != Ty) {
514 std::vector<const Type*>::iterator I = SeenList.begin(),
515 E = SeenList.end();
516 for ( ; I != E; ++I)
517 if (*I == TheTy)
518 break;
519 if (I == E)
520 WorkList.push_back(TheTy);
521 }
522 }
523 }
524 }
525 return false;
526 }
527
528
Reid Spencer68a24bd2005-08-27 18:50:39 +0000529} CurModule;
530
531static struct PerFunctionInfo {
532 Function *CurrentFunction; // Pointer to current function being created
533
Reid Spencer93c40032007-03-19 18:40:50 +0000534 ValueList Values; // Keep track of #'d definitions
535 unsigned NextValNum;
536 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000537 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000538 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000539 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000540
541 /// BBForwardRefs - When we see forward references to basic blocks, keep
542 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000543 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000544
545 inline PerFunctionInfo() {
546 CurrentFunction = 0;
547 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000548 Linkage = GlobalValue::ExternalLinkage;
549 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000550 }
551
552 inline void FunctionStart(Function *M) {
553 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000554 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000555 }
556
557 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000558 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000559 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000560 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000561 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000562 return;
563 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000564
565 // Resolve all forward references now.
566 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
567
568 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000569 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000570 CurrentFunction = 0;
571 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000572 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000573 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000574 }
575} CurFun; // Info for the current function...
576
577static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
578
579
580//===----------------------------------------------------------------------===//
581// Code to handle definitions of all the types
582//===----------------------------------------------------------------------===//
583
Reid Spencer93c40032007-03-19 18:40:50 +0000584static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
585 // Things that have names or are void typed don't get slot numbers
586 if (V->hasName() || (V->getType() == Type::VoidTy))
587 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000588
Reid Spencer93c40032007-03-19 18:40:50 +0000589 // In the case of function values, we have to allow for the forward reference
590 // of basic blocks, which are included in the numbering. Consequently, we keep
591 // track of the next insertion location with NextValNum. When a BB gets
592 // inserted, it could change the size of the CurFun.Values vector.
593 if (&ValueTab == &CurFun.Values) {
594 if (ValueTab.size() <= CurFun.NextValNum)
595 ValueTab.resize(CurFun.NextValNum+1);
596 ValueTab[CurFun.NextValNum++] = V;
597 return;
598 }
599 // For all other lists, its okay to just tack it on the back of the vector.
600 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000601}
602
603static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
604 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000605 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000606 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000607 if (D.Num < CurModule.Types.size())
608 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000609 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000610 case ValID::LocalName: // Is it a named definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000611 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
612 D.destroy(); // Free old strdup'd memory...
613 return N;
614 }
615 break;
616 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000617 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000618 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000619 }
620
621 // If we reached here, we referenced either a symbol that we don't know about
622 // or an id number that hasn't been read yet. We may be referencing something
623 // forward, so just create an entry to be resolved later and get to it...
624 //
625 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
626
627
628 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000629 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000630 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000631 return 0;
632 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000633 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000634 return 0;
635 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000636 }
637
Reid Spencer861d9d62006-11-28 07:29:44 +0000638 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000639 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000640 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000641
Reid Spencer861d9d62006-11-28 07:29:44 +0000642 Type *Typ = OpaqueType::get();
643 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
644 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000645 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000646
Reid Spencer93c40032007-03-19 18:40:50 +0000647// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000648// the provided ValID. If the value exists and has already been defined, return
649// it. Otherwise return null.
650//
Reid Spencer93c40032007-03-19 18:40:50 +0000651static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000652 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000653 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000654 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000655 return 0;
656 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000657
658 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000659 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000660 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000661 if (D.Num >= CurFun.Values.size())
662 return 0;
663 Value *Result = CurFun.Values[D.Num];
664 if (Ty != Result->getType()) {
665 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
666 Result->getType()->getDescription() + "' does not match "
667 "expected type, '" + Ty->getDescription() + "'");
668 return 0;
669 }
670 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000671 }
672 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000673 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000674 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000675 Value *Result = CurModule.Values[D.Num];
676 if (Ty != Result->getType()) {
677 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
678 Result->getType()->getDescription() + "' does not match "
679 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000680 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000681 }
682 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000683 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000684
685 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000686 if (!inFunctionScope())
687 return 0;
688 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
689 Value *N = SymTab.lookup(D.Name);
690 if (N == 0)
691 return 0;
692 if (N->getType() != Ty)
693 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000694
695 D.destroy(); // Free old strdup'd memory...
696 return N;
697 }
698 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000699 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
700 Value *N = SymTab.lookup(D.Name);
701 if (N == 0)
702 return 0;
703 if (N->getType() != Ty)
704 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000705
706 D.destroy(); // Free old strdup'd memory...
707 return N;
708 }
709
710 // Check to make sure that "Ty" is an integral type, and that our
711 // value will fit into the specified type...
712 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000713 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000714 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000715 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000716 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000717 return 0;
718 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000719 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000720
721 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000722 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
723 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000724 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000725 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000726 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000727 } else { // This is really a signed reference. Transmogrify.
Reid Spencer49d273e2007-03-19 20:40:51 +0000728 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000729 }
730 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000731 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000732 }
733
734 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000735 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000736 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000737 return 0;
738 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000739 return ConstantFP::get(Ty, D.ConstPoolFP);
740
741 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000742 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000743 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000744 return 0;
745 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000746 return ConstantPointerNull::get(cast<PointerType>(Ty));
747
748 case ValID::ConstUndefVal: // Is it an undef value?
749 return UndefValue::get(Ty);
750
Chris Lattner7aa61892005-12-21 17:53:23 +0000751 case ValID::ConstZeroVal: // Is it a zero value?
752 return Constant::getNullValue(Ty);
753
Reid Spencer68a24bd2005-08-27 18:50:39 +0000754 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000755 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000756 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000757 return 0;
758 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000759 return D.ConstantValue;
760
Chris Lattner0e9c3762006-01-25 22:27:16 +0000761 case ValID::InlineAsmVal: { // Inline asm expression
762 const PointerType *PTy = dyn_cast<PointerType>(Ty);
763 const FunctionType *FTy =
764 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000765 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000766 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000767 return 0;
768 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000769 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
770 D.IAD->HasSideEffects);
771 D.destroy(); // Free InlineAsmDescriptor.
772 return IA;
773 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000774 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000775 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000776 return 0;
777 } // End of switch
778
Reid Spencera9720f52007-02-05 17:04:00 +0000779 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000780 return 0;
781}
782
Reid Spencer93c40032007-03-19 18:40:50 +0000783// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000784// value is not already defined, it "improvises" by creating a placeholder var
785// that looks and acts just like the requested variable. When the value is
786// defined later, all uses of the placeholder variable are replaced with the
787// real thing.
788//
789static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000790 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000791 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000792 return 0;
793 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000794
795 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000796 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000797 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000798 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000799
Reid Spencer5b7e7532006-09-28 19:28:24 +0000800 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000801 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000802 return 0;
803 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000804
805 // If we reached here, we referenced either a symbol that we don't know about
806 // or an id number that hasn't been read yet. We may be referencing something
807 // forward, so just create an entry to be resolved later and get to it...
808 //
809 V = new Argument(Ty);
810
811 // Remember where this forward reference came from. FIXME, shouldn't we try
812 // to recycle these things??
813 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
814 llvmAsmlineno)));
815
816 if (inFunctionScope())
817 InsertValue(V, CurFun.LateResolveValues);
818 else
819 InsertValue(V, CurModule.LateResolveValues);
820 return V;
821}
822
Reid Spencer93c40032007-03-19 18:40:50 +0000823/// defineBBVal - This is a definition of a new basic block with the specified
824/// identifier which must be the same as CurFun.NextValNum, if its numeric.
825static BasicBlock *defineBBVal(const ValID &ID) {
Reid Spencera9720f52007-02-05 17:04:00 +0000826 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000827
Reid Spencer68a24bd2005-08-27 18:50:39 +0000828 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000829
Reid Spencer93c40032007-03-19 18:40:50 +0000830 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000831
Reid Spencer93c40032007-03-19 18:40:50 +0000832 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
833 if (BBI != CurFun.BBForwardRefs.end()) {
834 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000835 // The forward declaration could have been inserted anywhere in the
836 // function: insert it into the correct place now.
837 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
838 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000839
Reid Spencer66728ef2007-03-20 01:13:36 +0000840 // We're about to erase the entry, save the key so we can clean it up.
841 ValID Tmp = BBI->first;
842
Reid Spencer93c40032007-03-19 18:40:50 +0000843 // Erase the forward ref from the map as its no longer "forward"
844 CurFun.BBForwardRefs.erase(ID);
845
Reid Spencer66728ef2007-03-20 01:13:36 +0000846 // The key has been removed from the map but so we don't want to leave
847 // strdup'd memory around so destroy it too.
848 Tmp.destroy();
849
Reid Spencer93c40032007-03-19 18:40:50 +0000850 // If its a numbered definition, bump the number and set the BB value.
851 if (ID.Type == ValID::LocalID) {
852 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
853 InsertValue(BB);
854 }
855
856 ID.destroy();
857 return BB;
858 }
859
860 // We haven't seen this BB before and its first mention is a definition.
861 // Just create it and return it.
862 std::string Name (ID.Type == ValID::LocalName ? ID.Name : "");
863 BB = new BasicBlock(Name, CurFun.CurrentFunction);
864 if (ID.Type == ValID::LocalID) {
865 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
866 InsertValue(BB);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000867 }
Reid Spencer93c40032007-03-19 18:40:50 +0000868
869 ID.destroy(); // Free strdup'd memory
870 return BB;
871}
872
873/// getBBVal - get an existing BB value or create a forward reference for it.
874///
875static BasicBlock *getBBVal(const ValID &ID) {
876 assert(inFunctionScope() && "Can't get basic block at global scope!");
877
878 BasicBlock *BB = 0;
879
880 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
881 if (BBI != CurFun.BBForwardRefs.end()) {
882 BB = BBI->second;
883 } if (ID.Type == ValID::LocalName) {
884 std::string Name = ID.Name;
885 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
886 if (N)
887 if (N->getType()->getTypeID() == Type::LabelTyID)
888 BB = cast<BasicBlock>(N);
889 else
890 GenerateError("Reference to label '" + Name + "' is actually of type '"+
891 N->getType()->getDescription() + "'");
892 } else if (ID.Type == ValID::LocalID) {
893 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
894 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
895 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
896 else
897 GenerateError("Reference to label '%" + utostr(ID.Num) +
898 "' is actually of type '"+
899 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
900 }
901 } else {
902 GenerateError("Illegal label reference " + ID.getName());
903 return 0;
904 }
905
906 // If its already been defined, return it now.
907 if (BB) {
908 ID.destroy(); // Free strdup'd memory.
909 return BB;
910 }
911
912 // Otherwise, this block has not been seen before, create it.
913 std::string Name;
914 if (ID.Type == ValID::LocalName)
915 Name = ID.Name;
916 BB = new BasicBlock(Name, CurFun.CurrentFunction);
917
918 // Insert it in the forward refs map.
919 CurFun.BBForwardRefs[ID] = BB;
920
Reid Spencer68a24bd2005-08-27 18:50:39 +0000921 return BB;
922}
923
924
925//===----------------------------------------------------------------------===//
926// Code to handle forward references in instructions
927//===----------------------------------------------------------------------===//
928//
929// This code handles the late binding needed with statements that reference
930// values not defined yet... for example, a forward branch, or the PHI node for
931// a loop body.
932//
933// This keeps a table (CurFun.LateResolveValues) of all such forward references
934// and back patchs after we are done.
935//
936
937// ResolveDefinitions - If we could not resolve some defs at parsing
938// time (forward branches, phi functions for loops, etc...) resolve the
939// defs now...
940//
941static void
Reid Spencer93c40032007-03-19 18:40:50 +0000942ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000943 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +0000944 while (!LateResolvers.empty()) {
945 Value *V = LateResolvers.back();
946 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000947
Reid Spencer93c40032007-03-19 18:40:50 +0000948 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
949 CurModule.PlaceHolderInfo.find(V);
950 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000951
Reid Spencer93c40032007-03-19 18:40:50 +0000952 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000953
Reid Spencer93c40032007-03-19 18:40:50 +0000954 Value *TheRealValue = getExistingVal(V->getType(), DID);
955 if (TriggerError)
956 return;
957 if (TheRealValue) {
958 V->replaceAllUsesWith(TheRealValue);
959 delete V;
960 CurModule.PlaceHolderInfo.erase(PHI);
961 } else if (FutureLateResolvers) {
962 // Functions have their unresolved items forwarded to the module late
963 // resolver table
964 InsertValue(V, *FutureLateResolvers);
965 } else {
966 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
967 GenerateError("Reference to an invalid definition: '" +DID.getName()+
968 "' of type '" + V->getType()->getDescription() + "'",
969 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000970 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000971 } else {
Reid Spencer93c40032007-03-19 18:40:50 +0000972 GenerateError("Reference to an invalid definition: #" +
973 itostr(DID.Num) + " of type '" +
974 V->getType()->getDescription() + "'",
975 PHI->second.second);
976 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000977 }
978 }
979 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000980 LateResolvers.clear();
981}
982
983// ResolveTypeTo - A brand new type was just declared. This means that (if
984// name is not null) things referencing Name can be resolved. Otherwise, things
985// refering to the number can be resolved. Do this now.
986//
987static void ResolveTypeTo(char *Name, const Type *ToTy) {
988 ValID D;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000989 if (Name) D = ValID::createLocalName(Name);
990 else D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +0000991
Reid Spencer861d9d62006-11-28 07:29:44 +0000992 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000993 CurModule.LateResolveTypes.find(D);
994 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000995 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000996 CurModule.LateResolveTypes.erase(I);
997 }
998}
999
1000// setValueName - Set the specified value to the name given. The name may be
1001// null potentially, in which case this is a noop. The string passed in is
1002// assumed to be a malloc'd string buffer, and is free'd by this function.
1003//
1004static void setValueName(Value *V, char *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001005 if (!NameStr) return;
1006 std::string Name(NameStr); // Copy string
1007 free(NameStr); // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001008
Reid Spencer41dff5e2007-01-26 08:05:27 +00001009 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001010 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001011 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001012 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001013
Reid Spencera9720f52007-02-05 17:04:00 +00001014 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001015 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1016 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001017 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001018 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001019 return;
1020 }
1021
1022 // Set the name.
1023 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001024}
1025
1026/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1027/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001028static GlobalVariable *
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001029ParseGlobalVariable(char *NameStr,
1030 GlobalValue::LinkageTypes Linkage,
1031 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001032 bool isConstantGlobal, const Type *Ty,
1033 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001034 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001035 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001036 return 0;
1037 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001038
1039 const PointerType *PTy = PointerType::get(Ty);
1040
1041 std::string Name;
1042 if (NameStr) {
1043 Name = NameStr; // Copy string
1044 free(NameStr); // Free old string
1045 }
1046
1047 // See if this global value was forward referenced. If so, recycle the
1048 // object.
1049 ValID ID;
1050 if (!Name.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001051 ID = ValID::createGlobalName((char*)Name.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001052 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001053 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001054 }
1055
1056 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1057 // Move the global to the end of the list, from whereever it was
1058 // previously inserted.
1059 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1060 CurModule.CurrentModule->getGlobalList().remove(GV);
1061 CurModule.CurrentModule->getGlobalList().push_back(GV);
1062 GV->setInitializer(Initializer);
1063 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001064 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001065 GV->setConstant(isConstantGlobal);
1066 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001067 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001068 }
1069
Reid Spenceref9b9a72007-02-05 20:47:22 +00001070 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001071 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001072 // if the global we're parsing has an initializer (is a definition) and
1073 // has external linkage.
1074 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1075 // If there is already a global with external linkage with this name
1076 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1077 // If we allow this GVar to get created, it will be renamed in the
1078 // symbol table because it conflicts with an existing GVar. We can't
1079 // allow redefinition of GVars whose linking indicates that their name
1080 // must stay the same. Issue the error.
1081 GenerateError("Redefinition of global variable named '" + Name +
1082 "' of type '" + Ty->getDescription() + "'");
1083 return 0;
1084 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001085 }
1086
1087 // Otherwise there is no existing GV to use, create one now.
1088 GlobalVariable *GV =
1089 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1090 CurModule.CurrentModule);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001091 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001092 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001093 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001094}
1095
1096// setTypeName - Set the specified type to the name given. The name may be
1097// null potentially, in which case this is a noop. The string passed in is
1098// assumed to be a malloc'd string buffer, and is freed by this function.
1099//
1100// This function returns true if the type has already been defined, but is
1101// allowed to be redefined in the specified context. If the name is a new name
1102// for the type plane, it is inserted and false is returned.
1103static bool setTypeName(const Type *T, char *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001104 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001105 if (NameStr == 0) return false;
1106
1107 std::string Name(NameStr); // Copy string
1108 free(NameStr); // Free old string
1109
1110 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001111 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001112 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001113 return false;
1114 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001115
1116 // Set the type name, checking for conflicts as we do so.
1117 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1118
1119 if (AlreadyExists) { // Inserting a name that is already defined???
1120 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001121 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001122
1123 // There is only one case where this is allowed: when we are refining an
1124 // opaque type. In this case, Existing will be an opaque type.
1125 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1126 // We ARE replacing an opaque type!
1127 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1128 return true;
1129 }
1130
1131 // Otherwise, this is an attempt to redefine a type. That's okay if
1132 // the redefinition is identical to the original. This will be so if
1133 // Existing and T point to the same Type object. In this one case we
1134 // allow the equivalent redefinition.
1135 if (Existing == T) return true; // Yes, it's equal.
1136
1137 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001138 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001139 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001140 }
1141
1142 return false;
1143}
1144
1145//===----------------------------------------------------------------------===//
1146// Code for handling upreferences in type names...
1147//
1148
1149// TypeContains - Returns true if Ty directly contains E in it.
1150//
1151static bool TypeContains(const Type *Ty, const Type *E) {
1152 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1153 E) != Ty->subtype_end();
1154}
1155
1156namespace {
1157 struct UpRefRecord {
1158 // NestingLevel - The number of nesting levels that need to be popped before
1159 // this type is resolved.
1160 unsigned NestingLevel;
1161
1162 // LastContainedTy - This is the type at the current binding level for the
1163 // type. Every time we reduce the nesting level, this gets updated.
1164 const Type *LastContainedTy;
1165
1166 // UpRefTy - This is the actual opaque type that the upreference is
1167 // represented with.
1168 OpaqueType *UpRefTy;
1169
1170 UpRefRecord(unsigned NL, OpaqueType *URTy)
1171 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1172 };
1173}
1174
1175// UpRefs - A list of the outstanding upreferences that need to be resolved.
1176static std::vector<UpRefRecord> UpRefs;
1177
1178/// HandleUpRefs - Every time we finish a new layer of types, this function is
1179/// called. It loops through the UpRefs vector, which is a list of the
1180/// currently active types. For each type, if the up reference is contained in
1181/// the newly completed type, we decrement the level count. When the level
1182/// count reaches zero, the upreferenced type is the type that is passed in:
1183/// thus we can complete the cycle.
1184///
1185static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001186 // If Ty isn't abstract, or if there are no up-references in it, then there is
1187 // nothing to resolve here.
1188 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1189
Reid Spencer68a24bd2005-08-27 18:50:39 +00001190 PATypeHolder Ty(ty);
1191 UR_OUT("Type '" << Ty->getDescription() <<
1192 "' newly formed. Resolving upreferences.\n" <<
1193 UpRefs.size() << " upreferences active!\n");
1194
1195 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1196 // to zero), we resolve them all together before we resolve them to Ty. At
1197 // the end of the loop, if there is anything to resolve to Ty, it will be in
1198 // this variable.
1199 OpaqueType *TypeToResolve = 0;
1200
1201 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1202 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1203 << UpRefs[i].second->getDescription() << ") = "
1204 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1205 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1206 // Decrement level of upreference
1207 unsigned Level = --UpRefs[i].NestingLevel;
1208 UpRefs[i].LastContainedTy = Ty;
1209 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1210 if (Level == 0) { // Upreference should be resolved!
1211 if (!TypeToResolve) {
1212 TypeToResolve = UpRefs[i].UpRefTy;
1213 } else {
1214 UR_OUT(" * Resolving upreference for "
1215 << UpRefs[i].second->getDescription() << "\n";
1216 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1217 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1218 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1219 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1220 }
1221 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1222 --i; // Do not skip the next element...
1223 }
1224 }
1225 }
1226
1227 if (TypeToResolve) {
1228 UR_OUT(" * Resolving upreference for "
1229 << UpRefs[i].second->getDescription() << "\n";
1230 std::string OldName = TypeToResolve->getDescription());
1231 TypeToResolve->refineAbstractTypeTo(Ty);
1232 }
1233
1234 return Ty;
1235}
1236
Reid Spencer68a24bd2005-08-27 18:50:39 +00001237//===----------------------------------------------------------------------===//
1238// RunVMAsmParser - Define an interface to this parser
1239//===----------------------------------------------------------------------===//
1240//
Reid Spencer14310612006-12-31 05:40:51 +00001241static Module* RunParser(Module * M);
1242
Reid Spencer68a24bd2005-08-27 18:50:39 +00001243Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1244 set_scan_file(F);
1245
1246 CurFilename = Filename;
1247 return RunParser(new Module(CurFilename));
1248}
1249
1250Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1251 set_scan_string(AsmString);
1252
1253 CurFilename = "from_memory";
1254 if (M == NULL) {
1255 return RunParser(new Module (CurFilename));
1256 } else {
1257 return RunParser(M);
1258 }
1259}
1260
1261
Reid Spencer38c91a92007-02-28 02:24:54 +00001262
1263/* Enabling traces. */
1264#ifndef YYDEBUG
1265# define YYDEBUG 0
1266#endif
1267
1268/* Enabling verbose error messages. */
1269#ifdef YYERROR_VERBOSE
1270# undef YYERROR_VERBOSE
1271# define YYERROR_VERBOSE 1
1272#else
1273# define YYERROR_VERBOSE 0
1274#endif
1275
1276/* Enabling the token table. */
1277#ifndef YYTOKEN_TABLE
1278# define YYTOKEN_TABLE 0
1279#endif
1280
1281#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencer66728ef2007-03-20 01:13:36 +00001282#line 939 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00001283typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001284 llvm::Module *ModuleVal;
1285 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001286 llvm::BasicBlock *BasicBlockVal;
1287 llvm::TerminatorInst *TermInstVal;
1288 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001289 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001290
Reid Spencera132e042006-12-03 05:46:11 +00001291 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001292 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001293 llvm::PATypeHolder *TypeVal;
1294 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001295 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001296 llvm::ArgListType *ArgList;
1297 llvm::TypeWithAttrs TypeWithAttrs;
1298 llvm::TypeWithAttrsList *TypeWithAttrsList;
1299 llvm::ValueRefList *ValueRefList;
1300
Reid Spencer68a24bd2005-08-27 18:50:39 +00001301 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001302 std::list<std::pair<llvm::Value*,
1303 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001304 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001305 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001306
1307 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001308 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer14310612006-12-31 05:40:51 +00001309 llvm::FunctionType::ParameterAttributes ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001310 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001311 int64_t SInt64Val;
1312 uint64_t UInt64Val;
1313 int SIntVal;
1314 unsigned UIntVal;
1315 double FPVal;
1316 bool BoolVal;
1317
1318 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001319 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001320
Reid Spencera132e042006-12-03 05:46:11 +00001321 llvm::Instruction::BinaryOps BinaryOpVal;
1322 llvm::Instruction::TermOps TermOpVal;
1323 llvm::Instruction::MemoryOps MemOpVal;
1324 llvm::Instruction::CastOps CastOpVal;
1325 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001326 llvm::ICmpInst::Predicate IPredicate;
1327 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner9d2fda62007-02-13 05:53:56 +00001328} YYSTYPE;
Reid Spencer38c91a92007-02-28 02:24:54 +00001329/* Line 196 of yacc.c. */
Reid Spencer66728ef2007-03-20 01:13:36 +00001330#line 1331 "llvmAsmParser.tab.c"
Reid Spencer38c91a92007-02-28 02:24:54 +00001331# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1332# define YYSTYPE_IS_DECLARED 1
1333# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001334#endif
1335
Reid Spencer41dff5e2007-01-26 08:05:27 +00001336
Reid Spencer68a24bd2005-08-27 18:50:39 +00001337
Reid Spencer38c91a92007-02-28 02:24:54 +00001338/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001339
1340
Reid Spencer38c91a92007-02-28 02:24:54 +00001341/* Line 219 of yacc.c. */
Reid Spencer66728ef2007-03-20 01:13:36 +00001342#line 1343 "llvmAsmParser.tab.c"
Reid Spencer41dff5e2007-01-26 08:05:27 +00001343
Reid Spencer38c91a92007-02-28 02:24:54 +00001344#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1345# define YYSIZE_T __SIZE_TYPE__
1346#endif
1347#if ! defined (YYSIZE_T) && defined (size_t)
1348# define YYSIZE_T size_t
1349#endif
1350#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1351# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1352# define YYSIZE_T size_t
1353#endif
1354#if ! defined (YYSIZE_T)
1355# define YYSIZE_T unsigned int
1356#endif
Chris Lattner9d2fda62007-02-13 05:53:56 +00001357
Reid Spencer38c91a92007-02-28 02:24:54 +00001358#ifndef YY_
1359# if YYENABLE_NLS
1360# if ENABLE_NLS
1361# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1362# define YY_(msgid) dgettext ("bison-runtime", msgid)
1363# endif
1364# endif
1365# ifndef YY_
1366# define YY_(msgid) msgid
1367# endif
1368#endif
1369
1370#if ! defined (yyoverflow) || YYERROR_VERBOSE
1371
1372/* The parser invokes alloca or malloc; define the necessary symbols. */
1373
1374# ifdef YYSTACK_USE_ALLOCA
1375# if YYSTACK_USE_ALLOCA
1376# ifdef __GNUC__
1377# define YYSTACK_ALLOC __builtin_alloca
1378# else
1379# define YYSTACK_ALLOC alloca
1380# if defined (__STDC__) || defined (__cplusplus)
1381# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1382# define YYINCLUDED_STDLIB_H
1383# endif
1384# endif
1385# endif
1386# endif
1387
1388# ifdef YYSTACK_ALLOC
1389 /* Pacify GCC's `empty if-body' warning. */
1390# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1391# ifndef YYSTACK_ALLOC_MAXIMUM
1392 /* The OS might guarantee only one guard page at the bottom of the stack,
1393 and a page size can be as small as 4096 bytes. So we cannot safely
1394 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1395 to allow for a few compiler-allocated temporary stack slots. */
1396# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1397# endif
1398# else
1399# define YYSTACK_ALLOC YYMALLOC
1400# define YYSTACK_FREE YYFREE
1401# ifndef YYSTACK_ALLOC_MAXIMUM
1402# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1403# endif
1404# ifdef __cplusplus
1405extern "C" {
1406# endif
1407# ifndef YYMALLOC
1408# define YYMALLOC malloc
1409# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1410 && (defined (__STDC__) || defined (__cplusplus)))
1411void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1412# endif
1413# endif
1414# ifndef YYFREE
1415# define YYFREE free
1416# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1417 && (defined (__STDC__) || defined (__cplusplus)))
1418void free (void *); /* INFRINGES ON USER NAME SPACE */
1419# endif
1420# endif
1421# ifdef __cplusplus
1422}
1423# endif
1424# endif
1425#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1426
1427
1428#if (! defined (yyoverflow) \
1429 && (! defined (__cplusplus) \
1430 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1431
1432/* A type that is properly aligned for any stack member. */
1433union yyalloc
1434{
1435 short int yyss;
1436 YYSTYPE yyvs;
1437 };
1438
1439/* The size of the maximum gap between one aligned stack and the next. */
1440# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1441
1442/* The size of an array large to enough to hold all stacks, each with
1443 N elements. */
1444# define YYSTACK_BYTES(N) \
1445 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1446 + YYSTACK_GAP_MAXIMUM)
1447
1448/* Copy COUNT objects from FROM to TO. The source and destination do
1449 not overlap. */
1450# ifndef YYCOPY
1451# if defined (__GNUC__) && 1 < __GNUC__
1452# define YYCOPY(To, From, Count) \
1453 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1454# else
1455# define YYCOPY(To, From, Count) \
1456 do \
1457 { \
1458 YYSIZE_T yyi; \
1459 for (yyi = 0; yyi < (Count); yyi++) \
1460 (To)[yyi] = (From)[yyi]; \
1461 } \
1462 while (0)
1463# endif
1464# endif
1465
1466/* Relocate STACK from its old location to the new one. The
1467 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1468 elements in the stack, and YYPTR gives the new location of the
1469 stack. Advance YYPTR to a properly aligned location for the next
1470 stack. */
1471# define YYSTACK_RELOCATE(Stack) \
1472 do \
1473 { \
1474 YYSIZE_T yynewbytes; \
1475 YYCOPY (&yyptr->Stack, Stack, yysize); \
1476 Stack = &yyptr->Stack; \
1477 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1478 yyptr += yynewbytes / sizeof (*yyptr); \
1479 } \
1480 while (0)
Chris Lattner9d2fda62007-02-13 05:53:56 +00001481
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001482#endif
1483
Reid Spencer38c91a92007-02-28 02:24:54 +00001484#if defined (__STDC__) || defined (__cplusplus)
1485 typedef signed char yysigned_char;
Reid Spencer5cbf9852007-01-30 20:08:39 +00001486#else
Reid Spencer38c91a92007-02-28 02:24:54 +00001487 typedef short int yysigned_char;
Reid Spencer5cbf9852007-01-30 20:08:39 +00001488#endif
1489
Reid Spencer38c91a92007-02-28 02:24:54 +00001490/* YYFINAL -- State number of the termination state. */
1491#define YYFINAL 40
1492/* YYLAST -- Last index in YYTABLE. */
1493#define YYLAST 1429
1494
1495/* YYNTOKENS -- Number of terminals. */
1496#define YYNTOKENS 148
1497/* YYNNTS -- Number of nonterminals. */
1498#define YYNNTS 78
1499/* YYNRULES -- Number of rules. */
1500#define YYNRULES 286
1501/* YYNRULES -- Number of states. */
1502#define YYNSTATES 559
1503
1504/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1505#define YYUNDEFTOK 2
1506#define YYMAXUTOK 388
1507
1508#define YYTRANSLATE(YYX) \
1509 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1510
1511/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1512static const unsigned char yytranslate[] =
1513{
1514 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1515 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1516 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1517 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1518 138, 139, 136, 2, 135, 2, 2, 2, 2, 2,
1519 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1520 143, 134, 144, 2, 2, 2, 2, 2, 2, 2,
1521 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1522 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1523 2, 140, 137, 142, 2, 2, 2, 2, 2, 147,
1524 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1525 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1526 141, 2, 2, 145, 2, 146, 2, 2, 2, 2,
1527 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1528 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1529 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1530 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1531 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1532 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1533 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1534 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1535 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1536 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1537 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1538 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1539 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1540 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1541 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1542 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1543 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1544 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1545 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1546 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1547 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1548 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1549 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1550 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1551 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1552 125, 126, 127, 128, 129, 130, 131, 132, 133
1553};
1554
1555#if YYDEBUG
1556/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1557 YYRHS. */
1558static const unsigned short int yyprhs[] =
1559{
1560 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1561 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1562 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1563 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1564 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1565 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1566 119, 121, 122, 125, 126, 128, 130, 133, 134, 136,
1567 138, 140, 142, 144, 146, 148, 150, 151, 153, 154,
1568 156, 158, 159, 161, 163, 165, 167, 168, 170, 172,
1569 174, 176, 178, 181, 183, 185, 187, 189, 190, 193,
1570 195, 197, 198, 201, 202, 205, 206, 210, 213, 214,
1571 216, 217, 221, 223, 226, 228, 230, 232, 234, 236,
1572 238, 241, 243, 246, 252, 258, 264, 270, 274, 277,
1573 283, 288, 291, 293, 295, 297, 301, 303, 307, 309,
1574 310, 312, 316, 321, 325, 329, 334, 339, 343, 350,
1575 356, 359, 362, 365, 368, 371, 374, 377, 380, 383,
1576 386, 389, 392, 399, 405, 414, 421, 428, 436, 444,
1577 451, 460, 469, 473, 475, 477, 479, 481, 482, 484,
1578 487, 488, 492, 493, 497, 501, 503, 507, 511, 512,
1579 519, 520, 528, 529, 537, 540, 544, 546, 550, 554,
1580 558, 562, 564, 565, 571, 575, 577, 581, 583, 584,
1581 594, 596, 598, 603, 605, 607, 610, 614, 615, 617,
1582 619, 621, 623, 625, 627, 629, 631, 633, 637, 639,
1583 645, 647, 649, 651, 653, 655, 657, 660, 663, 666,
1584 670, 673, 674, 676, 679, 682, 686, 696, 706, 715,
1585 730, 732, 734, 741, 747, 750, 757, 765, 769, 775,
1586 776, 777, 781, 784, 786, 792, 798, 805, 812, 817,
1587 824, 829, 834, 841, 848, 851, 860, 862, 864, 865,
1588 869, 876, 880, 887, 890, 895, 902
1589};
1590
1591/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1592static const short int yyrhs[] =
1593{
1594 188, 0, -1, 68, -1, 69, -1, 70, -1, 71,
1595 -1, 72, -1, 73, -1, 74, -1, 75, -1, 76,
1596 -1, 80, -1, 81, -1, 82, -1, 77, -1, 78,
1597 -1, 79, -1, 111, -1, 112, -1, 113, -1, 114,
1598 -1, 115, -1, 116, -1, 117, -1, 118, -1, 119,
1599 -1, 120, -1, 121, -1, 122, -1, 85, -1, 86,
1600 -1, 87, -1, 88, -1, 89, -1, 90, -1, 91,
1601 -1, 92, -1, 93, -1, 94, -1, 95, -1, 96,
1602 -1, 97, -1, 98, -1, 99, -1, 100, -1, 101,
1603 -1, 102, -1, 103, -1, 104, -1, 91, -1, 92,
1604 -1, 93, -1, 94, -1, 23, -1, 24, -1, 11,
1605 -1, 12, -1, 13, -1, 16, -1, 19, -1, 156,
1606 -1, -1, 156, 134, -1, -1, 17, -1, 20, -1,
1607 159, 134, -1, -1, 37, -1, 39, -1, 38, -1,
1608 40, -1, 42, -1, 41, -1, 43, -1, 45, -1,
1609 -1, 133, -1, -1, 41, -1, 43, -1, -1, 37,
1610 -1, 38, -1, 39, -1, 42, -1, -1, 56, -1,
1611 57, -1, 58, -1, 59, -1, 60, -1, 55, 4,
1612 -1, 112, -1, 113, -1, 130, -1, 131, -1, -1,
1613 168, 167, -1, 129, -1, 167, -1, -1, 170, 169,
1614 -1, -1, 48, 4, -1, -1, 135, 48, 4, -1,
1615 31, 19, -1, -1, 173, -1, -1, 135, 176, 175,
1616 -1, 173, -1, 48, 4, -1, 11, -1, 12, -1,
1617 13, -1, 14, -1, 44, -1, 177, -1, 178, 136,
1618 -1, 210, -1, 137, 4, -1, 178, 138, 182, 139,
1619 170, -1, 10, 138, 182, 139, 170, -1, 140, 4,
1620 141, 178, 142, -1, 143, 4, 141, 178, 144, -1,
1621 145, 183, 146, -1, 145, 146, -1, 143, 145, 183,
1622 146, 144, -1, 143, 145, 146, 144, -1, 178, 168,
1623 -1, 178, -1, 10, -1, 179, -1, 181, 135, 179,
1624 -1, 181, -1, 181, 135, 34, -1, 34, -1, -1,
1625 178, -1, 183, 135, 178, -1, 178, 140, 186, 142,
1626 -1, 178, 140, 142, -1, 178, 147, 19, -1, 178,
1627 143, 186, 144, -1, 178, 145, 186, 146, -1, 178,
1628 145, 146, -1, 178, 143, 145, 186, 146, 144, -1,
1629 178, 143, 145, 146, 144, -1, 178, 35, -1, 178,
1630 36, -1, 178, 210, -1, 178, 185, -1, 178, 22,
1631 -1, 154, 3, -1, 154, 5, -1, 154, 4, -1,
1632 154, 6, -1, 11, 23, -1, 11, 24, -1, 155,
1633 9, -1, 151, 138, 184, 33, 178, 139, -1, 110,
1634 138, 184, 221, 139, -1, 124, 138, 184, 135, 184,
1635 135, 184, 139, -1, 149, 138, 184, 135, 184, 139,
1636 -1, 150, 138, 184, 135, 184, 139, -1, 83, 152,
1637 138, 184, 135, 184, 139, -1, 84, 153, 138, 184,
1638 135, 184, 139, -1, 126, 138, 184, 135, 184, 139,
1639 -1, 127, 138, 184, 135, 184, 135, 184, 139, -1,
1640 128, 138, 184, 135, 184, 135, 184, 139, -1, 186,
1641 135, 184, -1, 184, -1, 29, -1, 30, -1, 189,
1642 -1, -1, 190, -1, 189, 190, -1, -1, 28, 191,
1643 206, -1, -1, 27, 192, 207, -1, 53, 52, 196,
1644 -1, 21, -1, 158, 15, 178, -1, 158, 15, 10,
1645 -1, -1, 160, 163, 187, 184, 193, 175, -1, -1,
1646 160, 161, 163, 187, 184, 194, 175, -1, -1, 160,
1647 162, 163, 187, 178, 195, 175, -1, 46, 197, -1,
1648 49, 134, 198, -1, 19, -1, 47, 134, 19, -1,
1649 61, 134, 19, -1, 140, 199, 142, -1, 199, 135,
1650 19, -1, 19, -1, -1, 200, 135, 178, 168, 157,
1651 -1, 178, 168, 157, -1, 200, -1, 200, 135, 34,
1652 -1, 34, -1, -1, 166, 180, 159, 138, 201, 139,
1653 170, 174, 171, -1, 25, -1, 145, -1, 165, 163,
1654 202, 203, -1, 26, -1, 146, -1, 213, 205, -1,
1655 164, 163, 202, -1, -1, 54, -1, 3, -1, 4,
1656 -1, 9, -1, 23, -1, 24, -1, 35, -1, 36,
1657 -1, 22, -1, 143, 186, 144, -1, 185, -1, 52,
1658 208, 19, 135, 19, -1, 7, -1, 8, -1, 156,
1659 -1, 159, -1, 210, -1, 209, -1, 178, 211, -1,
1660 213, 214, -1, 204, 214, -1, 215, 158, 216, -1,
1661 215, 218, -1, -1, 18, -1, 62, 212, -1, 62,
1662 10, -1, 63, 14, 211, -1, 63, 11, 211, 135,
1663 14, 211, 135, 14, 211, -1, 64, 154, 211, 135,
1664 14, 211, 140, 217, 142, -1, 64, 154, 211, 135,
1665 14, 211, 140, 142, -1, 65, 166, 180, 211, 138,
1666 220, 139, 170, 33, 14, 211, 66, 14, 211, -1,
1667 66, -1, 67, -1, 217, 154, 209, 135, 14, 211,
1668 -1, 154, 209, 135, 14, 211, -1, 158, 223, -1,
1669 178, 140, 211, 135, 211, 142, -1, 219, 135, 140,
1670 211, 135, 211, 142, -1, 178, 211, 168, -1, 220,
1671 135, 178, 211, 168, -1, -1, -1, 221, 135, 212,
1672 -1, 51, 50, -1, 50, -1, 149, 178, 211, 135,
1673 211, -1, 150, 178, 211, 135, 211, -1, 83, 152,
1674 178, 211, 135, 211, -1, 84, 153, 178, 211, 135,
1675 211, -1, 151, 212, 33, 178, -1, 124, 212, 135,
1676 212, 135, 212, -1, 125, 212, 135, 178, -1, 126,
1677 212, 135, 212, -1, 127, 212, 135, 212, 135, 212,
1678 -1, 128, 212, 135, 212, 135, 212, -1, 123, 219,
1679 -1, 222, 166, 180, 211, 138, 220, 139, 170, -1,
1680 225, -1, 32, -1, -1, 105, 178, 172, -1, 105,
1681 178, 135, 11, 211, 172, -1, 106, 178, 172, -1,
1682 106, 178, 135, 11, 211, 172, -1, 107, 212, -1,
1683 224, 108, 178, 211, -1, 224, 109, 212, 135, 178,
1684 211, -1, 110, 178, 211, 221, -1
1685};
1686
1687/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1688static const unsigned short int yyrline[] =
1689{
Reid Spencer66728ef2007-03-20 01:13:36 +00001690 0, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
1691 1093, 1094, 1094, 1094, 1094, 1094, 1094, 1095, 1095, 1095,
1692 1095, 1095, 1095, 1096, 1096, 1096, 1096, 1096, 1096, 1099,
1693 1099, 1100, 1100, 1101, 1101, 1102, 1102, 1103, 1103, 1107,
1694 1107, 1108, 1108, 1109, 1109, 1110, 1110, 1111, 1111, 1112,
1695 1112, 1113, 1113, 1114, 1115, 1120, 1121, 1121, 1123, 1123,
1696 1124, 1124, 1128, 1132, 1137, 1137, 1139, 1143, 1149, 1150,
1697 1151, 1152, 1153, 1157, 1158, 1159, 1163, 1164, 1168, 1169,
1698 1170, 1174, 1175, 1176, 1177, 1178, 1181, 1182, 1183, 1184,
1699 1185, 1186, 1187, 1194, 1195, 1196, 1197, 1200, 1201, 1206,
1700 1207, 1210, 1211, 1218, 1219, 1225, 1226, 1234, 1242, 1243,
1701 1248, 1249, 1250, 1255, 1268, 1268, 1268, 1268, 1271, 1275,
1702 1279, 1286, 1291, 1299, 1319, 1339, 1344, 1356, 1366, 1370,
1703 1380, 1387, 1394, 1401, 1406, 1411, 1418, 1419, 1426, 1433,
1704 1441, 1447, 1459, 1487, 1503, 1532, 1560, 1585, 1604, 1630,
1705 1650, 1662, 1669, 1735, 1745, 1755, 1761, 1771, 1777, 1787,
1706 1792, 1797, 1805, 1817, 1839, 1847, 1853, 1864, 1869, 1874,
1707 1880, 1886, 1895, 1899, 1907, 1907, 1918, 1923, 1931, 1932,
1708 1936, 1936, 1940, 1940, 1943, 1946, 1958, 1982, 1993, 1993,
1709 2003, 2003, 2011, 2011, 2021, 2024, 2030, 2043, 2047, 2052,
1710 2054, 2059, 2064, 2073, 2083, 2094, 2098, 2107, 2116, 2121,
1711 2233, 2233, 2235, 2244, 2244, 2246, 2251, 2263, 2267, 2272,
1712 2276, 2280, 2284, 2288, 2292, 2296, 2300, 2304, 2329, 2333,
1713 2347, 2351, 2355, 2359, 2365, 2365, 2371, 2380, 2384, 2393,
1714 2402, 2411, 2415, 2420, 2424, 2428, 2433, 2443, 2462, 2471,
1715 2540, 2544, 2551, 2562, 2575, 2585, 2596, 2606, 2615, 2624,
1716 2627, 2628, 2635, 2639, 2644, 2665, 2682, 2696, 2710, 2722,
1717 2730, 2737, 2743, 2749, 2755, 2770, 2834, 2839, 2843, 2850,
1718 2857, 2865, 2872, 2880, 2888, 2902, 2919
Reid Spencer38c91a92007-02-28 02:24:54 +00001719};
1720#endif
1721
1722#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1723/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1724 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1725static const char *const yytname[] =
1726{
1727 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1728 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1729 "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1730 "STRINGCONSTANT", "ATSTRINGCONSTANT", "IMPLEMENTATION",
1731 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1732 "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1733 "DOTDOTDOT", "NULL_TOK", "UNDEF", "INTERNAL", "LINKONCE", "WEAK",
1734 "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1735 "EXTERNAL", "TARGET", "TRIPLE", "ALIGN", "DEPLIBS", "CALL", "TAIL",
1736 "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK", "CCC_TOK", "FASTCC_TOK",
1737 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1738 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1739 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
1740 "XOR", "SHL", "LSHR", "ASHR", "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT",
1741 "SLE", "SGE", "ULT", "UGT", "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT",
1742 "OLE", "OGE", "ORD", "UNO", "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE",
1743 "LOAD", "STORE", "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC",
1744 "FPEXT", "BITCAST", "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR",
1745 "PTRTOINT", "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT",
1746 "INSERTELEMENT", "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "DEFAULT",
1747 "HIDDEN", "'='", "','", "'*'", "'\\\\'", "'('", "')'", "'['", "'x'",
1748 "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept", "ArithmeticOps",
1749 "LogicalOps", "CastOps", "IPredicates", "FPredicates", "IntType",
1750 "FPType", "LocalName", "OptLocalName", "OptLocalAssign", "GlobalName",
1751 "OptGlobalAssign", "GVInternalLinkage", "GVExternalLinkage",
1752 "GVVisibilityStyle", "FunctionDeclareLinkage", "FunctionDefineLinkage",
1753 "OptCallingConv", "ParamAttr", "OptParamAttrs", "FuncAttr",
1754 "OptFuncAttrs", "OptAlign", "OptCAlign", "SectionString", "OptSection",
1755 "GlobalVarAttributes", "GlobalVarAttribute", "PrimType", "Types",
1756 "ArgType", "ResultTypes", "ArgTypeList", "ArgTypeListI", "TypeListI",
1757 "ConstVal", "ConstExpr", "ConstVector", "GlobalType", "Module",
1758 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1759 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1760 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1761 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
1762 "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
1763 "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
1764 "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
1765 "OptVolatile", "MemoryInst", 0
1766};
1767#endif
1768
1769# ifdef YYPRINT
1770/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1771 token YYLEX-NUM. */
1772static const unsigned short int yytoknum[] =
1773{
1774 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1775 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1776 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1777 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1778 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1779 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1780 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1781 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1782 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1783 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1784 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1785 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1786 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1787 385, 386, 387, 388, 61, 44, 42, 92, 40, 41,
1788 91, 120, 93, 60, 62, 123, 125, 99
1789};
1790# endif
1791
1792/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1793static const unsigned char yyr1[] =
1794{
1795 0, 148, 149, 149, 149, 149, 149, 149, 149, 149,
1796 149, 150, 150, 150, 150, 150, 150, 151, 151, 151,
1797 151, 151, 151, 151, 151, 151, 151, 151, 151, 152,
1798 152, 152, 152, 152, 152, 152, 152, 152, 152, 153,
1799 153, 153, 153, 153, 153, 153, 153, 153, 153, 153,
1800 153, 153, 153, 153, 153, 154, 155, 155, 156, 156,
1801 157, 157, 158, 158, 159, 159, 160, 160, 161, 161,
1802 161, 161, 161, 162, 162, 162, 163, 163, 164, 164,
1803 164, 165, 165, 165, 165, 165, 166, 166, 166, 166,
1804 166, 166, 166, 167, 167, 167, 167, 168, 168, 169,
1805 169, 170, 170, 171, 171, 172, 172, 173, 174, 174,
1806 175, 175, 176, 176, 177, 177, 177, 177, 178, 178,
1807 178, 178, 178, 178, 178, 178, 178, 178, 178, 178,
1808 178, 179, 180, 180, 181, 181, 182, 182, 182, 182,
1809 183, 183, 184, 184, 184, 184, 184, 184, 184, 184,
1810 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
1811 184, 184, 185, 185, 185, 185, 185, 185, 185, 185,
1812 185, 185, 186, 186, 187, 187, 188, 188, 189, 189,
1813 191, 190, 192, 190, 190, 190, 190, 190, 193, 190,
1814 194, 190, 195, 190, 190, 190, 196, 197, 197, 198,
1815 199, 199, 199, 200, 200, 201, 201, 201, 201, 202,
1816 203, 203, 204, 205, 205, 206, 207, 208, 208, 209,
1817 209, 209, 209, 209, 209, 209, 209, 209, 209, 209,
1818 210, 210, 210, 210, 211, 211, 212, 213, 213, 214,
1819 215, 215, 215, 216, 216, 216, 216, 216, 216, 216,
1820 216, 216, 217, 217, 218, 219, 219, 220, 220, 220,
1821 221, 221, 222, 222, 223, 223, 223, 223, 223, 223,
1822 223, 223, 223, 223, 223, 223, 223, 224, 224, 225,
1823 225, 225, 225, 225, 225, 225, 225
1824};
1825
1826/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1827static const unsigned char yyr2[] =
1828{
1829 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1830 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1831 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1832 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1833 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1834 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1835 1, 0, 2, 0, 1, 1, 2, 0, 1, 1,
1836 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
1837 1, 0, 1, 1, 1, 1, 0, 1, 1, 1,
1838 1, 1, 2, 1, 1, 1, 1, 0, 2, 1,
1839 1, 0, 2, 0, 2, 0, 3, 2, 0, 1,
1840 0, 3, 1, 2, 1, 1, 1, 1, 1, 1,
1841 2, 1, 2, 5, 5, 5, 5, 3, 2, 5,
1842 4, 2, 1, 1, 1, 3, 1, 3, 1, 0,
1843 1, 3, 4, 3, 3, 4, 4, 3, 6, 5,
1844 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1845 2, 2, 6, 5, 8, 6, 6, 7, 7, 6,
1846 8, 8, 3, 1, 1, 1, 1, 0, 1, 2,
1847 0, 3, 0, 3, 3, 1, 3, 3, 0, 6,
1848 0, 7, 0, 7, 2, 3, 1, 3, 3, 3,
1849 3, 1, 0, 5, 3, 1, 3, 1, 0, 9,
1850 1, 1, 4, 1, 1, 2, 3, 0, 1, 1,
1851 1, 1, 1, 1, 1, 1, 1, 3, 1, 5,
1852 1, 1, 1, 1, 1, 1, 2, 2, 2, 3,
1853 2, 0, 1, 2, 2, 3, 9, 9, 8, 14,
1854 1, 1, 6, 5, 2, 6, 7, 3, 5, 0,
1855 0, 3, 2, 1, 5, 5, 6, 6, 4, 6,
1856 4, 4, 6, 6, 2, 8, 1, 1, 0, 3,
1857 6, 3, 6, 2, 4, 6, 4
1858};
1859
1860/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1861 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1862 means the default is an error. */
1863static const unsigned short int yydefact[] =
1864{
1865 67, 58, 64, 59, 65, 185, 182, 180, 0, 0,
1866 0, 0, 0, 0, 76, 0, 67, 178, 78, 81,
1867 0, 0, 194, 0, 0, 62, 0, 66, 68, 70,
1868 69, 71, 73, 72, 74, 75, 77, 76, 76, 0,
1869 1, 179, 79, 80, 76, 183, 82, 83, 84, 85,
1870 76, 241, 181, 241, 0, 0, 202, 195, 196, 184,
1871 230, 231, 187, 114, 115, 116, 117, 118, 0, 0,
1872 0, 0, 232, 233, 119, 186, 121, 0, 0, 174,
1873 175, 0, 86, 86, 242, 238, 63, 213, 214, 215,
1874 237, 197, 198, 201, 0, 139, 122, 0, 0, 0,
1875 0, 128, 140, 0, 120, 139, 0, 0, 114, 115,
1876 116, 0, 0, 0, 188, 0, 87, 88, 89, 90,
1877 91, 0, 216, 0, 278, 240, 0, 199, 138, 97,
1878 134, 136, 0, 0, 0, 0, 0, 0, 127, 0,
1879 190, 192, 159, 160, 155, 157, 156, 158, 161, 154,
1880 150, 151, 2, 3, 4, 5, 6, 7, 8, 9,
1881 10, 14, 15, 16, 11, 12, 13, 0, 0, 0,
1882 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1883 27, 28, 0, 0, 0, 0, 0, 0, 0, 0,
1884 0, 0, 0, 153, 152, 110, 92, 133, 132, 0,
1885 210, 211, 212, 277, 263, 0, 0, 0, 0, 86,
1886 250, 251, 0, 0, 0, 0, 0, 0, 0, 0,
1887 0, 0, 0, 0, 0, 0, 0, 239, 86, 254,
1888 0, 276, 200, 131, 0, 101, 0, 0, 130, 0,
1889 141, 101, 110, 110, 29, 30, 31, 32, 33, 34,
1890 35, 36, 37, 38, 0, 53, 54, 49, 50, 51,
1891 52, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1892 48, 0, 0, 0, 0, 0, 0, 143, 173, 0,
1893 0, 0, 147, 0, 144, 0, 0, 0, 0, 189,
1894 0, 262, 244, 0, 243, 0, 0, 55, 0, 0,
1895 0, 0, 105, 105, 283, 0, 0, 274, 0, 0,
1896 0, 0, 0, 0, 0, 0, 0, 0, 0, 93,
1897 94, 95, 96, 98, 137, 135, 124, 125, 126, 129,
1898 123, 191, 193, 0, 0, 260, 0, 0, 0, 0,
1899 0, 142, 128, 140, 0, 145, 146, 0, 0, 0,
1900 0, 0, 112, 110, 208, 219, 220, 221, 226, 222,
1901 223, 224, 225, 217, 0, 228, 235, 234, 236, 0,
1902 245, 0, 0, 0, 0, 0, 279, 0, 281, 260,
1903 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1904 0, 0, 0, 99, 100, 102, 0, 0, 0, 0,
1905 0, 0, 0, 172, 149, 0, 0, 0, 0, 107,
1906 113, 111, 207, 97, 205, 0, 218, 0, 0, 0,
1907 0, 0, 0, 0, 0, 0, 0, 286, 0, 0,
1908 0, 270, 271, 0, 0, 0, 0, 268, 0, 284,
1909 0, 0, 0, 0, 163, 0, 0, 0, 0, 148,
1910 0, 0, 0, 61, 0, 101, 0, 227, 0, 0,
1911 259, 0, 0, 105, 106, 105, 0, 0, 0, 0,
1912 0, 264, 265, 259, 0, 0, 0, 261, 0, 169,
1913 0, 0, 165, 166, 162, 60, 204, 206, 97, 108,
1914 0, 0, 0, 0, 0, 266, 267, 0, 280, 282,
1915 0, 0, 269, 272, 273, 0, 285, 167, 168, 0,
1916 0, 0, 61, 109, 103, 229, 0, 0, 97, 0,
1917 101, 255, 0, 101, 164, 170, 171, 203, 0, 209,
1918 0, 248, 0, 0, 257, 0, 0, 256, 275, 104,
1919 246, 0, 247, 0, 97, 0, 0, 0, 258, 0,
1920 0, 0, 0, 253, 0, 0, 252, 0, 249
1921};
1922
1923/* YYDEFGOTO[NTERM-NUM]. */
1924static const short int yydefgoto[] =
1925{
1926 -1, 190, 191, 192, 254, 271, 111, 112, 72, 486,
1927 12, 73, 14, 37, 38, 39, 44, 50, 121, 323,
1928 233, 395, 326, 529, 376, 352, 514, 289, 353, 74,
1929 113, 130, 199, 131, 132, 103, 278, 365, 279, 81,
1930 15, 16, 17, 19, 18, 195, 242, 243, 59, 22,
1931 57, 94, 414, 415, 122, 202, 51, 89, 52, 45,
1932 417, 366, 76, 368, 294, 53, 85, 86, 227, 533,
1933 125, 307, 494, 398, 228, 229, 230, 231
1934};
1935
1936/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1937 STATE-NUM. */
1938#define YYPACT_NINF -440
1939static const short int yypact[] =
1940{
1941 406, -440, -440, -440, -440, -440, -440, -440, -2, -101,
1942 21, -55, 80, -20, 15, 132, 556, -440, 253, 197,
1943 -7, 87, -440, 20, 207, -440, 893, -440, -440, -440,
1944 -440, -440, -440, -440, -440, -440, -440, 97, 97, 125,
1945 -440, -440, -440, -440, 97, -440, -440, -440, -440, -440,
1946 97, 235, -440, 6, 240, 248, 258, -440, -440, -440,
1947 -440, -440, 134, -440, -440, -440, -440, -440, 269, 277,
1948 11, 123, -440, -440, -440, 33, -440, 125, 125, -440,
1949 -440, 1055, 128, 128, -440, -440, 47, -440, -440, -440,
1950 -440, -440, -440, -440, -57, 939, -440, 154, 156, 488,
1951 134, -440, 33, -112, -440, 939, 1055, 1149, 38, 281,
1952 289, 239, 293, 850, -440, 299, -440, -440, -440, -440,
1953 -440, 1168, -440, 2, 1301, -440, 285, -440, -440, 33,
1954 -440, 170, 167, 1149, 1149, 164, -97, 1149, -440, 171,
1955 -440, 33, -440, -440, -440, -440, -440, -440, -440, -440,
1956 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1957 -440, -440, -440, -440, -440, -440, -440, 254, 446, 174,
1958 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1959 -440, -440, 175, 176, 177, 178, 109, 1203, 676, 290,
1960 181, 182, 183, -440, -440, 187, -440, 134, 33, 93,
1961 -440, -440, -440, -440, -440, 273, 1217, 127, 313, 128,
1962 -440, -440, 254, 446, 1149, 1149, 1149, 1149, 1149, 1149,
1963 1149, 1149, 1149, 1149, 1149, 1149, 1149, -440, 128, -440,
1964 70, -440, -440, -29, 1098, -440, 72, -39, -440, 184,
1965 33, -440, 187, 187, -440, -440, -440, -440, -440, -440,
1966 -440, -440, -440, -440, 188, -440, -440, -440, -440, -440,
1967 -440, -440, -440, -440, -440, -440, -440, -440, -440, -440,
1968 -440, 196, 1055, 1055, 1055, 1055, 1055, -440, -440, 22,
1969 771, -44, -440, -59, -440, 1055, 1055, 1055, -9, -440,
1970 198, -440, 134, 591, -440, 728, 728, -440, 728, 1168,
1971 1149, 1149, 112, 147, -440, 591, 75, 190, 200, 214,
1972 215, 217, 219, 591, 591, 322, 1168, 1149, 1149, -440,
1973 -440, -440, -440, -440, -440, -440, -41, -440, -440, -440,
1974 -41, -440, -440, 1055, 1055, -440, 230, 231, 232, 233,
1975 1055, -440, 225, 850, -43, -440, -440, 236, 241, 337,
1976 355, 371, -440, 187, 1114, -440, -440, -440, -440, -440,
1977 -440, -440, -440, 323, 1055, -440, -440, -440, -440, 243,
1978 -440, 244, 728, 591, 591, 17, -440, 19, -440, -440,
1979 728, 242, 1149, 1149, 1149, 1149, 1149, 245, 246, 1149,
1980 728, 591, 249, -440, -440, -440, 252, 255, -24, 1055,
1981 1055, 1055, 1055, -440, -440, 247, 1055, 1055, 1149, -440,
1982 -440, -440, -440, 33, 257, 260, -440, 375, -37, 383,
1983 386, 264, 268, 272, 728, 400, 728, 275, 282, 728,
1984 284, 33, -440, 295, 296, 728, 728, 33, 270, -440,
1985 1149, 1055, 1055, 1149, -440, 297, 298, 301, 303, -440,
1986 300, 302, 150, 32, 1133, -440, 305, -440, 728, 728,
1987 1149, 728, 728, 307, -440, 307, 728, 311, 1149, 1149,
1988 1149, -440, -440, 1149, 591, 308, 310, -440, 1055, -440,
1989 1055, 1055, -440, -440, -440, -440, -440, -440, 33, 46,
1990 397, 315, 314, 591, 26, -440, -440, 376, -440, -440,
1991 309, 728, -440, -440, -440, 89, -440, -440, -440, 317,
1992 319, 321, 32, -440, 413, -440, 449, 7, -440, 1149,
1993 -440, -440, 324, -440, -440, -440, -440, -440, 460, -440,
1994 728, -440, 976, 9, -29, 591, 149, -440, -41, -440,
1995 -440, 330, -440, 976, -440, 453, 454, 336, -29, 728,
1996 728, 461, 412, -440, 728, 465, -440, 728, -440
1997};
1998
1999/* YYPGOTO[NTERM-NUM]. */
2000static const short int yypgoto[] =
2001{
2002 -440, 358, 359, 361, 274, 276, -206, -440, 0, -19,
2003 401, 13, -440, -440, -440, 31, -440, -440, -178, -309,
2004 -394, -440, -236, -440, -297, -1, -440, -207, -440, -440,
2005 -25, 263, -252, -440, 387, 404, -69, -110, -162, 160,
2006 -440, -440, 490, -440, -440, -440, -440, -440, -440, -440,
2007 -440, -440, -440, -440, 426, -440, -440, -440, -440, -440,
2008 -440, -439, -73, 100, -212, -440, 457, -440, -440, -440,
2009 -440, -440, 40, 135, -440, -440, -440, -440
2010};
2011
2012/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2013 positive, shift that token. If negative, reduce the rule which
2014 number is the opposite. If zero, do what YYDEFACT says.
2015 If YYTABLE_NINF, syntax error. */
2016#define YYTABLE_NINF -178
2017static const short int yytable[] =
2018{
2019 11, 75, 298, 193, 304, 330, 378, 308, 309, 310,
2020 311, 312, 114, 13, 315, 98, 11, 394, 297, 453,
2021 297, 394, 350, 137, 84, 281, 283, 200, 424, 13,
2022 426, 299, 87, 23, 138, 331, 332, 140, 137, 351,
2023 194, -55, -55, -55, -55, 20, 102, 372, 1, 239,
2024 316, 3, 28, 29, 30, 31, 32, 33, 34, 21,
2025 35, 142, 143, 1, 390, 425, 3, 425, 77, 78,
2026 129, 319, 320, 24, 102, 82, 340, 350, 126, 25,
2027 129, 83, 141, 319, 320, 127, 11, 346, 393, 321,
2028 322, 340, 340, 541, 512, 26, 198, 104, 340, 105,
2029 345, 321, 322, 405, 547, 328, 392, 457, 236, 237,
2030 2, 443, 240, 4, 27, 444, 60, 61, 344, 100,
2031 108, 109, 110, 66, 534, 1, 2, 54, 3, 4,
2032 60, 61, 40, 100, 63, 64, 65, 66, 295, 1,
2033 2, 296, 3, 4, 319, 320, 411, 201, 36, 531,
2034 548, 542, 88, 67, 79, 80, 99, 340, 319, 320,
2035 56, 519, 321, 322, 341, 520, 498, 67, 499, 104,
2036 430, 105, 432, 433, 434, 393, 321, 322, 317, 318,
2037 394, 293, 545, 115, 116, 117, 118, 119, 120, 302,
2038 303, 293, 305, 306, 293, 293, 293, 293, 293, 313,
2039 314, 293, 418, 335, 336, 337, 338, 339, 104, 129,
2040 105, 104, 290, 105, 327, 380, 347, 348, 349, 489,
2041 367, 55, 367, 367, 519, 367, 58, 394, 523, 394,
2042 36, 477, 367, 193, 46, 47, 48, 106, 107, 49,
2043 367, 367, 144, 145, 146, 147, 68, 375, 104, 69,
2044 105, 277, 70, 84, 71, 343, 502, 503, 504, 91,
2045 68, 319, 320, 69, 396, 397, 70, 92, 71, 101,
2046 194, 403, 95, 96, 198, 373, 374, 93, 393, 321,
2047 322, 97, 377, 104, 536, 105, 104, 538, 105, 484,
2048 -56, 198, 391, 293, 42, 133, 43, 134, -57, 367,
2049 367, 367, 148, 196, 232, 234, 235, 367, 238, 284,
2050 241, 532, 272, 273, 274, 275, 276, 367, 367, 285,
2051 286, 287, 288, 291, 297, 381, 333, 543, 329, 413,
2052 445, 446, 447, 448, 334, 382, 354, 450, 451, 244,
2053 245, 246, 247, 248, 249, 250, 251, 252, 253, 383,
2054 384, 367, 385, 367, 386, 389, 367, 293, 431, 293,
2055 293, 293, 367, 367, 437, 399, 400, 401, 402, 404,
2056 408, 406, 475, 476, 409, 410, 407, 416, 419, 420,
2057 435, 436, 429, 452, 440, 367, 367, 441, 367, 367,
2058 442, 449, 454, 367, 456, 369, 370, 458, 371, 455,
2059 459, 367, 460, 461, 464, 379, -177, 462, 473, 509,
2060 443, 510, 511, 387, 388, 474, 515, 466, 293, 468,
2061 367, -63, 1, 2, 425, 3, 4, 5, 367, 488,
2062 469, 470, 478, 6, 7, 493, 480, 479, 481, 482,
2063 490, 483, 497, 293, 293, 293, 501, 507, 493, 508,
2064 516, 521, 8, 485, 517, 9, 524, 367, 525, 10,
2065 526, 528, 367, 530, 539, 546, 537, 549, 550, 255,
2066 256, 551, 421, 422, 423, 554, 367, 367, 555, 557,
2067 428, 367, 224, 225, 367, 226, 300, 124, 513, 301,
2068 438, 439, 139, 527, 535, 60, 61, 325, 100, 63,
2069 64, 65, 66, 136, 1, 2, 41, 3, 4, 123,
2070 90, 0, 485, 505, 427, 0, 0, 0, 0, 0,
2071 0, 0, 0, 0, 463, 0, 465, 0, 0, 467,
2072 0, 0, 67, 0, 0, 471, 472, 257, 258, 259,
2073 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
2074 270, 0, 0, 0, 0, 0, -176, 0, 491, 492,
2075 0, 495, 496, 0, 0, 0, 500, 0, 0, 0,
2076 0, -63, 1, 2, 506, 3, 4, 5, 0, 0,
2077 0, 0, 0, 6, 7, 0, 0, 0, 0, 0,
2078 0, 0, 0, 518, 355, 356, 0, 0, 60, 61,
2079 357, 522, 8, 0, 0, 9, 0, 1, 2, 10,
2080 3, 4, 0, 358, 359, 360, 0, 0, 0, 0,
2081 0, 0, 0, 0, 0, 68, 361, 362, 69, 0,
2082 540, 70, 0, 71, 135, 544, 0, 0, 0, 0,
2083 0, 0, 0, 363, 0, 0, 0, 0, 0, 552,
2084 553, 0, 0, 0, 556, 0, 0, 558, 0, 152,
2085 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
2086 163, 164, 165, 166, 167, 168, 0, 0, 0, 0,
2087 0, 0, 0, 60, 61, 0, 100, 108, 109, 110,
2088 66, 0, 1, 2, 0, 3, 4, 0, 0, 0,
2089 0, 169, 170, 171, 172, 173, 174, 175, 176, 177,
2090 178, 179, 180, 181, 0, 182, 0, 183, 184, 185,
2091 67, 0, 0, 0, 0, 0, 0, 104, 0, 105,
2092 0, 355, 356, 0, 364, 60, 61, 357, 0, 0,
2093 0, 0, 0, 0, 1, 2, 0, 3, 4, 0,
2094 358, 359, 360, 0, 0, 0, 0, 0, 0, 0,
2095 0, 0, 0, 361, 362, 0, 0, 0, 0, 0,
2096 0, 0, 0, 0, 0, 0, 0, 0, 60, 61,
2097 363, 100, 108, 109, 110, 66, 0, 1, 2, 0,
2098 3, 4, 0, 0, 0, 0, 152, 153, 154, 155,
2099 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
2100 166, 167, 168, 68, 0, 67, 69, 0, 0, 70,
2101 0, 71, 282, 0, 0, 0, 0, 0, 0, 0,
2102 0, 0, 0, 0, 0, 0, 0, 0, 169, 170,
2103 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
2104 181, 0, 182, 0, 183, 184, 185, 60, 61, 0,
2105 0, 0, 0, 0, 0, 0, 1, 2, 0, 3,
2106 4, 364, 149, 0, 0, 0, 0, 0, 0, 0,
2107 0, 0, 0, 0, 0, 150, 151, 0, 0, 0,
2108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2109 60, 61, 0, 62, 63, 64, 65, 66, 68, 1,
2110 2, 69, 3, 4, 70, 0, 71, 342, 152, 153,
2111 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
2112 164, 165, 166, 167, 168, 0, 0, 67, 0, 0,
2113 0, 0, 0, 0, 0, 0, 60, 61, 0, 100,
2114 63, 64, 65, 66, 0, 1, 2, 0, 3, 4,
2115 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
2116 179, 180, 181, 128, 182, 0, 183, 184, 185, 355,
2117 356, 0, 0, 67, 0, 357, 104, 0, 105, 0,
2118 186, 0, 0, 187, 0, 188, 0, 189, 358, 359,
2119 360, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2120 0, 361, 362, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 0, 0, 0, 0, 0, 0, 363, 0,
2122 68, 0, 0, 69, 0, 0, 70, 0, 71, 0,
2123 0, 0, 0, 0, 152, 153, 154, 155, 156, 157,
2124 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
2125 168, 0, 60, 61, 0, 100, 108, 109, 110, 66,
2126 0, 1, 2, 0, 3, 4, 68, 0, 0, 69,
2127 0, 0, 70, 0, 71, 0, 169, 170, 171, 172,
2128 173, 174, 175, 176, 177, 178, 179, 180, 181, 67,
2129 182, 0, 183, 184, 185, 60, 61, 0, 100, 63,
2130 64, 65, 66, 0, 1, 2, 0, 3, 4, 364,
2131 0, 60, 61, 0, 100, 63, 64, 65, 66, 0,
2132 1, 2, 324, 3, 4, 0, 0, 0, 0, 0,
2133 60, 61, 67, 100, 63, 64, 65, 66, 412, 1,
2134 2, 0, 3, 4, 0, 0, 60, 61, 67, 100,
2135 63, 64, 65, 66, 0, 1, 2, 487, 3, 4,
2136 0, 0, 0, 0, 0, 60, 61, 67, 197, 63,
2137 64, 65, 66, 0, 1, 2, 0, 3, 4, 0,
2138 0, 0, 68, 67, 0, 69, 0, 0, 70, 0,
2139 71, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2140 60, 61, 67, 100, 108, 109, 110, 66, 0, 1,
2141 2, 0, 3, 4, 60, 61, 0, 292, 63, 64,
2142 65, 66, 0, 1, 2, 68, 3, 4, 69, 0,
2143 0, 70, 0, 71, 0, 0, 0, 67, 0, 0,
2144 0, 68, 0, 0, 69, 0, 0, 70, 0, 71,
2145 0, 67, 0, 0, 0, 0, 0, 0, 0, 0,
2146 68, 0, 0, 69, 0, 0, 70, 0, 71, 0,
2147 0, 0, 0, 0, 0, 0, 68, 0, 0, 69,
2148 0, 0, 70, 0, 71, 0, 0, 0, 0, 0,
2149 0, 0, 0, 0, 0, 68, 0, 0, 69, 0,
2150 0, 70, 0, 71, 0, 0, 0, 0, 0, 0,
2151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2152 0, 0, 0, 203, 0, 0, 0, 0, 0, 0,
2153 68, 0, 0, 69, 0, 0, 70, 0, 280, 0,
2154 0, 204, 205, 0, 68, 0, 0, 69, 0, 0,
2155 70, 0, 71, 206, 207, 208, 209, 210, 211, 152,
2156 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
2157 163, 164, 165, 166, 212, 213, 0, 0, 0, 0,
2158 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2159 0, 0, 0, 0, 0, 0, 214, 215, 216, 0,
2160 0, 217, 170, 171, 172, 173, 174, 175, 176, 177,
2161 178, 179, 180, 181, 218, 219, 220, 221, 222, 223
2162};
2163
2164static const short int yycheck[] =
2165{
2166 0, 26, 208, 113, 216, 241, 303, 219, 220, 221,
2167 222, 223, 81, 0, 226, 4, 16, 326, 11, 413,
2168 11, 330, 31, 135, 18, 187, 188, 25, 11, 16,
2169 11, 209, 26, 134, 146, 242, 243, 106, 135, 48,
2170 113, 3, 4, 5, 6, 47, 71, 299, 16, 146,
2171 228, 19, 37, 38, 39, 40, 41, 42, 43, 61,
2172 45, 23, 24, 16, 316, 48, 19, 48, 37, 38,
2173 95, 112, 113, 52, 99, 44, 135, 31, 135, 134,
2174 105, 50, 107, 112, 113, 142, 86, 146, 129, 130,
2175 131, 135, 135, 532, 488, 15, 121, 136, 135, 138,
2176 144, 130, 131, 146, 543, 144, 318, 144, 133, 134,
2177 17, 135, 137, 20, 134, 139, 7, 8, 280, 10,
2178 11, 12, 13, 14, 518, 16, 17, 134, 19, 20,
2179 7, 8, 0, 10, 11, 12, 13, 14, 11, 16,
2180 17, 14, 19, 20, 112, 113, 353, 145, 133, 142,
2181 544, 142, 146, 44, 29, 30, 145, 135, 112, 113,
2182 140, 135, 130, 131, 142, 139, 463, 44, 465, 136,
2183 382, 138, 384, 385, 386, 129, 130, 131, 108, 109,
2184 489, 206, 33, 55, 56, 57, 58, 59, 60, 214,
2185 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
2186 225, 226, 364, 272, 273, 274, 275, 276, 136, 234,
2187 138, 136, 199, 138, 142, 140, 285, 286, 287, 455,
2188 293, 134, 295, 296, 135, 298, 19, 536, 139, 538,
2189 133, 443, 305, 343, 37, 38, 39, 77, 78, 42,
2190 313, 314, 3, 4, 5, 6, 137, 135, 136, 140,
2191 138, 142, 143, 18, 145, 280, 468, 469, 470, 19,
2192 137, 112, 113, 140, 333, 334, 143, 19, 145, 146,
2193 343, 340, 138, 4, 299, 300, 301, 19, 129, 130,
2194 131, 4, 135, 136, 520, 138, 136, 523, 138, 139,
2195 9, 316, 317, 318, 41, 141, 43, 141, 9, 372,
2196 373, 374, 9, 4, 19, 135, 139, 380, 144, 19,
2197 139, 517, 138, 138, 138, 138, 138, 390, 391, 138,
2198 138, 138, 135, 50, 11, 135, 138, 533, 144, 354,
2199 399, 400, 401, 402, 138, 135, 138, 406, 407, 85,
2200 86, 87, 88, 89, 90, 91, 92, 93, 94, 135,
2201 135, 424, 135, 426, 135, 33, 429, 382, 383, 384,
2202 385, 386, 435, 436, 389, 135, 135, 135, 135, 144,
2203 33, 135, 441, 442, 19, 4, 135, 54, 135, 135,
2204 135, 135, 140, 408, 135, 458, 459, 135, 461, 462,
2205 135, 144, 135, 466, 19, 295, 296, 14, 298, 139,
2206 14, 474, 138, 135, 4, 305, 0, 135, 138, 478,
2207 135, 480, 481, 313, 314, 440, 19, 135, 443, 135,
2208 493, 15, 16, 17, 48, 19, 20, 21, 501, 454,
2209 135, 135, 135, 27, 28, 460, 135, 139, 135, 139,
2210 135, 139, 135, 468, 469, 470, 135, 139, 473, 139,
2211 135, 142, 46, 453, 140, 49, 139, 530, 139, 53,
2212 139, 48, 535, 14, 4, 135, 142, 14, 14, 23,
2213 24, 135, 372, 373, 374, 14, 549, 550, 66, 14,
2214 380, 554, 124, 124, 557, 124, 212, 86, 489, 213,
2215 390, 391, 105, 512, 519, 7, 8, 234, 10, 11,
2216 12, 13, 14, 99, 16, 17, 16, 19, 20, 83,
2217 53, -1, 512, 473, 379, -1, -1, -1, -1, -1,
2218 -1, -1, -1, -1, 424, -1, 426, -1, -1, 429,
2219 -1, -1, 44, -1, -1, 435, 436, 91, 92, 93,
2220 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2221 104, -1, -1, -1, -1, -1, 0, -1, 458, 459,
2222 -1, 461, 462, -1, -1, -1, 466, -1, -1, -1,
2223 -1, 15, 16, 17, 474, 19, 20, 21, -1, -1,
2224 -1, -1, -1, 27, 28, -1, -1, -1, -1, -1,
2225 -1, -1, -1, 493, 3, 4, -1, -1, 7, 8,
2226 9, 501, 46, -1, -1, 49, -1, 16, 17, 53,
2227 19, 20, -1, 22, 23, 24, -1, -1, -1, -1,
2228 -1, -1, -1, -1, -1, 137, 35, 36, 140, -1,
2229 530, 143, -1, 145, 146, 535, -1, -1, -1, -1,
2230 -1, -1, -1, 52, -1, -1, -1, -1, -1, 549,
2231 550, -1, -1, -1, 554, -1, -1, 557, -1, 68,
2232 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2233 79, 80, 81, 82, 83, 84, -1, -1, -1, -1,
2234 -1, -1, -1, 7, 8, -1, 10, 11, 12, 13,
2235 14, -1, 16, 17, -1, 19, 20, -1, -1, -1,
2236 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2237 119, 120, 121, 122, -1, 124, -1, 126, 127, 128,
2238 44, -1, -1, -1, -1, -1, -1, 136, -1, 138,
2239 -1, 3, 4, -1, 143, 7, 8, 9, -1, -1,
2240 -1, -1, -1, -1, 16, 17, -1, 19, 20, -1,
2241 22, 23, 24, -1, -1, -1, -1, -1, -1, -1,
2242 -1, -1, -1, 35, 36, -1, -1, -1, -1, -1,
2243 -1, -1, -1, -1, -1, -1, -1, -1, 7, 8,
2244 52, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2245 19, 20, -1, -1, -1, -1, 68, 69, 70, 71,
2246 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
2247 82, 83, 84, 137, -1, 44, 140, -1, -1, 143,
2248 -1, 145, 146, -1, -1, -1, -1, -1, -1, -1,
2249 -1, -1, -1, -1, -1, -1, -1, -1, 110, 111,
2250 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
2251 122, -1, 124, -1, 126, 127, 128, 7, 8, -1,
2252 -1, -1, -1, -1, -1, -1, 16, 17, -1, 19,
2253 20, 143, 22, -1, -1, -1, -1, -1, -1, -1,
2254 -1, -1, -1, -1, -1, 35, 36, -1, -1, -1,
2255 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2256 7, 8, -1, 10, 11, 12, 13, 14, 137, 16,
2257 17, 140, 19, 20, 143, -1, 145, 146, 68, 69,
2258 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2259 80, 81, 82, 83, 84, -1, -1, 44, -1, -1,
2260 -1, -1, -1, -1, -1, -1, 7, 8, -1, 10,
2261 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2262 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
2263 120, 121, 122, 34, 124, -1, 126, 127, 128, 3,
2264 4, -1, -1, 44, -1, 9, 136, -1, 138, -1,
2265 140, -1, -1, 143, -1, 145, -1, 147, 22, 23,
2266 24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2267 -1, 35, 36, -1, -1, -1, -1, -1, -1, -1,
2268 -1, -1, -1, -1, -1, -1, -1, -1, 52, -1,
2269 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2270 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
2271 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2272 84, -1, 7, 8, -1, 10, 11, 12, 13, 14,
2273 -1, 16, 17, -1, 19, 20, 137, -1, -1, 140,
2274 -1, -1, 143, -1, 145, -1, 110, 111, 112, 113,
2275 114, 115, 116, 117, 118, 119, 120, 121, 122, 44,
2276 124, -1, 126, 127, 128, 7, 8, -1, 10, 11,
2277 12, 13, 14, -1, 16, 17, -1, 19, 20, 143,
2278 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2279 16, 17, 34, 19, 20, -1, -1, -1, -1, -1,
2280 7, 8, 44, 10, 11, 12, 13, 14, 34, 16,
2281 17, -1, 19, 20, -1, -1, 7, 8, 44, 10,
2282 11, 12, 13, 14, -1, 16, 17, 34, 19, 20,
2283 -1, -1, -1, -1, -1, 7, 8, 44, 10, 11,
2284 12, 13, 14, -1, 16, 17, -1, 19, 20, -1,
2285 -1, -1, 137, 44, -1, 140, -1, -1, 143, -1,
2286 145, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2287 7, 8, 44, 10, 11, 12, 13, 14, -1, 16,
2288 17, -1, 19, 20, 7, 8, -1, 10, 11, 12,
2289 13, 14, -1, 16, 17, 137, 19, 20, 140, -1,
2290 -1, 143, -1, 145, -1, -1, -1, 44, -1, -1,
2291 -1, 137, -1, -1, 140, -1, -1, 143, -1, 145,
2292 -1, 44, -1, -1, -1, -1, -1, -1, -1, -1,
2293 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2294 -1, -1, -1, -1, -1, -1, 137, -1, -1, 140,
2295 -1, -1, 143, -1, 145, -1, -1, -1, -1, -1,
2296 -1, -1, -1, -1, -1, 137, -1, -1, 140, -1,
2297 -1, 143, -1, 145, -1, -1, -1, -1, -1, -1,
2298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2299 -1, -1, -1, 32, -1, -1, -1, -1, -1, -1,
2300 137, -1, -1, 140, -1, -1, 143, -1, 145, -1,
2301 -1, 50, 51, -1, 137, -1, -1, 140, -1, -1,
2302 143, -1, 145, 62, 63, 64, 65, 66, 67, 68,
2303 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2304 79, 80, 81, 82, 83, 84, -1, -1, -1, -1,
2305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2306 -1, -1, -1, -1, -1, -1, 105, 106, 107, -1,
2307 -1, 110, 111, 112, 113, 114, 115, 116, 117, 118,
2308 119, 120, 121, 122, 123, 124, 125, 126, 127, 128
2309};
2310
2311/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2312 symbol of state STATE-NUM. */
2313static const unsigned char yystos[] =
2314{
2315 0, 16, 17, 19, 20, 21, 27, 28, 46, 49,
2316 53, 156, 158, 159, 160, 188, 189, 190, 192, 191,
2317 47, 61, 197, 134, 52, 134, 15, 134, 37, 38,
2318 39, 40, 41, 42, 43, 45, 133, 161, 162, 163,
2319 0, 190, 41, 43, 164, 207, 37, 38, 39, 42,
2320 165, 204, 206, 213, 134, 134, 140, 198, 19, 196,
2321 7, 8, 10, 11, 12, 13, 14, 44, 137, 140,
2322 143, 145, 156, 159, 177, 178, 210, 163, 163, 29,
2323 30, 187, 163, 163, 18, 214, 215, 26, 146, 205,
2324 214, 19, 19, 19, 199, 138, 4, 4, 4, 145,
2325 10, 146, 178, 183, 136, 138, 187, 187, 11, 12,
2326 13, 154, 155, 178, 184, 55, 56, 57, 58, 59,
2327 60, 166, 202, 202, 158, 218, 135, 142, 34, 178,
2328 179, 181, 182, 141, 141, 146, 183, 135, 146, 182,
2329 184, 178, 23, 24, 3, 4, 5, 6, 9, 22,
2330 35, 36, 68, 69, 70, 71, 72, 73, 74, 75,
2331 76, 77, 78, 79, 80, 81, 82, 83, 84, 110,
2332 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2333 121, 122, 124, 126, 127, 128, 140, 143, 145, 147,
2334 149, 150, 151, 185, 210, 193, 4, 10, 178, 180,
2335 25, 145, 203, 32, 50, 51, 62, 63, 64, 65,
2336 66, 67, 83, 84, 105, 106, 107, 110, 123, 124,
2337 125, 126, 127, 128, 149, 150, 151, 216, 222, 223,
2338 224, 225, 19, 168, 135, 139, 178, 178, 144, 146,
2339 178, 139, 194, 195, 85, 86, 87, 88, 89, 90,
2340 91, 92, 93, 94, 152, 23, 24, 91, 92, 93,
2341 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
2342 104, 153, 138, 138, 138, 138, 138, 142, 184, 186,
2343 145, 186, 146, 186, 19, 138, 138, 138, 135, 175,
2344 159, 50, 10, 178, 212, 11, 14, 11, 154, 166,
2345 152, 153, 178, 178, 212, 178, 178, 219, 212, 212,
2346 212, 212, 212, 178, 178, 212, 166, 108, 109, 112,
2347 113, 130, 131, 167, 34, 179, 170, 142, 144, 144,
2348 170, 175, 175, 138, 138, 184, 184, 184, 184, 184,
2349 135, 142, 146, 178, 186, 144, 146, 184, 184, 184,
2350 31, 48, 173, 176, 138, 3, 4, 9, 22, 23,
2351 24, 35, 36, 52, 143, 185, 209, 210, 211, 211,
2352 211, 211, 180, 178, 178, 135, 172, 135, 172, 211,
2353 140, 135, 135, 135, 135, 135, 135, 211, 211, 33,
2354 180, 178, 212, 129, 167, 169, 184, 184, 221, 135,
2355 135, 135, 135, 184, 144, 146, 135, 135, 33, 19,
2356 4, 175, 34, 178, 200, 201, 54, 208, 186, 135,
2357 135, 211, 211, 211, 11, 48, 11, 221, 211, 140,
2358 212, 178, 212, 212, 212, 135, 135, 178, 211, 211,
2359 135, 135, 135, 135, 139, 184, 184, 184, 184, 144,
2360 184, 184, 178, 168, 135, 139, 19, 144, 14, 14,
2361 138, 135, 135, 211, 4, 211, 135, 211, 135, 135,
2362 135, 211, 211, 138, 178, 184, 184, 212, 135, 139,
2363 135, 135, 139, 139, 139, 156, 157, 34, 178, 170,
2364 135, 211, 211, 178, 220, 211, 211, 135, 172, 172,
2365 211, 135, 212, 212, 212, 220, 211, 139, 139, 184,
2366 184, 184, 168, 173, 174, 19, 135, 140, 211, 135,
2367 139, 142, 211, 139, 139, 139, 139, 157, 48, 171,
2368 14, 142, 154, 217, 168, 178, 170, 142, 170, 4,
2369 211, 209, 142, 154, 211, 33, 135, 209, 168, 14,
2370 14, 135, 211, 211, 14, 66, 211, 14, 211
2371};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002372
2373#define yyerrok (yyerrstatus = 0)
2374#define yyclearin (yychar = YYEMPTY)
Reid Spencer38c91a92007-02-28 02:24:54 +00002375#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002376#define YYEOF 0
Reid Spencer38c91a92007-02-28 02:24:54 +00002377
Reid Spencer68a24bd2005-08-27 18:50:39 +00002378#define YYACCEPT goto yyacceptlab
Reid Spencer38c91a92007-02-28 02:24:54 +00002379#define YYABORT goto yyabortlab
2380#define YYERROR goto yyerrorlab
2381
2382
2383/* Like YYERROR except do call yyerror. This remains here temporarily
2384 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002385 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer38c91a92007-02-28 02:24:54 +00002386
Reid Spencer68a24bd2005-08-27 18:50:39 +00002387#define YYFAIL goto yyerrlab
Reid Spencer38c91a92007-02-28 02:24:54 +00002388
Reid Spencer68a24bd2005-08-27 18:50:39 +00002389#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer38c91a92007-02-28 02:24:54 +00002390
2391#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002392do \
2393 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer38c91a92007-02-28 02:24:54 +00002394 { \
2395 yychar = (Token); \
2396 yylval = (Value); \
2397 yytoken = YYTRANSLATE (yychar); \
Chris Lattner9d2fda62007-02-13 05:53:56 +00002398 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002399 goto yybackup; \
2400 } \
2401 else \
Reid Spencer38c91a92007-02-28 02:24:54 +00002402 { \
2403 yyerror (YY_("syntax error: cannot back up")); \
2404 YYERROR; \
2405 } \
Chris Lattner9d2fda62007-02-13 05:53:56 +00002406while (0)
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002407
Reid Spencer38c91a92007-02-28 02:24:54 +00002408
Reid Spencer68a24bd2005-08-27 18:50:39 +00002409#define YYTERROR 1
2410#define YYERRCODE 256
2411
Reid Spencer38c91a92007-02-28 02:24:54 +00002412
2413/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2414 If N is 0, then set CURRENT to the empty location which ends
2415 the previous symbol: RHS[0] (always defined). */
2416
2417#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2418#ifndef YYLLOC_DEFAULT
2419# define YYLLOC_DEFAULT(Current, Rhs, N) \
2420 do \
2421 if (N) \
2422 { \
2423 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2424 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2425 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2426 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2427 } \
2428 else \
2429 { \
2430 (Current).first_line = (Current).last_line = \
2431 YYRHSLOC (Rhs, 0).last_line; \
2432 (Current).first_column = (Current).last_column = \
2433 YYRHSLOC (Rhs, 0).last_column; \
2434 } \
2435 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002436#endif
2437
Reid Spencer38c91a92007-02-28 02:24:54 +00002438
2439/* YY_LOCATION_PRINT -- Print the location on the stream.
2440 This macro was not mandated originally: define only if we know
2441 we won't break user code: when these are the locations we know. */
2442
2443#ifndef YY_LOCATION_PRINT
2444# if YYLTYPE_IS_TRIVIAL
2445# define YY_LOCATION_PRINT(File, Loc) \
2446 fprintf (File, "%d.%d-%d.%d", \
2447 (Loc).first_line, (Loc).first_column, \
2448 (Loc).last_line, (Loc).last_column)
2449# else
2450# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2451# endif
2452#endif
2453
2454
2455/* YYLEX -- calling `yylex' with the right arguments. */
2456
Reid Spencer41dff5e2007-01-26 08:05:27 +00002457#ifdef YYLEX_PARAM
Reid Spencer38c91a92007-02-28 02:24:54 +00002458# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer41dff5e2007-01-26 08:05:27 +00002459#else
Reid Spencer38c91a92007-02-28 02:24:54 +00002460# define YYLEX yylex ()
Chris Lattner32980692007-02-19 07:44:24 +00002461#endif
Reid Spencer38c91a92007-02-28 02:24:54 +00002462
2463/* Enable debugging if requested. */
2464#if YYDEBUG
2465
2466# ifndef YYFPRINTF
2467# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2468# define YYFPRINTF fprintf
2469# endif
2470
2471# define YYDPRINTF(Args) \
2472do { \
2473 if (yydebug) \
2474 YYFPRINTF Args; \
2475} while (0)
2476
2477# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2478do { \
2479 if (yydebug) \
2480 { \
2481 YYFPRINTF (stderr, "%s ", Title); \
2482 yysymprint (stderr, \
2483 Type, Value); \
2484 YYFPRINTF (stderr, "\n"); \
2485 } \
2486} while (0)
2487
2488/*------------------------------------------------------------------.
2489| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2490| TOP (included). |
2491`------------------------------------------------------------------*/
2492
2493#if defined (__STDC__) || defined (__cplusplus)
2494static void
2495yy_stack_print (short int *bottom, short int *top)
Chris Lattner32980692007-02-19 07:44:24 +00002496#else
Reid Spencer38c91a92007-02-28 02:24:54 +00002497static void
2498yy_stack_print (bottom, top)
2499 short int *bottom;
2500 short int *top;
Chris Lattner32980692007-02-19 07:44:24 +00002501#endif
Reid Spencer38c91a92007-02-28 02:24:54 +00002502{
2503 YYFPRINTF (stderr, "Stack now");
2504 for (/* Nothing. */; bottom <= top; ++bottom)
2505 YYFPRINTF (stderr, " %d", *bottom);
2506 YYFPRINTF (stderr, "\n");
2507}
2508
2509# define YY_STACK_PRINT(Bottom, Top) \
2510do { \
2511 if (yydebug) \
2512 yy_stack_print ((Bottom), (Top)); \
2513} while (0)
2514
2515
2516/*------------------------------------------------.
2517| Report that the YYRULE is going to be reduced. |
2518`------------------------------------------------*/
2519
2520#if defined (__STDC__) || defined (__cplusplus)
2521static void
2522yy_reduce_print (int yyrule)
2523#else
2524static void
2525yy_reduce_print (yyrule)
2526 int yyrule;
Chris Lattner9d2fda62007-02-13 05:53:56 +00002527#endif
Reid Spencer38c91a92007-02-28 02:24:54 +00002528{
2529 int yyi;
2530 unsigned long int yylno = yyrline[yyrule];
2531 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2532 yyrule - 1, yylno);
2533 /* Print the symbols being reduced, and their result. */
2534 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2535 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2536 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2537}
Reid Spencer9d6565a2007-02-15 02:26:10 +00002538
Reid Spencer38c91a92007-02-28 02:24:54 +00002539# define YY_REDUCE_PRINT(Rule) \
2540do { \
2541 if (yydebug) \
2542 yy_reduce_print (Rule); \
2543} while (0)
Reid Spencer9d6565a2007-02-15 02:26:10 +00002544
Reid Spencer38c91a92007-02-28 02:24:54 +00002545/* Nonzero means print parse trace. It is left uninitialized so that
2546 multiple parsers can coexist. */
2547int yydebug;
2548#else /* !YYDEBUG */
2549# define YYDPRINTF(Args)
2550# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2551# define YY_STACK_PRINT(Bottom, Top)
2552# define YY_REDUCE_PRINT(Rule)
2553#endif /* !YYDEBUG */
Reid Spencer9d6565a2007-02-15 02:26:10 +00002554
Reid Spencer9d6565a2007-02-15 02:26:10 +00002555
Reid Spencer38c91a92007-02-28 02:24:54 +00002556/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002557#ifndef YYINITDEPTH
Reid Spencer38c91a92007-02-28 02:24:54 +00002558# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002559#endif
2560
Reid Spencer38c91a92007-02-28 02:24:54 +00002561/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2562 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002563
Reid Spencer38c91a92007-02-28 02:24:54 +00002564 Do not make this value too large; the results are undefined if
2565 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2566 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002567
2568#ifndef YYMAXDEPTH
Reid Spencer38c91a92007-02-28 02:24:54 +00002569# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002570#endif
Reid Spencer38c91a92007-02-28 02:24:54 +00002571
Reid Spencer68a24bd2005-08-27 18:50:39 +00002572
2573
Reid Spencer38c91a92007-02-28 02:24:54 +00002574#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002575
Reid Spencer38c91a92007-02-28 02:24:54 +00002576# ifndef yystrlen
2577# if defined (__GLIBC__) && defined (_STRING_H)
2578# define yystrlen strlen
2579# else
2580/* Return the length of YYSTR. */
2581static YYSIZE_T
2582# if defined (__STDC__) || defined (__cplusplus)
2583yystrlen (const char *yystr)
2584# else
2585yystrlen (yystr)
2586 const char *yystr;
2587# endif
Chris Lattner32980692007-02-19 07:44:24 +00002588{
Reid Spencer38c91a92007-02-28 02:24:54 +00002589 const char *yys = yystr;
Chris Lattner32980692007-02-19 07:44:24 +00002590
Reid Spencer38c91a92007-02-28 02:24:54 +00002591 while (*yys++ != '\0')
2592 continue;
2593
2594 return yys - yystr - 1;
Chris Lattner32980692007-02-19 07:44:24 +00002595}
Reid Spencer38c91a92007-02-28 02:24:54 +00002596# endif
2597# endif
Chris Lattner32980692007-02-19 07:44:24 +00002598
Reid Spencer38c91a92007-02-28 02:24:54 +00002599# ifndef yystpcpy
2600# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2601# define yystpcpy stpcpy
2602# else
2603/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2604 YYDEST. */
2605static char *
2606# if defined (__STDC__) || defined (__cplusplus)
2607yystpcpy (char *yydest, const char *yysrc)
2608# else
2609yystpcpy (yydest, yysrc)
2610 char *yydest;
2611 const char *yysrc;
2612# endif
Chris Lattner32980692007-02-19 07:44:24 +00002613{
Reid Spencer38c91a92007-02-28 02:24:54 +00002614 char *yyd = yydest;
2615 const char *yys = yysrc;
Chris Lattner32980692007-02-19 07:44:24 +00002616
Reid Spencer38c91a92007-02-28 02:24:54 +00002617 while ((*yyd++ = *yys++) != '\0')
2618 continue;
2619
2620 return yyd - 1;
Chris Lattner32980692007-02-19 07:44:24 +00002621}
Reid Spencer38c91a92007-02-28 02:24:54 +00002622# endif
2623# endif
Chris Lattner32980692007-02-19 07:44:24 +00002624
Reid Spencer38c91a92007-02-28 02:24:54 +00002625# ifndef yytnamerr
2626/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2627 quotes and backslashes, so that it's suitable for yyerror. The
2628 heuristic is that double-quoting is unnecessary unless the string
2629 contains an apostrophe, a comma, or backslash (other than
2630 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2631 null, do not copy; instead, return the length of what the result
2632 would have been. */
2633static YYSIZE_T
2634yytnamerr (char *yyres, const char *yystr)
2635{
2636 if (*yystr == '"')
2637 {
2638 size_t yyn = 0;
2639 char const *yyp = yystr;
2640
2641 for (;;)
2642 switch (*++yyp)
2643 {
2644 case '\'':
2645 case ',':
2646 goto do_not_strip_quotes;
2647
2648 case '\\':
2649 if (*++yyp != '\\')
2650 goto do_not_strip_quotes;
2651 /* Fall through. */
2652 default:
2653 if (yyres)
2654 yyres[yyn] = *yyp;
2655 yyn++;
2656 break;
2657
2658 case '"':
2659 if (yyres)
2660 yyres[yyn] = '\0';
2661 return yyn;
2662 }
2663 do_not_strip_quotes: ;
2664 }
2665
2666 if (! yyres)
2667 return yystrlen (yystr);
2668
2669 return yystpcpy (yyres, yystr) - yyres;
2670}
2671# endif
2672
2673#endif /* YYERROR_VERBOSE */
2674
Reid Spencer9d6565a2007-02-15 02:26:10 +00002675
2676
Reid Spencer38c91a92007-02-28 02:24:54 +00002677#if YYDEBUG
2678/*--------------------------------.
2679| Print this symbol on YYOUTPUT. |
2680`--------------------------------*/
Reid Spencer9d6565a2007-02-15 02:26:10 +00002681
Reid Spencer38c91a92007-02-28 02:24:54 +00002682#if defined (__STDC__) || defined (__cplusplus)
2683static void
2684yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Chris Lattner32980692007-02-19 07:44:24 +00002685#else
Reid Spencer38c91a92007-02-28 02:24:54 +00002686static void
2687yysymprint (yyoutput, yytype, yyvaluep)
2688 FILE *yyoutput;
2689 int yytype;
2690 YYSTYPE *yyvaluep;
2691#endif
2692{
2693 /* Pacify ``unused variable'' warnings. */
2694 (void) yyvaluep;
2695
2696 if (yytype < YYNTOKENS)
2697 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2698 else
2699 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2700
2701
2702# ifdef YYPRINT
2703 if (yytype < YYNTOKENS)
2704 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2705# endif
2706 switch (yytype)
2707 {
2708 default:
2709 break;
2710 }
2711 YYFPRINTF (yyoutput, ")");
2712}
2713
2714#endif /* ! YYDEBUG */
2715/*-----------------------------------------------.
2716| Release the memory associated to this symbol. |
2717`-----------------------------------------------*/
2718
2719#if defined (__STDC__) || defined (__cplusplus)
2720static void
2721yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2722#else
2723static void
2724yydestruct (yymsg, yytype, yyvaluep)
2725 const char *yymsg;
2726 int yytype;
2727 YYSTYPE *yyvaluep;
2728#endif
2729{
2730 /* Pacify ``unused variable'' warnings. */
2731 (void) yyvaluep;
2732
2733 if (!yymsg)
2734 yymsg = "Deleting";
2735 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2736
2737 switch (yytype)
2738 {
2739
2740 default:
2741 break;
2742 }
2743}
2744
2745
2746/* Prevent warnings from -Wmissing-prototypes. */
2747
2748#ifdef YYPARSE_PARAM
2749# if defined (__STDC__) || defined (__cplusplus)
2750int yyparse (void *YYPARSE_PARAM);
2751# else
2752int yyparse ();
2753# endif
2754#else /* ! YYPARSE_PARAM */
2755#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002756int yyparse (void);
Chris Lattner32980692007-02-19 07:44:24 +00002757#else
Reid Spencer38c91a92007-02-28 02:24:54 +00002758int yyparse ();
2759#endif
2760#endif /* ! YYPARSE_PARAM */
2761
2762
2763
2764/* The look-ahead symbol. */
2765int yychar;
2766
2767/* The semantic value of the look-ahead symbol. */
2768YYSTYPE yylval;
2769
2770/* Number of syntax errors so far. */
2771int yynerrs;
2772
2773
2774
2775/*----------.
2776| yyparse. |
2777`----------*/
2778
2779#ifdef YYPARSE_PARAM
2780# if defined (__STDC__) || defined (__cplusplus)
2781int yyparse (void *YYPARSE_PARAM)
2782# else
2783int yyparse (YYPARSE_PARAM)
2784 void *YYPARSE_PARAM;
2785# endif
2786#else /* ! YYPARSE_PARAM */
2787#if defined (__STDC__) || defined (__cplusplus)
2788int
2789yyparse (void)
2790#else
2791int
2792yyparse ()
2793
2794#endif
2795#endif
2796{
2797
2798 int yystate;
2799 int yyn;
2800 int yyresult;
2801 /* Number of tokens to shift before error messages enabled. */
2802 int yyerrstatus;
2803 /* Look-ahead token as an internal (translated) token number. */
2804 int yytoken = 0;
2805
2806 /* Three stacks and their tools:
2807 `yyss': related to states,
2808 `yyvs': related to semantic values,
2809 `yyls': related to locations.
2810
2811 Refer to the stacks thru separate pointers, to allow yyoverflow
2812 to reallocate them elsewhere. */
2813
2814 /* The state stack. */
2815 short int yyssa[YYINITDEPTH];
2816 short int *yyss = yyssa;
2817 short int *yyssp;
2818
2819 /* The semantic value stack. */
2820 YYSTYPE yyvsa[YYINITDEPTH];
2821 YYSTYPE *yyvs = yyvsa;
2822 YYSTYPE *yyvsp;
2823
2824
2825
Chris Lattner9d2fda62007-02-13 05:53:56 +00002826#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov178a3522007-01-12 19:22:51 +00002827
Reid Spencer38c91a92007-02-28 02:24:54 +00002828 YYSIZE_T yystacksize = YYINITDEPTH;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002829
Reid Spencer38c91a92007-02-28 02:24:54 +00002830 /* The variables used to return semantic value and location from the
2831 action routines. */
2832 YYSTYPE yyval;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002833
Chris Lattner7d9801d2007-02-13 00:58:01 +00002834
Reid Spencer38c91a92007-02-28 02:24:54 +00002835 /* When reducing, the number of symbols on the RHS of the reduced
2836 rule. */
Chris Lattner9d2fda62007-02-13 05:53:56 +00002837 int yylen;
Chris Lattner7d9801d2007-02-13 00:58:01 +00002838
Reid Spencer38c91a92007-02-28 02:24:54 +00002839 YYDPRINTF ((stderr, "Starting parse\n"));
Chris Lattner7d9801d2007-02-13 00:58:01 +00002840
Reid Spencer68a24bd2005-08-27 18:50:39 +00002841 yystate = 0;
2842 yyerrstatus = 0;
2843 yynerrs = 0;
2844 yychar = YYEMPTY; /* Cause a token to be read. */
2845
2846 /* Initialize stack pointers.
2847 Waste one element of value and location stack
2848 so that they stay on the same level as the state stack.
2849 The wasted elements are never initialized. */
2850
Reid Spencer38c91a92007-02-28 02:24:54 +00002851 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002852 yyvsp = yyvs;
2853
Reid Spencer38c91a92007-02-28 02:24:54 +00002854 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002855
Reid Spencer38c91a92007-02-28 02:24:54 +00002856/*------------------------------------------------------------.
2857| yynewstate -- Push a new state, which is found in yystate. |
2858`------------------------------------------------------------*/
2859 yynewstate:
2860 /* In all cases, when you get here, the value and location stacks
2861 have just been pushed. so pushing a state here evens the stacks.
2862 */
2863 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002864
Reid Spencer38c91a92007-02-28 02:24:54 +00002865 yysetstate:
2866 *yyssp = yystate;
2867
2868 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002869 {
2870 /* Get the current used size of the three stacks, in elements. */
Reid Spencer38c91a92007-02-28 02:24:54 +00002871 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002872
2873#ifdef yyoverflow
Reid Spencer38c91a92007-02-28 02:24:54 +00002874 {
2875 /* Give user a chance to reallocate the stack. Use copies of
2876 these so that the &'s don't force the real ones into
2877 memory. */
2878 YYSTYPE *yyvs1 = yyvs;
2879 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002880
Reid Spencer38c91a92007-02-28 02:24:54 +00002881
2882 /* Each stack pointer address is followed by the size of the
2883 data in use in that stack, in bytes. This used to be a
2884 conditional around just the two extra args, but that might
2885 be undefined if yyoverflow is a macro. */
2886 yyoverflow (YY_("memory exhausted"),
2887 &yyss1, yysize * sizeof (*yyssp),
2888 &yyvs1, yysize * sizeof (*yyvsp),
2889
2890 &yystacksize);
2891
2892 yyss = yyss1;
2893 yyvs = yyvs1;
2894 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002895#else /* no yyoverflow */
Reid Spencer38c91a92007-02-28 02:24:54 +00002896# ifndef YYSTACK_RELOCATE
2897 goto yyexhaustedlab;
2898# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002899 /* Extend the stack our own way. */
Reid Spencer38c91a92007-02-28 02:24:54 +00002900 if (YYMAXDEPTH <= yystacksize)
2901 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002902 yystacksize *= 2;
Reid Spencer38c91a92007-02-28 02:24:54 +00002903 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002904 yystacksize = YYMAXDEPTH;
Reid Spencer38c91a92007-02-28 02:24:54 +00002905
2906 {
2907 short int *yyss1 = yyss;
2908 union yyalloc *yyptr =
2909 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2910 if (! yyptr)
2911 goto yyexhaustedlab;
2912 YYSTACK_RELOCATE (yyss);
2913 YYSTACK_RELOCATE (yyvs);
2914
2915# undef YYSTACK_RELOCATE
2916 if (yyss1 != yyssa)
2917 YYSTACK_FREE (yyss1);
2918 }
2919# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002920#endif /* no yyoverflow */
2921
Reid Spencer38c91a92007-02-28 02:24:54 +00002922 yyssp = yyss + yysize - 1;
2923 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002924
2925
Reid Spencer38c91a92007-02-28 02:24:54 +00002926 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2927 (unsigned long int) yystacksize));
2928
2929 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002930 YYABORT;
2931 }
2932
Reid Spencer38c91a92007-02-28 02:24:54 +00002933 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002934
2935 goto yybackup;
Reid Spencer38c91a92007-02-28 02:24:54 +00002936
2937/*-----------.
2938| yybackup. |
2939`-----------*/
2940yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002941
Chris Lattner9d2fda62007-02-13 05:53:56 +00002942/* Do appropriate processing given the current state. */
Reid Spencer38c91a92007-02-28 02:24:54 +00002943/* Read a look-ahead token if we need one and don't already have one. */
Chris Lattner9d2fda62007-02-13 05:53:56 +00002944/* yyresume: */
Andrew Lenharth6353e052006-12-08 18:07:09 +00002945
Reid Spencer38c91a92007-02-28 02:24:54 +00002946 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00002947
Reid Spencer68a24bd2005-08-27 18:50:39 +00002948 yyn = yypact[yystate];
Reid Spencer38c91a92007-02-28 02:24:54 +00002949 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002950 goto yydefault;
2951
Reid Spencer38c91a92007-02-28 02:24:54 +00002952 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002953
Reid Spencer38c91a92007-02-28 02:24:54 +00002954 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002955 if (yychar == YYEMPTY)
2956 {
Reid Spencer38c91a92007-02-28 02:24:54 +00002957 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002958 yychar = YYLEX;
2959 }
2960
Reid Spencer38c91a92007-02-28 02:24:54 +00002961 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002962 {
Reid Spencer38c91a92007-02-28 02:24:54 +00002963 yychar = yytoken = YYEOF;
2964 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002965 }
2966 else
2967 {
Reid Spencer38c91a92007-02-28 02:24:54 +00002968 yytoken = YYTRANSLATE (yychar);
2969 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00002970 }
2971
Reid Spencer38c91a92007-02-28 02:24:54 +00002972 /* If the proper action on seeing token YYTOKEN is to reduce or to
2973 detect an error, take that action. */
2974 yyn += yytoken;
2975 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002976 goto yydefault;
2977 yyn = yytable[yyn];
Reid Spencer38c91a92007-02-28 02:24:54 +00002978 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002979 {
Reid Spencer38c91a92007-02-28 02:24:54 +00002980 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002981 goto yyerrlab;
2982 yyn = -yyn;
2983 goto yyreduce;
2984 }
2985
2986 if (yyn == YYFINAL)
2987 YYACCEPT;
2988
Reid Spencer38c91a92007-02-28 02:24:54 +00002989 /* Shift the look-ahead token. */
2990 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Reid Spencer5cbf9852007-01-30 20:08:39 +00002991
Chris Lattner9d2fda62007-02-13 05:53:56 +00002992 /* Discard the token being shifted unless it is eof. */
Reid Spencer5cbf9852007-01-30 20:08:39 +00002993 if (yychar != YYEOF)
2994 yychar = YYEMPTY;
2995
Chris Lattner7d9801d2007-02-13 00:58:01 +00002996 *++yyvsp = yylval;
2997
Reid Spencer38c91a92007-02-28 02:24:54 +00002998
2999 /* Count tokens shifted since error; after three, turn off error
3000 status. */
3001 if (yyerrstatus)
3002 yyerrstatus--;
Chris Lattner9d2fda62007-02-13 05:53:56 +00003003
3004 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003005 goto yynewstate;
3006
Chris Lattner32980692007-02-19 07:44:24 +00003007
Reid Spencer38c91a92007-02-28 02:24:54 +00003008/*-----------------------------------------------------------.
3009| yydefault -- do the default action for the current state. |
3010`-----------------------------------------------------------*/
3011yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003012 yyn = yydefact[yystate];
3013 if (yyn == 0)
3014 goto yyerrlab;
Reid Spencer38c91a92007-02-28 02:24:54 +00003015 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003016
Reid Spencer38c91a92007-02-28 02:24:54 +00003017
3018/*-----------------------------.
3019| yyreduce -- Do a reduction. |
3020`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003021yyreduce:
Reid Spencer38c91a92007-02-28 02:24:54 +00003022 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003023 yylen = yyr2[yyn];
3024
Reid Spencer38c91a92007-02-28 02:24:54 +00003025 /* If YYLEN is nonzero, implement the default value of the action:
3026 `$$ = $1'.
3027
3028 Otherwise, the following line sets YYVAL to garbage.
3029 This behavior is undocumented and Bison
3030 users should not rely upon it. Assigning to YYVAL
3031 unconditionally makes the parser a bit smaller, and it avoids a
3032 GCC warning that YYVAL may be used uninitialized. */
3033 yyval = yyvsp[1-yylen];
3034
3035
3036 YY_REDUCE_PRINT (yyn);
3037 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003038 {
Reid Spencer38c91a92007-02-28 02:24:54 +00003039 case 29:
Reid Spencer66728ef2007-03-20 01:13:36 +00003040#line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003041 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3042 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003043
Reid Spencer38c91a92007-02-28 02:24:54 +00003044 case 30:
Reid Spencer66728ef2007-03-20 01:13:36 +00003045#line 1099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003046 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3047 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003048
Reid Spencer38c91a92007-02-28 02:24:54 +00003049 case 31:
Reid Spencer66728ef2007-03-20 01:13:36 +00003050#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003051 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3052 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003053
Reid Spencer38c91a92007-02-28 02:24:54 +00003054 case 32:
Reid Spencer66728ef2007-03-20 01:13:36 +00003055#line 1100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003056 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3057 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003058
Reid Spencer38c91a92007-02-28 02:24:54 +00003059 case 33:
Reid Spencer66728ef2007-03-20 01:13:36 +00003060#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003061 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3062 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003063
Reid Spencer38c91a92007-02-28 02:24:54 +00003064 case 34:
Reid Spencer66728ef2007-03-20 01:13:36 +00003065#line 1101 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003066 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3067 break;
3068
3069 case 35:
Reid Spencer66728ef2007-03-20 01:13:36 +00003070#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003071 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3072 break;
3073
3074 case 36:
Reid Spencer66728ef2007-03-20 01:13:36 +00003075#line 1102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003076 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3077 break;
3078
3079 case 37:
Reid Spencer66728ef2007-03-20 01:13:36 +00003080#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003081 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3082 break;
3083
3084 case 38:
Reid Spencer66728ef2007-03-20 01:13:36 +00003085#line 1103 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003086 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3087 break;
3088
3089 case 39:
Reid Spencer66728ef2007-03-20 01:13:36 +00003090#line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003091 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3092 break;
3093
3094 case 40:
Reid Spencer66728ef2007-03-20 01:13:36 +00003095#line 1107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003096 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3097 break;
3098
3099 case 41:
Reid Spencer66728ef2007-03-20 01:13:36 +00003100#line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003101 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3102 break;
3103
3104 case 42:
Reid Spencer66728ef2007-03-20 01:13:36 +00003105#line 1108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003106 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3107 break;
3108
3109 case 43:
Reid Spencer66728ef2007-03-20 01:13:36 +00003110#line 1109 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003111 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3112 break;
3113
3114 case 44:
Reid Spencer66728ef2007-03-20 01:13:36 +00003115#line 1109 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003116 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3117 break;
3118
3119 case 45:
Reid Spencer66728ef2007-03-20 01:13:36 +00003120#line 1110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003121 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3122 break;
3123
3124 case 46:
Reid Spencer66728ef2007-03-20 01:13:36 +00003125#line 1110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003126 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3127 break;
3128
3129 case 47:
Reid Spencer66728ef2007-03-20 01:13:36 +00003130#line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003131 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3132 break;
3133
3134 case 48:
Reid Spencer66728ef2007-03-20 01:13:36 +00003135#line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003136 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3137 break;
3138
3139 case 49:
Reid Spencer66728ef2007-03-20 01:13:36 +00003140#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003141 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3142 break;
3143
3144 case 50:
Reid Spencer66728ef2007-03-20 01:13:36 +00003145#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003146 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3147 break;
3148
3149 case 51:
Reid Spencer66728ef2007-03-20 01:13:36 +00003150#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003151 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3152 break;
3153
3154 case 52:
Reid Spencer66728ef2007-03-20 01:13:36 +00003155#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003156 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3157 break;
3158
3159 case 53:
Reid Spencer66728ef2007-03-20 01:13:36 +00003160#line 1114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003161 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3162 break;
3163
3164 case 54:
Reid Spencer66728ef2007-03-20 01:13:36 +00003165#line 1115 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003166 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3167 break;
3168
3169 case 61:
Reid Spencer66728ef2007-03-20 01:13:36 +00003170#line 1124 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003171 { (yyval.StrVal) = 0; ;}
3172 break;
3173
3174 case 62:
Reid Spencer66728ef2007-03-20 01:13:36 +00003175#line 1128 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003176 {
3177 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003178 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003179 ;}
3180 break;
3181
3182 case 63:
Reid Spencer66728ef2007-03-20 01:13:36 +00003183#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003184 {
3185 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003186 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003187 ;}
3188 break;
3189
3190 case 66:
Reid Spencer66728ef2007-03-20 01:13:36 +00003191#line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003192 {
3193 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003194 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003195 ;}
3196 break;
3197
3198 case 67:
Reid Spencer66728ef2007-03-20 01:13:36 +00003199#line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003200 {
3201 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003202 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003203 ;}
3204 break;
3205
3206 case 68:
Reid Spencer66728ef2007-03-20 01:13:36 +00003207#line 1149 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003208 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3209 break;
3210
3211 case 69:
Reid Spencer66728ef2007-03-20 01:13:36 +00003212#line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003213 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3214 break;
3215
3216 case 70:
Reid Spencer66728ef2007-03-20 01:13:36 +00003217#line 1151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003218 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3219 break;
3220
3221 case 71:
Reid Spencer66728ef2007-03-20 01:13:36 +00003222#line 1152 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003223 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3224 break;
3225
3226 case 72:
Reid Spencer66728ef2007-03-20 01:13:36 +00003227#line 1153 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003228 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3229 break;
3230
3231 case 73:
Reid Spencer66728ef2007-03-20 01:13:36 +00003232#line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003233 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3234 break;
3235
3236 case 74:
Reid Spencer66728ef2007-03-20 01:13:36 +00003237#line 1158 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003238 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3239 break;
3240
3241 case 75:
Reid Spencer66728ef2007-03-20 01:13:36 +00003242#line 1159 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003243 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3244 break;
3245
3246 case 76:
Reid Spencer66728ef2007-03-20 01:13:36 +00003247#line 1163 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003248 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3249 break;
3250
3251 case 77:
Reid Spencer66728ef2007-03-20 01:13:36 +00003252#line 1164 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003253 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3254 break;
3255
3256 case 78:
Reid Spencer66728ef2007-03-20 01:13:36 +00003257#line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003258 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3259 break;
3260
3261 case 79:
Reid Spencer66728ef2007-03-20 01:13:36 +00003262#line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003263 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3264 break;
3265
3266 case 80:
Reid Spencer66728ef2007-03-20 01:13:36 +00003267#line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003268 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3269 break;
3270
3271 case 81:
Reid Spencer66728ef2007-03-20 01:13:36 +00003272#line 1174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003273 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3274 break;
3275
3276 case 82:
Reid Spencer66728ef2007-03-20 01:13:36 +00003277#line 1175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003278 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3279 break;
3280
3281 case 83:
Reid Spencer66728ef2007-03-20 01:13:36 +00003282#line 1176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003283 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3284 break;
3285
3286 case 84:
Reid Spencer66728ef2007-03-20 01:13:36 +00003287#line 1177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003288 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3289 break;
3290
3291 case 85:
Reid Spencer66728ef2007-03-20 01:13:36 +00003292#line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003293 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3294 break;
3295
3296 case 86:
Reid Spencer66728ef2007-03-20 01:13:36 +00003297#line 1181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003298 { (yyval.UIntVal) = CallingConv::C; ;}
3299 break;
3300
3301 case 87:
Reid Spencer66728ef2007-03-20 01:13:36 +00003302#line 1182 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003303 { (yyval.UIntVal) = CallingConv::C; ;}
3304 break;
3305
3306 case 88:
Reid Spencer66728ef2007-03-20 01:13:36 +00003307#line 1183 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003308 { (yyval.UIntVal) = CallingConv::Fast; ;}
3309 break;
3310
3311 case 89:
Reid Spencer66728ef2007-03-20 01:13:36 +00003312#line 1184 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003313 { (yyval.UIntVal) = CallingConv::Cold; ;}
3314 break;
3315
3316 case 90:
Reid Spencer66728ef2007-03-20 01:13:36 +00003317#line 1185 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003318 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3319 break;
3320
3321 case 91:
Reid Spencer66728ef2007-03-20 01:13:36 +00003322#line 1186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003323 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3324 break;
3325
3326 case 92:
Reid Spencer66728ef2007-03-20 01:13:36 +00003327#line 1187 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003328 {
3329 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencerb5334b02007-02-05 10:18:06 +00003330 GEN_ERROR("Calling conv too large");
Reid Spencer38c91a92007-02-28 02:24:54 +00003331 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003332 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003333 ;}
3334 break;
3335
3336 case 93:
Reid Spencer66728ef2007-03-20 01:13:36 +00003337#line 1194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003338 { (yyval.ParamAttrs) = FunctionType::ZExtAttribute; ;}
3339 break;
3340
3341 case 94:
Reid Spencer66728ef2007-03-20 01:13:36 +00003342#line 1195 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003343 { (yyval.ParamAttrs) = FunctionType::SExtAttribute; ;}
3344 break;
3345
3346 case 95:
Reid Spencer66728ef2007-03-20 01:13:36 +00003347#line 1196 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003348 { (yyval.ParamAttrs) = FunctionType::InRegAttribute; ;}
3349 break;
3350
3351 case 96:
Reid Spencer66728ef2007-03-20 01:13:36 +00003352#line 1197 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003353 { (yyval.ParamAttrs) = FunctionType::StructRetAttribute; ;}
3354 break;
3355
3356 case 97:
Reid Spencer66728ef2007-03-20 01:13:36 +00003357#line 1200 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003358 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3359 break;
3360
3361 case 98:
Reid Spencer66728ef2007-03-20 01:13:36 +00003362#line 1201 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003363 {
3364 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3365 ;}
3366 break;
3367
3368 case 99:
Reid Spencer66728ef2007-03-20 01:13:36 +00003369#line 1206 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003370 { (yyval.ParamAttrs) = FunctionType::NoReturnAttribute; ;}
3371 break;
3372
3373 case 101:
Reid Spencer66728ef2007-03-20 01:13:36 +00003374#line 1210 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003375 { (yyval.ParamAttrs) = FunctionType::NoAttributeSet; ;}
3376 break;
3377
3378 case 102:
Reid Spencer66728ef2007-03-20 01:13:36 +00003379#line 1211 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003380 {
3381 (yyval.ParamAttrs) = FunctionType::ParameterAttributes((yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs));
3382 ;}
3383 break;
3384
3385 case 103:
Reid Spencer93c40032007-03-19 18:40:50 +00003386#line 1218 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003387 { (yyval.UIntVal) = 0; ;}
3388 break;
3389
Reid Spencer66728ef2007-03-20 01:13:36 +00003390 case 104:
Reid Spencer93c40032007-03-19 18:40:50 +00003391#line 1219 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003392 {
3393 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3394 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003395 GEN_ERROR("Alignment must be a power of two");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003396 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003397;}
3398 break;
3399
Reid Spencer66728ef2007-03-20 01:13:36 +00003400 case 105:
3401#line 1225 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3402 { (yyval.UIntVal) = 0; ;}
3403 break;
3404
3405 case 106:
3406#line 1226 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
3407 {
3408 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3409 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3410 GEN_ERROR("Alignment must be a power of two");
3411 CHECK_FOR_ERROR
3412;}
3413 break;
3414
Reid Spencer38c91a92007-02-28 02:24:54 +00003415 case 107:
Reid Spencer66728ef2007-03-20 01:13:36 +00003416#line 1234 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003417 {
3418 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3419 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
Reid Spencerb5334b02007-02-05 10:18:06 +00003420 GEN_ERROR("Invalid character in section name");
Reid Spencer38c91a92007-02-28 02:24:54 +00003421 (yyval.StrVal) = (yyvsp[0].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003422 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003423;}
3424 break;
3425
3426 case 108:
Reid Spencer66728ef2007-03-20 01:13:36 +00003427#line 1242 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003428 { (yyval.StrVal) = 0; ;}
3429 break;
3430
3431 case 109:
Reid Spencer66728ef2007-03-20 01:13:36 +00003432#line 1243 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003433 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3434 break;
3435
3436 case 110:
Reid Spencer66728ef2007-03-20 01:13:36 +00003437#line 1248 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003438 {;}
3439 break;
3440
3441 case 111:
Reid Spencer66728ef2007-03-20 01:13:36 +00003442#line 1249 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003443 {;}
3444 break;
3445
3446 case 112:
Reid Spencer66728ef2007-03-20 01:13:36 +00003447#line 1250 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003448 {
3449 CurGV->setSection((yyvsp[0].StrVal));
3450 free((yyvsp[0].StrVal));
Reid Spencer6f407902007-01-13 05:00:46 +00003451 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003452 ;}
3453 break;
3454
3455 case 113:
Reid Spencer66728ef2007-03-20 01:13:36 +00003456#line 1255 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003457 {
3458 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003459 GEN_ERROR("Alignment must be a power of two");
Reid Spencer38c91a92007-02-28 02:24:54 +00003460 CurGV->setAlignment((yyvsp[0].UInt64Val));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003461 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003462 ;}
3463 break;
3464
3465 case 118:
Reid Spencer66728ef2007-03-20 01:13:36 +00003466#line 1271 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003467 {
3468 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003469 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003470 ;}
3471 break;
3472
3473 case 119:
Reid Spencer66728ef2007-03-20 01:13:36 +00003474#line 1275 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003475 {
3476 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003477 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003478 ;}
3479 break;
3480
3481 case 120:
Reid Spencer66728ef2007-03-20 01:13:36 +00003482#line 1279 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003483 { // Pointer type?
3484 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003485 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencer38c91a92007-02-28 02:24:54 +00003486 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3487 delete (yyvsp[-1].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003488 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003489 ;}
3490 break;
3491
3492 case 121:
Reid Spencer66728ef2007-03-20 01:13:36 +00003493#line 1286 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003494 { // Named types are also simple types...
3495 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003496 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003497 (yyval.TypeVal) = new PATypeHolder(tmp);
3498 ;}
3499 break;
3500
3501 case 122:
Reid Spencer66728ef2007-03-20 01:13:36 +00003502#line 1291 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003503 { // Type UpReference
3504 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003505 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencer38c91a92007-02-28 02:24:54 +00003506 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3507 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003508 UR_OUT("New Upreference!\n");
3509 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003510 ;}
3511 break;
3512
3513 case 123:
Reid Spencer66728ef2007-03-20 01:13:36 +00003514#line 1299 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003515 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003516 std::vector<const Type*> Params;
3517 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00003518 Attrs.push_back((yyvsp[0].ParamAttrs));
3519 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003520 const Type *Ty = I->Ty->get();
3521 delete I->Ty; I->Ty = 0;
3522 Params.push_back(Ty);
3523 if (Ty != Type::VoidTy)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003524 Attrs.push_back(I->Attrs);
3525 }
3526 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3527 if (isVarArg) Params.pop_back();
3528
Reid Spencer38c91a92007-02-28 02:24:54 +00003529 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, Attrs);
3530 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3531 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3532 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003533 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003534 ;}
3535 break;
3536
3537 case 124:
Reid Spencer66728ef2007-03-20 01:13:36 +00003538#line 1319 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003539 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003540 std::vector<const Type*> Params;
3541 std::vector<FunctionType::ParameterAttributes> Attrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00003542 Attrs.push_back((yyvsp[0].ParamAttrs));
3543 for (TypeWithAttrsList::iterator I=(yyvsp[-2].TypeWithAttrsList)->begin(), E=(yyvsp[-2].TypeWithAttrsList)->end(); I != E; ++I) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003544 const Type* Ty = I->Ty->get();
3545 delete I->Ty; I->Ty = 0;
3546 Params.push_back(Ty);
3547 if (Ty != Type::VoidTy)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003548 Attrs.push_back(I->Attrs);
3549 }
3550 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3551 if (isVarArg) Params.pop_back();
3552
Reid Spencer38c91a92007-02-28 02:24:54 +00003553 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, Attrs);
3554 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3555 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003556 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003557 ;}
3558 break;
3559
3560 case 125:
Reid Spencer66728ef2007-03-20 01:13:36 +00003561#line 1339 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003562 { // Sized array type?
3563 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3564 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003565 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003566 ;}
3567 break;
3568
3569 case 126:
Reid Spencer66728ef2007-03-20 01:13:36 +00003570#line 1344 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003571 { // Vector type?
3572 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3573 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003574 GEN_ERROR("Unsigned result not equal to signed result");
3575 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
Reid Spencer9d6565a2007-02-15 02:26:10 +00003576 GEN_ERROR("Element type of a VectorType must be primitive");
Reid Spencer38c91a92007-02-28 02:24:54 +00003577 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00003578 GEN_ERROR("Vector length should be a power of 2");
Reid Spencer38c91a92007-02-28 02:24:54 +00003579 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3580 delete (yyvsp[-1].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003581 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003582 ;}
3583 break;
3584
3585 case 127:
Reid Spencer66728ef2007-03-20 01:13:36 +00003586#line 1356 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003587 { // Structure type?
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003588 std::vector<const Type*> Elements;
Reid Spencer38c91a92007-02-28 02:24:54 +00003589 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3590 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003591 Elements.push_back(*I);
3592
Reid Spencer38c91a92007-02-28 02:24:54 +00003593 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3594 delete (yyvsp[-1].TypeList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003595 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003596 ;}
3597 break;
3598
3599 case 128:
Reid Spencer66728ef2007-03-20 01:13:36 +00003600#line 1366 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003601 { // Empty structure type?
3602 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00003603 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003604 ;}
3605 break;
3606
3607 case 129:
Reid Spencer66728ef2007-03-20 01:13:36 +00003608#line 1370 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003609 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003610 std::vector<const Type*> Elements;
Reid Spencer38c91a92007-02-28 02:24:54 +00003611 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3612 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
Reid Spencer41dff5e2007-01-26 08:05:27 +00003613 Elements.push_back(*I);
3614
Reid Spencer38c91a92007-02-28 02:24:54 +00003615 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3616 delete (yyvsp[-2].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00003617 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003618 ;}
3619 break;
3620
3621 case 130:
Reid Spencer66728ef2007-03-20 01:13:36 +00003622#line 1380 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003623 { // Empty structure type?
3624 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003625 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003626 ;}
3627 break;
3628
3629 case 131:
Reid Spencer66728ef2007-03-20 01:13:36 +00003630#line 1387 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003631 {
3632 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3633 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3634 ;}
3635 break;
3636
3637 case 132:
Reid Spencer66728ef2007-03-20 01:13:36 +00003638#line 1394 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003639 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003640 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003641 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3642 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00003643 GEN_ERROR("LLVM functions cannot return aggregate types");
Reid Spencer38c91a92007-02-28 02:24:54 +00003644 (yyval.TypeVal) = (yyvsp[0].TypeVal);
3645 ;}
3646 break;
3647
3648 case 133:
Reid Spencer66728ef2007-03-20 01:13:36 +00003649#line 1401 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003650 {
3651 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3652 ;}
3653 break;
3654
3655 case 134:
Reid Spencer66728ef2007-03-20 01:13:36 +00003656#line 1406 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003657 {
3658 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3659 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer6f407902007-01-13 05:00:46 +00003660 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003661 ;}
3662 break;
3663
3664 case 135:
Reid Spencer66728ef2007-03-20 01:13:36 +00003665#line 1411 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003666 {
3667 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00003668 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003669 ;}
3670 break;
3671
3672 case 137:
Reid Spencer66728ef2007-03-20 01:13:36 +00003673#line 1419 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003674 {
3675 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003676 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3677 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencer38c91a92007-02-28 02:24:54 +00003678 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003679 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003680 ;}
3681 break;
3682
3683 case 138:
Reid Spencer66728ef2007-03-20 01:13:36 +00003684#line 1426 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003685 {
3686 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003687 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
3688 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencer38c91a92007-02-28 02:24:54 +00003689 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003690 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003691 ;}
3692 break;
3693
3694 case 139:
Reid Spencer66728ef2007-03-20 01:13:36 +00003695#line 1433 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003696 {
3697 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003698 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003699 ;}
3700 break;
3701
3702 case 140:
Reid Spencer66728ef2007-03-20 01:13:36 +00003703#line 1441 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003704 {
3705 (yyval.TypeList) = new std::list<PATypeHolder>();
Reid Spencer66728ef2007-03-20 01:13:36 +00003706 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal));
3707 delete (yyvsp[0].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003708 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003709 ;}
3710 break;
3711
3712 case 141:
Reid Spencer66728ef2007-03-20 01:13:36 +00003713#line 1447 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003714 {
Reid Spencer66728ef2007-03-20 01:13:36 +00003715 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal));
3716 delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003717 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003718 ;}
3719 break;
3720
3721 case 142:
Reid Spencer66728ef2007-03-20 01:13:36 +00003722#line 1459 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003723 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003724 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003725 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3726 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003727 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003728 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003729 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003730 const Type *ETy = ATy->getElementType();
3731 int NumElements = ATy->getNumElements();
3732
3733 // Verify that we have the correct size...
Reid Spencer38c91a92007-02-28 02:24:54 +00003734 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003735 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencer38c91a92007-02-28 02:24:54 +00003736 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003737 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003738
3739 // Verify all elements are correct type!
Reid Spencer38c91a92007-02-28 02:24:54 +00003740 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3741 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003742 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3743 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencer38c91a92007-02-28 02:24:54 +00003744 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003745 }
3746
Reid Spencer38c91a92007-02-28 02:24:54 +00003747 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3748 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003749 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003750 ;}
3751 break;
3752
3753 case 143:
Reid Spencer66728ef2007-03-20 01:13:36 +00003754#line 1487 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003755 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003756 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003757 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3758 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003759 if (ATy == 0)
3760 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003761 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003762
Andrew Lenharth6353e052006-12-08 18:07:09 +00003763 int NumElements = ATy->getNumElements();
3764 if (NumElements != -1 && NumElements != 0)
3765 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003766 " arguments, but has size of " + itostr(NumElements) +"");
Reid Spencer38c91a92007-02-28 02:24:54 +00003767 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3768 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003769 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003770 ;}
3771 break;
3772
3773 case 144:
Reid Spencer66728ef2007-03-20 01:13:36 +00003774#line 1503 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003775 {
Reid Spencer14310612006-12-31 05:40:51 +00003776 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003777 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3778 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003779 if (ATy == 0)
3780 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003781 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer61c83e02006-08-18 08:43:06 +00003782
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003783 int NumElements = ATy->getNumElements();
3784 const Type *ETy = ATy->getElementType();
Reid Spencer38c91a92007-02-28 02:24:54 +00003785 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3786 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003787 GEN_ERROR("Can't build string constant of size " +
Reid Spencer38c91a92007-02-28 02:24:54 +00003788 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003789 " when array has size " + itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003790 std::vector<Constant*> Vals;
3791 if (ETy == Type::Int8Ty) {
Reid Spencer38c91a92007-02-28 02:24:54 +00003792 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003793 C != (unsigned char*)EndStr; ++C)
3794 Vals.push_back(ConstantInt::get(ETy, *C));
3795 } else {
Reid Spencer38c91a92007-02-28 02:24:54 +00003796 free((yyvsp[0].StrVal));
Reid Spencerb5334b02007-02-05 10:18:06 +00003797 GEN_ERROR("Cannot build string arrays of non byte sized elements");
Andrew Lenharth6353e052006-12-08 18:07:09 +00003798 }
Reid Spencer38c91a92007-02-28 02:24:54 +00003799 free((yyvsp[0].StrVal));
3800 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3801 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003802 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003803 ;}
3804 break;
3805
3806 case 145:
Reid Spencer66728ef2007-03-20 01:13:36 +00003807#line 1532 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003808 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003809 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003810 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3811 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003812 if (PTy == 0)
3813 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003814 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003815 const Type *ETy = PTy->getElementType();
3816 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003817
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003818 // Verify that we have the correct size...
Reid Spencer38c91a92007-02-28 02:24:54 +00003819 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003820 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencer38c91a92007-02-28 02:24:54 +00003821 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003822 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003823
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003824 // Verify all elements are correct type!
Reid Spencer38c91a92007-02-28 02:24:54 +00003825 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3826 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003827 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3828 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencer38c91a92007-02-28 02:24:54 +00003829 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003830 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003831
Reid Spencer38c91a92007-02-28 02:24:54 +00003832 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
3833 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003834 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003835 ;}
3836 break;
3837
3838 case 146:
Reid Spencer66728ef2007-03-20 01:13:36 +00003839#line 1560 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003840 {
3841 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003842 if (STy == 0)
3843 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003844 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003845
Reid Spencer38c91a92007-02-28 02:24:54 +00003846 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003847 GEN_ERROR("Illegal number of initializers for structure type");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003848
3849 // Check to ensure that constants are compatible with the type initializer!
Reid Spencer38c91a92007-02-28 02:24:54 +00003850 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3851 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003852 GEN_ERROR("Expected type '" +
3853 STy->getElementType(i)->getDescription() +
3854 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003855 " of structure initializer");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003856
3857 // Check to ensure that Type is not packed
3858 if (STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003859 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003860
Reid Spencer38c91a92007-02-28 02:24:54 +00003861 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3862 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003863 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003864 ;}
3865 break;
3866
3867 case 147:
Reid Spencer66728ef2007-03-20 01:13:36 +00003868#line 1585 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003869 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003870 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003871 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3872 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003873 if (STy == 0)
3874 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003875 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003876
3877 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003878 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003879
3880 // Check to ensure that Type is not packed
3881 if (STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003882 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003883
Reid Spencer38c91a92007-02-28 02:24:54 +00003884 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3885 delete (yyvsp[-2].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003886 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003887 ;}
3888 break;
3889
3890 case 148:
Reid Spencer66728ef2007-03-20 01:13:36 +00003891#line 1604 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003892 {
3893 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003894 if (STy == 0)
3895 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003896 (*(yyvsp[-5].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003897
Reid Spencer38c91a92007-02-28 02:24:54 +00003898 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00003899 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003900
3901 // Check to ensure that constants are compatible with the type initializer!
Reid Spencer38c91a92007-02-28 02:24:54 +00003902 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
3903 if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00003904 GEN_ERROR("Expected type '" +
3905 STy->getElementType(i)->getDescription() +
3906 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00003907 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003908
3909 // Check to ensure that Type is packed
3910 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003911 GEN_ERROR("Vector initializer to non-vector type '" +
3912 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003913
Reid Spencer38c91a92007-02-28 02:24:54 +00003914 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
3915 delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003916 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003917 ;}
3918 break;
3919
3920 case 149:
Reid Spencer66728ef2007-03-20 01:13:36 +00003921#line 1630 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003922 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003923 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003924 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
3925 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003926 if (STy == 0)
3927 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003928 (*(yyvsp[-4].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003929
3930 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003931 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003932
3933 // Check to ensure that Type is packed
3934 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00003935 GEN_ERROR("Vector initializer to non-vector type '" +
3936 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003937
Reid Spencer38c91a92007-02-28 02:24:54 +00003938 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3939 delete (yyvsp[-4].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003940 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003941 ;}
3942 break;
3943
3944 case 150:
Reid Spencer66728ef2007-03-20 01:13:36 +00003945#line 1650 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003946 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003947 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003948 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3949 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003950 if (PTy == 0)
3951 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00003952 (*(yyvsp[-1].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003953
Reid Spencer38c91a92007-02-28 02:24:54 +00003954 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3955 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003956 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003957 ;}
3958 break;
3959
3960 case 151:
Reid Spencer66728ef2007-03-20 01:13:36 +00003961#line 1662 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003962 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003963 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003964 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3965 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3966 delete (yyvsp[-1].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003967 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00003968 ;}
3969 break;
3970
3971 case 152:
Reid Spencer66728ef2007-03-20 01:13:36 +00003972#line 1669 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00003973 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003974 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00003975 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
3976 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003977 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00003978 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003979
3980 // ConstExprs can exist in the body of a function, thus creating
3981 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00003982 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00003983 // symbol table instead of the module symbol table for the global symbol,
3984 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00003985 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00003986 //
3987 Function *SavedCurFn = CurFun.CurrentFunction;
3988 CurFun.CurrentFunction = 0;
3989
Reid Spencer93c40032007-03-19 18:40:50 +00003990 Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003991 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003992
3993 CurFun.CurrentFunction = SavedCurFn;
3994
3995 // If this is an initializer for a constant pointer, which is referencing a
3996 // (currently) undefined variable, create a stub now that shall be replaced
3997 // in the future with the right type of variable.
3998 //
3999 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004000 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004001 const PointerType *PT = cast<PointerType>(Ty);
4002
4003 // First check to see if the forward references value is already created!
4004 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencer38c91a92007-02-28 02:24:54 +00004005 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004006
4007 if (I != CurModule.GlobalRefs.end()) {
4008 V = I->second; // Placeholder already exists, use it...
Reid Spencer38c91a92007-02-28 02:24:54 +00004009 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004010 } else {
4011 std::string Name;
Reid Spencer38c91a92007-02-28 02:24:54 +00004012 if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
4013 Name = (yyvsp[0].ValIDVal).Name;
4014 else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004015 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004016
4017 // Create the forward referenced global.
4018 GlobalValue *GV;
4019 if (const FunctionType *FTy =
4020 dyn_cast<FunctionType>(PT->getElementType())) {
4021 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
4022 CurModule.CurrentModule);
4023 } else {
4024 GV = new GlobalVariable(PT->getElementType(), false,
4025 GlobalValue::ExternalLinkage, 0,
4026 Name, CurModule.CurrentModule);
4027 }
4028
4029 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencer38c91a92007-02-28 02:24:54 +00004030 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004031 V = GV;
4032 }
4033 }
4034
Reid Spencer38c91a92007-02-28 02:24:54 +00004035 (yyval.ConstVal) = cast<GlobalValue>(V);
4036 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004037 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004038 ;}
4039 break;
4040
4041 case 153:
Reid Spencer66728ef2007-03-20 01:13:36 +00004042#line 1735 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004043 {
Reid Spencer14310612006-12-31 05:40:51 +00004044 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004045 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4046 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004047 GEN_ERROR("Mismatched types for constant expression: " +
Reid Spencer38c91a92007-02-28 02:24:54 +00004048 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
4049 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4050 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004051 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004052 ;}
4053 break;
4054
4055 case 154:
Reid Spencer66728ef2007-03-20 01:13:36 +00004056#line 1745 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004057 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004058 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004059 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4060 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004061 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencerb5334b02007-02-05 10:18:06 +00004062 GEN_ERROR("Cannot create a null initialized value of this type");
Reid Spencer38c91a92007-02-28 02:24:54 +00004063 (yyval.ConstVal) = Constant::getNullValue(Ty);
4064 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004065 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004066 ;}
4067 break;
4068
4069 case 155:
Reid Spencer66728ef2007-03-20 01:13:36 +00004070#line 1755 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004071 { // integral constants
4072 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004073 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencer49d273e2007-03-19 20:40:51 +00004074 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004075 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004076 ;}
4077 break;
4078
4079 case 156:
Reid Spencer66728ef2007-03-20 01:13:36 +00004080#line 1761 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004081 { // arbitrary precision integer constants
4082 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4083 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
4084 GEN_ERROR("Constant value does not fit in type");
Reid Spencer10794272007-03-01 19:41:47 +00004085 }
4086 (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
4087 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
Reid Spencer38c91a92007-02-28 02:24:54 +00004088 delete (yyvsp[0].APIntVal);
4089 CHECK_FOR_ERROR
4090 ;}
4091 break;
4092
4093 case 157:
Reid Spencer66728ef2007-03-20 01:13:36 +00004094#line 1771 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004095 { // integral constants
4096 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004097 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencer49d273e2007-03-19 20:40:51 +00004098 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004099 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004100 ;}
4101 break;
4102
4103 case 158:
Reid Spencer66728ef2007-03-20 01:13:36 +00004104#line 1777 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004105 { // arbitrary precision integer constants
4106 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4107 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
4108 GEN_ERROR("Constant value does not fit in type");
Reid Spencer10794272007-03-01 19:41:47 +00004109 }
4110 (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
4111 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
Reid Spencer38c91a92007-02-28 02:24:54 +00004112 delete (yyvsp[0].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004113 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004114 ;}
4115 break;
4116
4117 case 159:
Reid Spencer66728ef2007-03-20 01:13:36 +00004118#line 1787 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004119 { // Boolean constants
4120 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4121 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004122 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004123 ;}
4124 break;
4125
4126 case 160:
Reid Spencer66728ef2007-03-20 01:13:36 +00004127#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004128 { // Boolean constants
4129 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4130 (yyval.ConstVal) = ConstantInt::getFalse();
4131 CHECK_FOR_ERROR
4132 ;}
4133 break;
4134
4135 case 161:
Reid Spencer66728ef2007-03-20 01:13:36 +00004136#line 1797 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004137 { // Float & Double constants
4138 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004139 GEN_ERROR("Floating point constant invalid for type");
Reid Spencer38c91a92007-02-28 02:24:54 +00004140 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer6f407902007-01-13 05:00:46 +00004141 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004142 ;}
4143 break;
4144
4145 case 162:
Reid Spencer66728ef2007-03-20 01:13:36 +00004146#line 1805 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004147 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004148 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004149 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4150 Constant *Val = (yyvsp[-3].ConstVal);
4151 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4152 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004153 GEN_ERROR("invalid cast opcode for cast from '" +
4154 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00004155 DestTy->getDescription() + "'");
Reid Spencer38c91a92007-02-28 02:24:54 +00004156 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
4157 delete (yyvsp[-1].TypeVal);
4158 ;}
4159 break;
4160
4161 case 163:
Reid Spencer66728ef2007-03-20 01:13:36 +00004162#line 1817 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004163 {
4164 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004165 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004166
4167 const Type *IdxTy =
Reid Spencer38c91a92007-02-28 02:24:54 +00004168 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004169 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004170 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004171 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004172
Chris Lattnerf7469af2007-01-31 04:44:08 +00004173 SmallVector<Constant*, 8> IdxVec;
Reid Spencer38c91a92007-02-28 02:24:54 +00004174 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4175 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004176 IdxVec.push_back(C);
4177 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004178 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004179
Reid Spencer38c91a92007-02-28 02:24:54 +00004180 delete (yyvsp[-1].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004181
Reid Spencer38c91a92007-02-28 02:24:54 +00004182 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004183 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004184 ;}
4185 break;
4186
4187 case 164:
Reid Spencer66728ef2007-03-20 01:13:36 +00004188#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004189 {
4190 if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00004191 GEN_ERROR("Select condition must be of boolean type");
Reid Spencer38c91a92007-02-28 02:24:54 +00004192 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004193 GEN_ERROR("Select operand types must match");
Reid Spencer38c91a92007-02-28 02:24:54 +00004194 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004195 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004196 ;}
4197 break;
4198
4199 case 165:
Reid Spencer66728ef2007-03-20 01:13:36 +00004200#line 1847 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004201 {
4202 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004203 GEN_ERROR("Binary operator types must match");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004204 CHECK_FOR_ERROR;
Reid Spencer38c91a92007-02-28 02:24:54 +00004205 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4206 ;}
4207 break;
4208
4209 case 166:
Reid Spencer66728ef2007-03-20 01:13:36 +00004210#line 1853 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004211 {
4212 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004213 GEN_ERROR("Logical operator types must match");
Reid Spencer38c91a92007-02-28 02:24:54 +00004214 if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
4215 if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) ||
4216 !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00004217 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004218 }
Reid Spencer38c91a92007-02-28 02:24:54 +00004219 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004220 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004221 ;}
4222 break;
4223
4224 case 167:
Reid Spencer66728ef2007-03-20 01:13:36 +00004225#line 1864 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004226 {
4227 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004228 GEN_ERROR("icmp operand types must match");
Reid Spencer38c91a92007-02-28 02:24:54 +00004229 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4230 ;}
4231 break;
4232
4233 case 168:
Reid Spencer66728ef2007-03-20 01:13:36 +00004234#line 1869 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004235 {
4236 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00004237 GEN_ERROR("fcmp operand types must match");
Reid Spencer38c91a92007-02-28 02:24:54 +00004238 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4239 ;}
4240 break;
4241
4242 case 169:
Reid Spencer66728ef2007-03-20 01:13:36 +00004243#line 1874 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004244 {
4245 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004246 GEN_ERROR("Invalid extractelement operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00004247 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004248 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004249 ;}
4250 break;
4251
4252 case 170:
Reid Spencer66728ef2007-03-20 01:13:36 +00004253#line 1880 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004254 {
4255 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004256 GEN_ERROR("Invalid insertelement operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00004257 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004258 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004259 ;}
4260 break;
4261
4262 case 171:
Reid Spencer66728ef2007-03-20 01:13:36 +00004263#line 1886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004264 {
4265 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00004266 GEN_ERROR("Invalid shufflevector operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00004267 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004268 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004269 ;}
4270 break;
4271
4272 case 172:
Reid Spencer66728ef2007-03-20 01:13:36 +00004273#line 1895 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004274 {
4275 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004276 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004277 ;}
4278 break;
4279
4280 case 173:
Reid Spencer66728ef2007-03-20 01:13:36 +00004281#line 1899 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004282 {
4283 (yyval.ConstVector) = new std::vector<Constant*>();
4284 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004285 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004286 ;}
4287 break;
4288
4289 case 174:
Reid Spencer66728ef2007-03-20 01:13:36 +00004290#line 1907 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004291 { (yyval.BoolVal) = false; ;}
4292 break;
4293
4294 case 175:
Reid Spencer66728ef2007-03-20 01:13:36 +00004295#line 1907 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004296 { (yyval.BoolVal) = true; ;}
4297 break;
4298
4299 case 176:
Reid Spencer66728ef2007-03-20 01:13:36 +00004300#line 1918 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004301 {
4302 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004303 CurModule.ModuleDone();
4304 CHECK_FOR_ERROR;
Reid Spencer38c91a92007-02-28 02:24:54 +00004305 ;}
4306 break;
4307
4308 case 177:
Reid Spencer66728ef2007-03-20 01:13:36 +00004309#line 1923 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004310 {
4311 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004312 CurModule.ModuleDone();
4313 CHECK_FOR_ERROR;
Reid Spencer38c91a92007-02-28 02:24:54 +00004314 ;}
4315 break;
4316
4317 case 180:
Reid Spencer66728ef2007-03-20 01:13:36 +00004318#line 1936 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004319 { CurFun.isDeclare = false; ;}
4320 break;
4321
4322 case 181:
Reid Spencer66728ef2007-03-20 01:13:36 +00004323#line 1936 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004324 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004325 CurFun.FunctionDone();
4326 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004327 ;}
4328 break;
4329
4330 case 182:
Reid Spencer66728ef2007-03-20 01:13:36 +00004331#line 1940 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004332 { CurFun.isDeclare = true; ;}
4333 break;
4334
4335 case 183:
Reid Spencer66728ef2007-03-20 01:13:36 +00004336#line 1940 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004337 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004338 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004339 ;}
4340 break;
4341
4342 case 184:
Reid Spencer66728ef2007-03-20 01:13:36 +00004343#line 1943 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004344 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004345 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004346 ;}
4347 break;
4348
4349 case 185:
Reid Spencer66728ef2007-03-20 01:13:36 +00004350#line 1946 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004351 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004352 // Emit an error if there are any unresolved types left.
4353 if (!CurModule.LateResolveTypes.empty()) {
4354 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004355 if (DID.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +00004356 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4357 } else {
4358 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4359 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004360 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004361 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004362 ;}
4363 break;
4364
4365 case 186:
Reid Spencer66728ef2007-03-20 01:13:36 +00004366#line 1958 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004367 {
Reid Spencer14310612006-12-31 05:40:51 +00004368 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004369 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004370 // Eagerly resolve types. This is not an optimization, this is a
4371 // requirement that is due to the fact that we could have this:
4372 //
4373 // %list = type { %list * }
4374 // %list = type { %list * } ; repeated type decl
4375 //
4376 // If types are not resolved eagerly, then the two types will not be
4377 // determined to be the same type!
4378 //
Reid Spencer38c91a92007-02-28 02:24:54 +00004379 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004380
Reid Spencer38c91a92007-02-28 02:24:54 +00004381 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004382 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004383 // If this is a named type that is not a redefinition, add it to the slot
4384 // table.
Reid Spencer38c91a92007-02-28 02:24:54 +00004385 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004386 }
Reid Spencera132e042006-12-03 05:46:11 +00004387
Reid Spencer38c91a92007-02-28 02:24:54 +00004388 delete (yyvsp[0].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00004389 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004390 ;}
4391 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00004392
Reid Spencer38c91a92007-02-28 02:24:54 +00004393 case 187:
Reid Spencer66728ef2007-03-20 01:13:36 +00004394#line 1982 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004395 {
4396 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4397
4398 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004399 CHECK_FOR_ERROR
4400 // If this is a named type that is not a redefinition, add it to the slot
4401 // table.
Reid Spencer38c91a92007-02-28 02:24:54 +00004402 CurModule.Types.push_back((yyvsp[0].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004403 }
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004404 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004405 ;}
4406 break;
4407
4408 case 188:
Reid Spencer66728ef2007-03-20 01:13:36 +00004409#line 1993 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004410 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004411 /* "Externally Visible" Linkage */
Reid Spencer38c91a92007-02-28 02:24:54 +00004412 if ((yyvsp[0].ConstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004413 GEN_ERROR("Global value initializer is not a constant");
Reid Spencer38c91a92007-02-28 02:24:54 +00004414 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage,
4415 (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004416 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004417 ;}
4418 break;
4419
4420 case 189:
Reid Spencer66728ef2007-03-20 01:13:36 +00004421#line 2000 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004422 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004423 CurGV = 0;
Reid Spencer38c91a92007-02-28 02:24:54 +00004424 ;}
4425 break;
4426
4427 case 190:
Reid Spencer66728ef2007-03-20 01:13:36 +00004428#line 2003 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004429 {
4430 if ((yyvsp[0].ConstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004431 GEN_ERROR("Global value initializer is not a constant");
Reid Spencer38c91a92007-02-28 02:24:54 +00004432 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004433 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004434 ;}
4435 break;
4436
4437 case 191:
Reid Spencer66728ef2007-03-20 01:13:36 +00004438#line 2008 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004439 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004440 CurGV = 0;
Reid Spencer38c91a92007-02-28 02:24:54 +00004441 ;}
4442 break;
4443
4444 case 192:
Reid Spencer66728ef2007-03-20 01:13:36 +00004445#line 2011 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004446 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004447 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004448 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
4449 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), (yyvsp[-3].Linkage), (yyvsp[-2].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004450 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004451 delete (yyvsp[0].TypeVal);
4452 ;}
4453 break;
4454
4455 case 193:
Reid Spencer66728ef2007-03-20 01:13:36 +00004456#line 2017 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004457 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004458 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004459 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004460 ;}
4461 break;
4462
4463 case 194:
Reid Spencer66728ef2007-03-20 01:13:36 +00004464#line 2021 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004465 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004466 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004467 ;}
4468 break;
4469
4470 case 195:
Reid Spencer66728ef2007-03-20 01:13:36 +00004471#line 2024 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004472 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004473 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004474 ;}
4475 break;
4476
4477 case 196:
Reid Spencer66728ef2007-03-20 01:13:36 +00004478#line 2030 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004479 {
Chris Lattner66316012006-01-24 04:14:29 +00004480 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencer38c91a92007-02-28 02:24:54 +00004481 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4482 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4483 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004484
4485 if (AsmSoFar.empty())
4486 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4487 else
4488 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004489 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004490;}
4491 break;
4492
4493 case 197:
Reid Spencer66728ef2007-03-20 01:13:36 +00004494#line 2043 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004495 {
4496 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4497 free((yyvsp[0].StrVal));
4498 ;}
4499 break;
4500
4501 case 198:
Reid Spencer66728ef2007-03-20 01:13:36 +00004502#line 2047 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004503 {
4504 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4505 free((yyvsp[0].StrVal));
4506 ;}
4507 break;
4508
4509 case 200:
Reid Spencer66728ef2007-03-20 01:13:36 +00004510#line 2054 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004511 {
4512 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4513 free((yyvsp[0].StrVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004514 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004515 ;}
4516 break;
4517
4518 case 201:
Reid Spencer66728ef2007-03-20 01:13:36 +00004519#line 2059 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004520 {
4521 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4522 free((yyvsp[0].StrVal));
Reid Spencera54b7cb2007-01-12 07:05:14 +00004523 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004524 ;}
4525 break;
4526
4527 case 202:
Reid Spencer66728ef2007-03-20 01:13:36 +00004528#line 2064 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004529 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004530 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004531 ;}
4532 break;
4533
4534 case 203:
Reid Spencer66728ef2007-03-20 01:13:36 +00004535#line 2073 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004536 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004537 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004538 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4539 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004540 GEN_ERROR("void typed arguments are invalid");
Reid Spencer38c91a92007-02-28 02:24:54 +00004541 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4542 (yyval.ArgList) = (yyvsp[-4].ArgList);
4543 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004544 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004545 ;}
4546 break;
4547
4548 case 204:
Reid Spencer66728ef2007-03-20 01:13:36 +00004549#line 2083 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004550 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004551 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004552 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4553 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004554 GEN_ERROR("void typed arguments are invalid");
Reid Spencer38c91a92007-02-28 02:24:54 +00004555 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4556 (yyval.ArgList) = new ArgListType;
4557 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004558 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004559 ;}
4560 break;
4561
4562 case 205:
Reid Spencer66728ef2007-03-20 01:13:36 +00004563#line 2094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004564 {
4565 (yyval.ArgList) = (yyvsp[0].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004566 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004567 ;}
4568 break;
4569
4570 case 206:
Reid Spencer66728ef2007-03-20 01:13:36 +00004571#line 2098 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004572 {
4573 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004574 struct ArgListEntry E;
4575 E.Ty = new PATypeHolder(Type::VoidTy);
4576 E.Name = 0;
4577 E.Attrs = FunctionType::NoAttributeSet;
Reid Spencer38c91a92007-02-28 02:24:54 +00004578 (yyval.ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004579 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004580 ;}
4581 break;
4582
4583 case 207:
Reid Spencer66728ef2007-03-20 01:13:36 +00004584#line 2107 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004585 {
4586 (yyval.ArgList) = new ArgListType;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004587 struct ArgListEntry E;
4588 E.Ty = new PATypeHolder(Type::VoidTy);
4589 E.Name = 0;
4590 E.Attrs = FunctionType::NoAttributeSet;
Reid Spencer38c91a92007-02-28 02:24:54 +00004591 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004592 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004593 ;}
4594 break;
4595
4596 case 208:
Reid Spencer66728ef2007-03-20 01:13:36 +00004597#line 2116 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004598 {
4599 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004600 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004601 ;}
4602 break;
4603
4604 case 209:
Reid Spencer66728ef2007-03-20 01:13:36 +00004605#line 2122 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004606 {
4607 UnEscapeLexed((yyvsp[-6].StrVal));
4608 std::string FunctionName((yyvsp[-6].StrVal));
4609 free((yyvsp[-6].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004610
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004611 // Check the function result for abstractness if this is a define. We should
4612 // have no abstract types at this point
Reid Spencer38c91a92007-02-28 02:24:54 +00004613 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4614 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004615
Reid Spencer68a24bd2005-08-27 18:50:39 +00004616 std::vector<const Type*> ParamTypeList;
Reid Spencer14310612006-12-31 05:40:51 +00004617 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00004618 ParamAttrs.push_back((yyvsp[-2].ParamAttrs));
4619 if ((yyvsp[-4].ArgList)) { // If there are arguments...
4620 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00004621 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004622 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4623 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004624 ParamTypeList.push_back(Ty);
4625 if (Ty != Type::VoidTy)
4626 ParamAttrs.push_back(I->Attrs);
4627 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004628 }
4629
4630 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4631 if (isVarArg) ParamTypeList.pop_back();
4632
Reid Spencer38c91a92007-02-28 02:24:54 +00004633 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg,
Reid Spencer14310612006-12-31 05:40:51 +00004634 ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004635 const PointerType *PFT = PointerType::get(FT);
Reid Spencer38c91a92007-02-28 02:24:54 +00004636 delete (yyvsp[-7].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004637
4638 ValID ID;
4639 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004640 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004641 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00004642 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004643 }
4644
4645 Function *Fn = 0;
4646 // See if this function was forward referenced. If so, recycle the object.
4647 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4648 // Move the function to the end of the list, from whereever it was
4649 // previously inserted.
4650 Fn = cast<Function>(FWRef);
4651 CurModule.CurrentModule->getFunctionList().remove(Fn);
4652 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4653 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00004654 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
4655 if (Fn->getFunctionType() != FT ) {
4656 // The existing function doesn't have the same type. This is an overload
4657 // error.
4658 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4659 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
4660 // Neither the existing or the current function is a declaration and they
4661 // have the same name and same type. Clearly this is a redefinition.
Reid Spencerb5334b02007-02-05 10:18:06 +00004662 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004663 } if (Fn->isDeclaration()) {
4664 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004665 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4666 AI != AE; ++AI)
4667 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004668 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004669 } else { // Not already defined?
4670 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4671 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004672
Reid Spencer68a24bd2005-08-27 18:50:39 +00004673 InsertValue(Fn, CurModule.Values);
4674 }
4675
4676 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004677
4678 if (CurFun.isDeclare) {
4679 // If we have declaration, always overwrite linkage. This will allow us to
4680 // correctly handle cases, when pointer to function is passed as argument to
4681 // another function.
4682 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004683 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004684 }
Reid Spencer38c91a92007-02-28 02:24:54 +00004685 Fn->setCallingConv((yyvsp[-8].UIntVal));
4686 Fn->setAlignment((yyvsp[0].UIntVal));
4687 if ((yyvsp[-1].StrVal)) {
4688 Fn->setSection((yyvsp[-1].StrVal));
4689 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004690 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004691
4692 // Add all of the arguments we parsed to the function...
Reid Spencer38c91a92007-02-28 02:24:54 +00004693 if ((yyvsp[-4].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004694 if (isVarArg) { // Nuke the last entry
Reid Spencer38c91a92007-02-28 02:24:54 +00004695 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00004696 "Not a varargs marker!");
Reid Spencer38c91a92007-02-28 02:24:54 +00004697 delete (yyvsp[-4].ArgList)->back().Ty;
4698 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004699 }
4700 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00004701 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00004702 unsigned Idx = 1;
Reid Spencer38c91a92007-02-28 02:24:54 +00004703 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin();
4704 I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004705 delete I->Ty; // Delete the typeholder...
Reid Spenceref9b9a72007-02-05 20:47:22 +00004706 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004707 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004708 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004709 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004710 }
Reid Spencera132e042006-12-03 05:46:11 +00004711
Reid Spencer38c91a92007-02-28 02:24:54 +00004712 delete (yyvsp[-4].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004713 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004714 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004715;}
4716 break;
4717
4718 case 212:
Reid Spencer66728ef2007-03-20 01:13:36 +00004719#line 2235 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004720 {
4721 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004722
4723 // Make sure that we keep track of the linkage type even if there was a
4724 // previous "declare".
Reid Spencer38c91a92007-02-28 02:24:54 +00004725 (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
4726 (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
4727;}
4728 break;
4729
4730 case 215:
Reid Spencer66728ef2007-03-20 01:13:36 +00004731#line 2246 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004732 {
4733 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004734 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004735;}
4736 break;
4737
4738 case 216:
Reid Spencer66728ef2007-03-20 01:13:36 +00004739#line 2251 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004740 {
4741 CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
4742 CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
4743 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004744 CurFun.FunctionDone();
4745 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004746 ;}
4747 break;
4748
4749 case 217:
Reid Spencer66728ef2007-03-20 01:13:36 +00004750#line 2263 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004751 {
4752 (yyval.BoolVal) = false;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004753 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004754 ;}
4755 break;
4756
4757 case 218:
Reid Spencer66728ef2007-03-20 01:13:36 +00004758#line 2267 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004759 {
4760 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004761 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004762 ;}
4763 break;
4764
4765 case 219:
Reid Spencer66728ef2007-03-20 01:13:36 +00004766#line 2272 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004767 { // A reference to a direct constant
4768 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004769 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004770 ;}
4771 break;
4772
4773 case 220:
Reid Spencer66728ef2007-03-20 01:13:36 +00004774#line 2276 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004775 {
4776 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Reid Spencer6f407902007-01-13 05:00:46 +00004777 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004778 ;}
4779 break;
4780
4781 case 221:
Reid Spencer66728ef2007-03-20 01:13:36 +00004782#line 2280 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004783 { // Perhaps it's an FP constant?
4784 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004785 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004786 ;}
4787 break;
4788
4789 case 222:
Reid Spencer66728ef2007-03-20 01:13:36 +00004790#line 2284 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004791 {
4792 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004793 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004794 ;}
4795 break;
4796
4797 case 223:
Reid Spencer66728ef2007-03-20 01:13:36 +00004798#line 2288 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004799 {
4800 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004801 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004802 ;}
4803 break;
4804
4805 case 224:
Reid Spencer66728ef2007-03-20 01:13:36 +00004806#line 2292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004807 {
4808 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004809 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004810 ;}
4811 break;
4812
4813 case 225:
Reid Spencer66728ef2007-03-20 01:13:36 +00004814#line 2296 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004815 {
4816 (yyval.ValIDVal) = ValID::createUndef();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004817 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004818 ;}
4819 break;
4820
4821 case 226:
Reid Spencer66728ef2007-03-20 01:13:36 +00004822#line 2300 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004823 { // A vector zero constant.
4824 (yyval.ValIDVal) = ValID::createZeroInit();
Reid Spencer61c83e02006-08-18 08:43:06 +00004825 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004826 ;}
4827 break;
4828
4829 case 227:
Reid Spencer66728ef2007-03-20 01:13:36 +00004830#line 2304 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004831 { // Nonempty unsized packed vector
4832 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
4833 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004834
Reid Spencer9d6565a2007-02-15 02:26:10 +00004835 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004836 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004837 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00004838 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00004839 ETy,
4840 NumElements)
4841 )
4842 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004843
4844 // Verify all elements are correct type!
Reid Spencer38c91a92007-02-28 02:24:54 +00004845 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
4846 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004847 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004848 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00004849 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004850 }
4851
Reid Spencer38c91a92007-02-28 02:24:54 +00004852 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
4853 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004854 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004855 ;}
4856 break;
4857
4858 case 228:
Reid Spencer66728ef2007-03-20 01:13:36 +00004859#line 2329 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004860 {
4861 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004862 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004863 ;}
4864 break;
4865
4866 case 229:
Reid Spencer66728ef2007-03-20 01:13:36 +00004867#line 2333 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004868 {
4869 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4870 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4871 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4872 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4873 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4874 free((yyvsp[-2].StrVal));
4875 free((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004876 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004877 ;}
4878 break;
4879
4880 case 230:
Reid Spencer66728ef2007-03-20 01:13:36 +00004881#line 2347 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004882 { // Is it an integer reference...?
4883 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004884 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004885 ;}
4886 break;
4887
4888 case 231:
Reid Spencer66728ef2007-03-20 01:13:36 +00004889#line 2351 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004890 {
4891 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004892 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004893 ;}
4894 break;
4895
4896 case 232:
Reid Spencer66728ef2007-03-20 01:13:36 +00004897#line 2355 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004898 { // Is it a named reference...?
4899 (yyval.ValIDVal) = ValID::createLocalName((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004900 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004901 ;}
4902 break;
4903
4904 case 233:
Reid Spencer66728ef2007-03-20 01:13:36 +00004905#line 2359 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004906 { // Is it a named reference...?
4907 (yyval.ValIDVal) = ValID::createGlobalName((yyvsp[0].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004908 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004909 ;}
4910 break;
4911
4912 case 236:
Reid Spencer66728ef2007-03-20 01:13:36 +00004913#line 2371 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004914 {
Reid Spencer832254e2007-02-02 02:16:23 +00004915 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00004916 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4917 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
4918 delete (yyvsp[-1].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004919 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004920 ;}
4921 break;
4922
4923 case 237:
Reid Spencer66728ef2007-03-20 01:13:36 +00004924#line 2380 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004925 {
4926 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004927 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004928 ;}
4929 break;
4930
4931 case 238:
Reid Spencer66728ef2007-03-20 01:13:36 +00004932#line 2384 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004933 { // Do not allow functions with 0 basic blocks
4934 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004935 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004936 ;}
4937 break;
4938
4939 case 239:
Reid Spencer66728ef2007-03-20 01:13:36 +00004940#line 2393 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004941 {
4942 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
Reid Spencer832254e2007-02-02 02:16:23 +00004943 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004944 InsertValue((yyvsp[0].TermInstVal));
4945 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
Reid Spencer38c91a92007-02-28 02:24:54 +00004946 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Reid Spencer832254e2007-02-02 02:16:23 +00004947 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004948 ;}
4949 break;
4950
4951 case 240:
Reid Spencer66728ef2007-03-20 01:13:36 +00004952#line 2402 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004953 {
4954 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004955 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4956 if (CI2->getParent() == 0)
Reid Spencer38c91a92007-02-28 02:24:54 +00004957 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
4958 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4959 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004960 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004961 ;}
4962 break;
4963
4964 case 241:
Reid Spencer66728ef2007-03-20 01:13:36 +00004965#line 2411 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer93c40032007-03-19 18:40:50 +00004966 { // Empty space between instruction lists
4967 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004968 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004969 ;}
4970 break;
4971
4972 case 242:
Reid Spencer66728ef2007-03-20 01:13:36 +00004973#line 2415 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer93c40032007-03-19 18:40:50 +00004974 { // Labelled (named) basic block
4975 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName((yyvsp[0].StrVal)));
Reid Spencer3822ff52006-11-08 06:47:33 +00004976 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00004977 ;}
4978 break;
Reid Spencer3822ff52006-11-08 06:47:33 +00004979
Reid Spencer38c91a92007-02-28 02:24:54 +00004980 case 243:
Reid Spencer66728ef2007-03-20 01:13:36 +00004981#line 2420 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00004982 { // Return with a result...
4983 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
4984 CHECK_FOR_ERROR
4985 ;}
4986 break;
4987
4988 case 244:
Reid Spencer66728ef2007-03-20 01:13:36 +00004989#line 2424 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer93c40032007-03-19 18:40:50 +00004990 { // Return with no result...
Reid Spencer38c91a92007-02-28 02:24:54 +00004991 (yyval.TermInstVal) = new ReturnInst();
4992 CHECK_FOR_ERROR
4993 ;}
4994 break;
4995
4996 case 245:
Reid Spencer66728ef2007-03-20 01:13:36 +00004997#line 2428 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer93c40032007-03-19 18:40:50 +00004998 { // Unconditional Branch...
Reid Spencer38c91a92007-02-28 02:24:54 +00004999 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5000 CHECK_FOR_ERROR
5001 (yyval.TermInstVal) = new BranchInst(tmpBB);
5002 ;}
5003 break;
5004
5005 case 246:
Reid Spencer66728ef2007-03-20 01:13:36 +00005006#line 2433 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005007 {
5008 assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
5009 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5010 CHECK_FOR_ERROR
5011 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5012 CHECK_FOR_ERROR
5013 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5014 CHECK_FOR_ERROR
5015 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5016 ;}
5017 break;
5018
5019 case 247:
Reid Spencer66728ef2007-03-20 01:13:36 +00005020#line 2443 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005021 {
5022 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
5023 CHECK_FOR_ERROR
5024 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5025 CHECK_FOR_ERROR
5026 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5027 (yyval.TermInstVal) = S;
5028
5029 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5030 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005031 for (; I != E; ++I) {
5032 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5033 S->addCase(CI, I->second);
5034 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005035 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005036 }
Reid Spencer38c91a92007-02-28 02:24:54 +00005037 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005038 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005039 ;}
5040 break;
5041
5042 case 248:
Reid Spencer66728ef2007-03-20 01:13:36 +00005043#line 2462 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005044 {
5045 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005046 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005047 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005048 CHECK_FOR_ERROR
5049 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencer38c91a92007-02-28 02:24:54 +00005050 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00005051 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005052 ;}
5053 break;
5054
5055 case 249:
Reid Spencer66728ef2007-03-20 01:13:36 +00005056#line 2472 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005057 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005058
Reid Spencer14310612006-12-31 05:40:51 +00005059 // Handle the short syntax
5060 const PointerType *PFTy = 0;
5061 const FunctionType *Ty = 0;
Reid Spencer38c91a92007-02-28 02:24:54 +00005062 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005063 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5064 // Pull out the types of all of the arguments...
5065 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005066 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00005067 ParamAttrs.push_back((yyvsp[-6].ParamAttrs));
5068 for (ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005069 const Type *Ty = I->Val->getType();
5070 if (Ty == Type::VoidTy)
5071 GEN_ERROR("Short call syntax cannot be used with varargs");
5072 ParamTypes.push_back(Ty);
5073 ParamAttrs.push_back(I->Attrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005074 }
5075
Reid Spencer38c91a92007-02-28 02:24:54 +00005076 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005077 PFTy = PointerType::get(Ty);
5078 }
5079
Reid Spencer66728ef2007-03-20 01:13:36 +00005080 delete (yyvsp[-11].TypeVal);
5081
Reid Spencer38c91a92007-02-28 02:24:54 +00005082 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005083 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005084 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005085 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005086 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005087 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005088
Reid Spencer14310612006-12-31 05:40:51 +00005089 // Check the arguments
5090 ValueList Args;
Reid Spencer38c91a92007-02-28 02:24:54 +00005091 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005092 // Make sure no arguments is a good thing!
5093 if (Ty->getNumParams() != 0)
5094 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005095 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005096 } else { // Has arguments?
5097 // Loop through FunctionType's arguments and ensure they are specified
5098 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005099 FunctionType::param_iterator I = Ty->param_begin();
5100 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer38c91a92007-02-28 02:24:54 +00005101 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005102
Reid Spencer14310612006-12-31 05:40:51 +00005103 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5104 if (ArgI->Val->getType() != *I)
5105 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005106 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005107 Args.push_back(ArgI->Val);
5108 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005109
Reid Spencer14310612006-12-31 05:40:51 +00005110 if (Ty->isVarArg()) {
5111 if (I == E)
5112 for (; ArgI != ArgE; ++ArgI)
5113 Args.push_back(ArgI->Val); // push the remaining varargs
5114 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005115 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005116 }
Reid Spencer14310612006-12-31 05:40:51 +00005117
5118 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00005119 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
Reid Spencer38c91a92007-02-28 02:24:54 +00005120 II->setCallingConv((yyvsp[-12].UIntVal));
5121 (yyval.TermInstVal) = II;
5122 delete (yyvsp[-8].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005123 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005124 ;}
5125 break;
5126
5127 case 250:
Reid Spencer66728ef2007-03-20 01:13:36 +00005128#line 2540 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005129 {
5130 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005131 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005132 ;}
5133 break;
5134
5135 case 251:
Reid Spencer66728ef2007-03-20 01:13:36 +00005136#line 2544 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005137 {
5138 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005139 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005140 ;}
5141 break;
5142
5143 case 252:
Reid Spencer66728ef2007-03-20 01:13:36 +00005144#line 2551 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005145 {
5146 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
Reid Spencer93c40032007-03-19 18:40:50 +00005147 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005148 CHECK_FOR_ERROR
5149 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005150 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005151
Reid Spencer38c91a92007-02-28 02:24:54 +00005152 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005153 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005154 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5155 ;}
5156 break;
5157
5158 case 253:
Reid Spencer66728ef2007-03-20 01:13:36 +00005159#line 2562 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005160 {
5161 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Reid Spencer93c40032007-03-19 18:40:50 +00005162 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005163 CHECK_FOR_ERROR
5164
5165 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005166 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005167
Reid Spencer38c91a92007-02-28 02:24:54 +00005168 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005169 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005170 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5171 ;}
5172 break;
5173
5174 case 254:
Reid Spencer66728ef2007-03-20 01:13:36 +00005175#line 2575 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005176 {
Reid Spenceref9b9a72007-02-05 20:47:22 +00005177 // Is this definition named?? if so, assign the name...
Reid Spencer38c91a92007-02-28 02:24:54 +00005178 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Reid Spenceref9b9a72007-02-05 20:47:22 +00005179 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005180 InsertValue((yyvsp[0].InstVal));
5181 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spenceref9b9a72007-02-05 20:47:22 +00005182 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005183 ;}
5184 break;
5185
5186 case 255:
Reid Spencer66728ef2007-03-20 01:13:36 +00005187#line 2585 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005188 { // Used for PHI nodes
Reid Spencer14310612006-12-31 05:40:51 +00005189 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005190 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
5191 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5192 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005193 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005194 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005195 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005196 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5197 delete (yyvsp[-5].TypeVal);
5198 ;}
5199 break;
5200
5201 case 256:
Reid Spencer66728ef2007-03-20 01:13:36 +00005202#line 2596 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005203 {
5204 (yyval.PHIList) = (yyvsp[-6].PHIList);
5205 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005206 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005207 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005208 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005209 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5210 ;}
5211 break;
5212
5213 case 257:
Reid Spencer66728ef2007-03-20 01:13:36 +00005214#line 2606 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005215 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005216 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005217 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005218 // Used for call and invoke instructions
Reid Spencer38c91a92007-02-28 02:24:54 +00005219 (yyval.ValueRefList) = new ValueRefList();
5220 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5221 (yyval.ValueRefList)->push_back(E);
Reid Spencer66728ef2007-03-20 01:13:36 +00005222 delete (yyvsp[-2].TypeVal);
Reid Spencer38c91a92007-02-28 02:24:54 +00005223 ;}
5224 break;
5225
5226 case 258:
Reid Spencer66728ef2007-03-20 01:13:36 +00005227#line 2615 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005228 {
Reid Spencer14310612006-12-31 05:40:51 +00005229 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005230 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5231 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5232 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5233 (yyval.ValueRefList)->push_back(E);
Reid Spencer66728ef2007-03-20 01:13:36 +00005234 delete (yyvsp[-2].TypeVal);
Reid Spencer6f407902007-01-13 05:00:46 +00005235 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005236 ;}
5237 break;
5238
5239 case 259:
Reid Spencer66728ef2007-03-20 01:13:36 +00005240#line 2624 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005241 { (yyval.ValueRefList) = new ValueRefList(); ;}
5242 break;
5243
5244 case 260:
Reid Spencer66728ef2007-03-20 01:13:36 +00005245#line 2627 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005246 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5247 break;
5248
5249 case 261:
Reid Spencer66728ef2007-03-20 01:13:36 +00005250#line 2628 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005251 {
5252 (yyval.ValueList) = (yyvsp[-2].ValueList);
5253 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencer14310612006-12-31 05:40:51 +00005254 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005255 ;}
5256 break;
5257
5258 case 262:
Reid Spencer66728ef2007-03-20 01:13:36 +00005259#line 2635 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005260 {
5261 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005262 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005263 ;}
5264 break;
5265
5266 case 263:
Reid Spencer66728ef2007-03-20 01:13:36 +00005267#line 2639 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005268 {
5269 (yyval.BoolVal) = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005270 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005271 ;}
5272 break;
5273
5274 case 264:
Reid Spencer66728ef2007-03-20 01:13:36 +00005275#line 2644 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005276 {
Reid Spencer14310612006-12-31 05:40:51 +00005277 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005278 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5279 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5280 !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Reid Spencere4d87aa2006-12-23 06:05:41 +00005281 GEN_ERROR(
Reid Spencerb5334b02007-02-05 10:18:06 +00005282 "Arithmetic operator requires integer, FP, or packed operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00005283 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) &&
5284 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5285 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5286 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Chris Lattner32980692007-02-19 07:44:24 +00005287 GEN_ERROR("Remainder not supported on vector types");
Reid Spencer38c91a92007-02-28 02:24:54 +00005288 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005289 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005290 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005291 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005292 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5293 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005294 GEN_ERROR("binary operator returned null");
Reid Spencer38c91a92007-02-28 02:24:54 +00005295 delete (yyvsp[-3].TypeVal);
5296 ;}
5297 break;
5298
5299 case 265:
Reid Spencer66728ef2007-03-20 01:13:36 +00005300#line 2665 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005301 {
Reid Spencer14310612006-12-31 05:40:51 +00005302 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005303 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5304 if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
5305 if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
5306 !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
Reid Spencerb5334b02007-02-05 10:18:06 +00005307 GEN_ERROR("Logical operator requires integral operands");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005308 }
Reid Spencer38c91a92007-02-28 02:24:54 +00005309 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005310 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005311 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005312 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005313 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5314 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005315 GEN_ERROR("binary operator returned null");
Reid Spencer38c91a92007-02-28 02:24:54 +00005316 delete (yyvsp[-3].TypeVal);
5317 ;}
5318 break;
5319
5320 case 266:
Reid Spencer66728ef2007-03-20 01:13:36 +00005321#line 2682 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005322 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005323 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005324 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5325 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Chris Lattner32980692007-02-19 07:44:24 +00005326 GEN_ERROR("Vector types not supported by icmp instruction");
Reid Spencer38c91a92007-02-28 02:24:54 +00005327 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005328 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005329 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005330 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005331 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5332 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005333 GEN_ERROR("icmp operator returned null");
Reid Spencer66728ef2007-03-20 01:13:36 +00005334 delete (yyvsp[-3].TypeVal);
Reid Spencer38c91a92007-02-28 02:24:54 +00005335 ;}
5336 break;
5337
5338 case 267:
Reid Spencer66728ef2007-03-20 01:13:36 +00005339#line 2696 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005340 {
Reid Spencer14310612006-12-31 05:40:51 +00005341 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005342 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5343 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Chris Lattner32980692007-02-19 07:44:24 +00005344 GEN_ERROR("Vector types not supported by fcmp instruction");
Reid Spencer38c91a92007-02-28 02:24:54 +00005345 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005346 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005347 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005348 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005349 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5350 if ((yyval.InstVal) == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005351 GEN_ERROR("fcmp operator returned null");
Reid Spencer66728ef2007-03-20 01:13:36 +00005352 delete (yyvsp[-3].TypeVal);
Reid Spencer38c91a92007-02-28 02:24:54 +00005353 ;}
5354 break;
5355
5356 case 268:
Reid Spencer66728ef2007-03-20 01:13:36 +00005357#line 2710 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005358 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005359 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005360 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5361 Value* Val = (yyvsp[-2].ValueVal);
5362 const Type* DestTy = (yyvsp[0].TypeVal)->get();
5363 if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005364 GEN_ERROR("invalid cast opcode for cast from '" +
5365 Val->getType()->getDescription() + "' to '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005366 DestTy->getDescription() + "'");
Reid Spencer38c91a92007-02-28 02:24:54 +00005367 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
5368 delete (yyvsp[0].TypeVal);
5369 ;}
5370 break;
5371
5372 case 269:
Reid Spencer66728ef2007-03-20 01:13:36 +00005373#line 2722 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005374 {
5375 if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00005376 GEN_ERROR("select condition must be boolean");
Reid Spencer38c91a92007-02-28 02:24:54 +00005377 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Reid Spencerb5334b02007-02-05 10:18:06 +00005378 GEN_ERROR("select value types should match");
Reid Spencer38c91a92007-02-28 02:24:54 +00005379 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005380 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005381 ;}
5382 break;
5383
5384 case 270:
Reid Spencer66728ef2007-03-20 01:13:36 +00005385#line 2730 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005386 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005387 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005388 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5389 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5390 delete (yyvsp[0].TypeVal);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005391 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005392 ;}
5393 break;
5394
5395 case 271:
Reid Spencer66728ef2007-03-20 01:13:36 +00005396#line 2737 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005397 {
5398 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005399 GEN_ERROR("Invalid extractelement operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00005400 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005401 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005402 ;}
5403 break;
5404
5405 case 272:
Reid Spencer66728ef2007-03-20 01:13:36 +00005406#line 2743 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005407 {
5408 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005409 GEN_ERROR("Invalid insertelement operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00005410 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005411 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005412 ;}
5413 break;
5414
5415 case 273:
Reid Spencer66728ef2007-03-20 01:13:36 +00005416#line 2749 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005417 {
5418 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencerb5334b02007-02-05 10:18:06 +00005419 GEN_ERROR("Invalid shufflevector operands");
Reid Spencer38c91a92007-02-28 02:24:54 +00005420 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005421 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005422 ;}
5423 break;
5424
5425 case 274:
Reid Spencer66728ef2007-03-20 01:13:36 +00005426#line 2755 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005427 {
5428 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005429 if (!Ty->isFirstClassType())
Reid Spencerb5334b02007-02-05 10:18:06 +00005430 GEN_ERROR("PHI node operands must be of first class type");
Reid Spencer38c91a92007-02-28 02:24:54 +00005431 (yyval.InstVal) = new PHINode(Ty);
5432 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5433 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5434 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Reid Spencerb5334b02007-02-05 10:18:06 +00005435 GEN_ERROR("All elements of a PHI node must be of the same type");
Reid Spencer38c91a92007-02-28 02:24:54 +00005436 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5437 (yyvsp[0].PHIList)->pop_front();
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005438 }
Reid Spencer38c91a92007-02-28 02:24:54 +00005439 delete (yyvsp[0].PHIList); // Free the list...
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005440 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005441 ;}
5442 break;
5443
5444 case 275:
Reid Spencer66728ef2007-03-20 01:13:36 +00005445#line 2771 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005446 {
Reid Spencer14310612006-12-31 05:40:51 +00005447
5448 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005449 const PointerType *PFTy = 0;
5450 const FunctionType *Ty = 0;
Reid Spencer38c91a92007-02-28 02:24:54 +00005451 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005452 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5453 // Pull out the types of all of the arguments...
5454 std::vector<const Type*> ParamTypes;
Reid Spencer14310612006-12-31 05:40:51 +00005455 FunctionType::ParamAttrsList ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00005456 ParamAttrs.push_back((yyvsp[0].ParamAttrs));
5457 for (ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end(); I != E; ++I) {
Reid Spencer14310612006-12-31 05:40:51 +00005458 const Type *Ty = I->Val->getType();
5459 if (Ty == Type::VoidTy)
5460 GEN_ERROR("Short call syntax cannot be used with varargs");
5461 ParamTypes.push_back(Ty);
5462 ParamAttrs.push_back(I->Attrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005463 }
5464
Reid Spencer38c91a92007-02-28 02:24:54 +00005465 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, ParamAttrs);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005466 PFTy = PointerType::get(Ty);
5467 }
5468
Reid Spencer38c91a92007-02-28 02:24:54 +00005469 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005470 CHECK_FOR_ERROR
5471
Reid Spencer14310612006-12-31 05:40:51 +00005472 // Check the arguments
5473 ValueList Args;
Reid Spencer38c91a92007-02-28 02:24:54 +00005474 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005475 // Make sure no arguments is a good thing!
5476 if (Ty->getNumParams() != 0)
5477 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005478 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005479 } else { // Has arguments?
5480 // Loop through FunctionType's arguments and ensure they are specified
5481 // correctly!
5482 //
5483 FunctionType::param_iterator I = Ty->param_begin();
5484 FunctionType::param_iterator E = Ty->param_end();
Reid Spencer38c91a92007-02-28 02:24:54 +00005485 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005486
Reid Spencer14310612006-12-31 05:40:51 +00005487 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5488 if (ArgI->Val->getType() != *I)
5489 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005490 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005491 Args.push_back(ArgI->Val);
5492 }
5493 if (Ty->isVarArg()) {
5494 if (I == E)
5495 for (; ArgI != ArgE; ++ArgI)
5496 Args.push_back(ArgI->Val); // push the remaining varargs
5497 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005498 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005499 }
Reid Spencer14310612006-12-31 05:40:51 +00005500 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00005501 CallInst *CI = new CallInst(V, &Args[0], Args.size());
Reid Spencer38c91a92007-02-28 02:24:54 +00005502 CI->setTailCall((yyvsp[-7].BoolVal));
5503 CI->setCallingConv((yyvsp[-6].UIntVal));
5504 (yyval.InstVal) = CI;
5505 delete (yyvsp[-2].ValueRefList);
5506 delete (yyvsp[-5].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005507 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005508 ;}
5509 break;
5510
5511 case 276:
Reid Spencer66728ef2007-03-20 01:13:36 +00005512#line 2834 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005513 {
5514 (yyval.InstVal) = (yyvsp[0].InstVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005515 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005516 ;}
5517 break;
5518
5519 case 277:
Reid Spencer66728ef2007-03-20 01:13:36 +00005520#line 2839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005521 {
5522 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005523 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005524 ;}
5525 break;
5526
5527 case 278:
Reid Spencer66728ef2007-03-20 01:13:36 +00005528#line 2843 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005529 {
5530 (yyval.BoolVal) = false;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005531 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005532 ;}
5533 break;
5534
5535 case 279:
Reid Spencer66728ef2007-03-20 01:13:36 +00005536#line 2850 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005537 {
Reid Spencer6f407902007-01-13 05:00:46 +00005538 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005539 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5540 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5541 delete (yyvsp[-1].TypeVal);
Reid Spencer6f407902007-01-13 05:00:46 +00005542 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005543 ;}
5544 break;
5545
5546 case 280:
Reid Spencer66728ef2007-03-20 01:13:36 +00005547#line 2857 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005548 {
Reid Spencer14310612006-12-31 05:40:51 +00005549 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005550 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5551 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005552 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005553 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5554 delete (yyvsp[-4].TypeVal);
5555 ;}
5556 break;
5557
5558 case 281:
Reid Spencer66728ef2007-03-20 01:13:36 +00005559#line 2865 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005560 {
Reid Spencer14310612006-12-31 05:40:51 +00005561 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005562 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5563 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5564 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005565 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005566 ;}
5567 break;
5568
5569 case 282:
Reid Spencer66728ef2007-03-20 01:13:36 +00005570#line 2872 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005571 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005572 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005573 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5574 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005575 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005576 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5577 delete (yyvsp[-4].TypeVal);
5578 ;}
5579 break;
5580
5581 case 283:
Reid Spencer66728ef2007-03-20 01:13:36 +00005582#line 2880 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005583 {
5584 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005585 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencer38c91a92007-02-28 02:24:54 +00005586 (yyvsp[0].ValueVal)->getType()->getDescription() + "");
5587 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005588 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005589 ;}
5590 break;
5591
5592 case 284:
Reid Spencer66728ef2007-03-20 01:13:36 +00005593#line 2888 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005594 {
Reid Spencer14310612006-12-31 05:40:51 +00005595 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005596 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5597 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005598 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencer38c91a92007-02-28 02:24:54 +00005599 (*(yyvsp[-1].TypeVal))->getDescription());
5600 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005601 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencer38c91a92007-02-28 02:24:54 +00005602 (*(yyvsp[-1].TypeVal))->getDescription());
5603 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005604 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005605 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
5606 delete (yyvsp[-1].TypeVal);
5607 ;}
5608 break;
5609
5610 case 285:
Reid Spencer66728ef2007-03-20 01:13:36 +00005611#line 2902 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005612 {
Reid Spencer14310612006-12-31 05:40:51 +00005613 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005614 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5615 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005616 if (!PT)
5617 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencer38c91a92007-02-28 02:24:54 +00005618 (*(yyvsp[-1].TypeVal))->getDescription());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005619 const Type *ElTy = PT->getElementType();
Reid Spencer38c91a92007-02-28 02:24:54 +00005620 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5621 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
Reid Spencerb5334b02007-02-05 10:18:06 +00005622 "' into space of type '" + ElTy->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005623
Reid Spencer38c91a92007-02-28 02:24:54 +00005624 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005625 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005626 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5627 delete (yyvsp[-1].TypeVal);
5628 ;}
5629 break;
5630
5631 case 286:
Reid Spencer66728ef2007-03-20 01:13:36 +00005632#line 2919 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer38c91a92007-02-28 02:24:54 +00005633 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005634 if (!UpRefs.empty())
Reid Spencer38c91a92007-02-28 02:24:54 +00005635 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5636 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00005637 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005638
Reid Spencer38c91a92007-02-28 02:24:54 +00005639 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005640 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencer38c91a92007-02-28 02:24:54 +00005641 (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
5642 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005643 CHECK_FOR_ERROR
Reid Spencer38c91a92007-02-28 02:24:54 +00005644 (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
5645 delete (yyvsp[-2].TypeVal);
5646 delete (yyvsp[0].ValueList);
5647 ;}
5648 break;
5649
5650
5651 default: break;
5652 }
5653
5654/* Line 1126 of yacc.c. */
Reid Spencer66728ef2007-03-20 01:13:36 +00005655#line 5656 "llvmAsmParser.tab.c"
Chris Lattner9d2fda62007-02-13 05:53:56 +00005656
5657 yyvsp -= yylen;
5658 yyssp -= yylen;
Reid Spencer5cbf9852007-01-30 20:08:39 +00005659
Reid Spencer38c91a92007-02-28 02:24:54 +00005660
5661 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005662
5663 *++yyvsp = yyval;
5664
5665
Reid Spencer38c91a92007-02-28 02:24:54 +00005666 /* Now `shift' the result of the reduction. Determine what state
5667 that goes to, based on the state we popped back to and the rule
5668 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005669
5670 yyn = yyr1[yyn];
5671
Reid Spencer38c91a92007-02-28 02:24:54 +00005672 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5673 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005674 yystate = yytable[yystate];
5675 else
Reid Spencer38c91a92007-02-28 02:24:54 +00005676 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005677
5678 goto yynewstate;
5679
5680
Reid Spencer38c91a92007-02-28 02:24:54 +00005681/*------------------------------------.
5682| yyerrlab -- here on detecting error |
5683`------------------------------------*/
5684yyerrlab:
5685 /* If not already recovering from an error, report this error. */
5686 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005687 {
5688 ++yynerrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00005689#if YYERROR_VERBOSE
Chris Lattner9d2fda62007-02-13 05:53:56 +00005690 yyn = yypact[yystate];
5691
Reid Spencer38c91a92007-02-28 02:24:54 +00005692 if (YYPACT_NINF < yyn && yyn < YYLAST)
Chris Lattner9d2fda62007-02-13 05:53:56 +00005693 {
Reid Spencer38c91a92007-02-28 02:24:54 +00005694 int yytype = YYTRANSLATE (yychar);
5695 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5696 YYSIZE_T yysize = yysize0;
5697 YYSIZE_T yysize1;
5698 int yysize_overflow = 0;
5699 char *yymsg = 0;
5700# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5701 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5702 int yyx;
Chris Lattner9d2fda62007-02-13 05:53:56 +00005703
Reid Spencer38c91a92007-02-28 02:24:54 +00005704#if 0
5705 /* This is so xgettext sees the translatable formats that are
5706 constructed on the fly. */
5707 YY_("syntax error, unexpected %s");
5708 YY_("syntax error, unexpected %s, expecting %s");
5709 YY_("syntax error, unexpected %s, expecting %s or %s");
5710 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5711 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5712#endif
5713 char *yyfmt;
5714 char const *yyf;
5715 static char const yyunexpected[] = "syntax error, unexpected %s";
5716 static char const yyexpecting[] = ", expecting %s";
5717 static char const yyor[] = " or %s";
5718 char yyformat[sizeof yyunexpected
5719 + sizeof yyexpecting - 1
5720 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5721 * (sizeof yyor - 1))];
5722 char const *yyprefix = yyexpecting;
5723
5724 /* Start YYX at -YYN if negative to avoid negative indexes in
5725 YYCHECK. */
5726 int yyxbegin = yyn < 0 ? -yyn : 0;
5727
5728 /* Stay within bounds of both yycheck and yytname. */
5729 int yychecklim = YYLAST - yyn;
5730 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5731 int yycount = 1;
5732
5733 yyarg[0] = yytname[yytype];
5734 yyfmt = yystpcpy (yyformat, yyunexpected);
5735
5736 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5737 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5738 {
5739 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5740 {
5741 yycount = 1;
5742 yysize = yysize0;
5743 yyformat[sizeof yyunexpected - 1] = '\0';
5744 break;
5745 }
5746 yyarg[yycount++] = yytname[yyx];
5747 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5748 yysize_overflow |= yysize1 < yysize;
5749 yysize = yysize1;
5750 yyfmt = yystpcpy (yyfmt, yyprefix);
5751 yyprefix = yyor;
5752 }
5753
5754 yyf = YY_(yyformat);
5755 yysize1 = yysize + yystrlen (yyf);
5756 yysize_overflow |= yysize1 < yysize;
5757 yysize = yysize1;
5758
5759 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5760 yymsg = (char *) YYSTACK_ALLOC (yysize);
5761 if (yymsg)
Chris Lattner9d2fda62007-02-13 05:53:56 +00005762 {
Reid Spencer38c91a92007-02-28 02:24:54 +00005763 /* Avoid sprintf, as that infringes on the user's name space.
5764 Don't have undefined behavior even if the translation
5765 produced a string with the wrong number of "%s"s. */
5766 char *yyp = yymsg;
5767 int yyi = 0;
5768 while ((*yyp = *yyf))
Chris Lattner9d2fda62007-02-13 05:53:56 +00005769 {
Reid Spencer38c91a92007-02-28 02:24:54 +00005770 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5771 {
5772 yyp += yytnamerr (yyp, yyarg[yyi++]);
5773 yyf += 2;
5774 }
5775 else
5776 {
5777 yyp++;
5778 yyf++;
5779 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00005780 }
Reid Spencer38c91a92007-02-28 02:24:54 +00005781 yyerror (yymsg);
5782 YYSTACK_FREE (yymsg);
Chris Lattner9d2fda62007-02-13 05:53:56 +00005783 }
5784 else
Reid Spencer38c91a92007-02-28 02:24:54 +00005785 {
5786 yyerror (YY_("syntax error"));
5787 goto yyexhaustedlab;
5788 }
Chris Lattner9d2fda62007-02-13 05:53:56 +00005789 }
5790 else
5791#endif /* YYERROR_VERBOSE */
Reid Spencer38c91a92007-02-28 02:24:54 +00005792 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005793 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00005794
Reid Spencer38c91a92007-02-28 02:24:54 +00005795
Reid Spencer41dff5e2007-01-26 08:05:27 +00005796
5797 if (yyerrstatus == 3)
5798 {
Reid Spencer38c91a92007-02-28 02:24:54 +00005799 /* If just tried and failed to reuse look-ahead token after an
5800 error, discard it. */
Reid Spencer41dff5e2007-01-26 08:05:27 +00005801
Reid Spencer38c91a92007-02-28 02:24:54 +00005802 if (yychar <= YYEOF)
5803 {
5804 /* Return failure if at end of input. */
5805 if (yychar == YYEOF)
5806 YYABORT;
5807 }
5808 else
5809 {
5810 yydestruct ("Error: discarding", yytoken, &yylval);
5811 yychar = YYEMPTY;
5812 }
5813 }
5814
5815 /* Else will try to reuse look-ahead token after shifting the error
5816 token. */
5817 goto yyerrlab1;
5818
5819
5820/*---------------------------------------------------.
5821| yyerrorlab -- error raised explicitly by YYERROR. |
5822`---------------------------------------------------*/
5823yyerrorlab:
5824
5825 /* Pacify compilers like GCC when the user code never invokes
5826 YYERROR and the label yyerrorlab therefore never appears in user
5827 code. */
5828 if (0)
5829 goto yyerrorlab;
5830
5831yyvsp -= yylen;
5832 yyssp -= yylen;
5833 yystate = *yyssp;
5834 goto yyerrlab1;
5835
5836
5837/*-------------------------------------------------------------.
5838| yyerrlab1 -- common code for both syntax error and YYERROR. |
5839`-------------------------------------------------------------*/
5840yyerrlab1:
5841 yyerrstatus = 3; /* Each real token shifted decrements this. */
5842
5843 for (;;)
5844 {
5845 yyn = yypact[yystate];
5846 if (yyn != YYPACT_NINF)
5847 {
5848 yyn += YYTERROR;
5849 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5850 {
5851 yyn = yytable[yyn];
5852 if (0 < yyn)
5853 break;
5854 }
5855 }
5856
5857 /* Pop the current state because it cannot handle the error token. */
5858 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005859 YYABORT;
5860
Reid Spencere4d87aa2006-12-23 06:05:41 +00005861
Reid Spencer38c91a92007-02-28 02:24:54 +00005862 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5863 YYPOPSTACK;
5864 yystate = *yyssp;
5865 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005866 }
5867
5868 if (yyn == YYFINAL)
5869 YYACCEPT;
5870
Reid Spencer68a24bd2005-08-27 18:50:39 +00005871 *++yyvsp = yylval;
Reid Spencer38c91a92007-02-28 02:24:54 +00005872
5873
5874 /* Shift the error token. */
5875 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer41dff5e2007-01-26 08:05:27 +00005876
Reid Spencer68a24bd2005-08-27 18:50:39 +00005877 yystate = yyn;
5878 goto yynewstate;
5879
Chris Lattner32980692007-02-19 07:44:24 +00005880
Reid Spencer38c91a92007-02-28 02:24:54 +00005881/*-------------------------------------.
5882| yyacceptlab -- YYACCEPT comes here. |
5883`-------------------------------------*/
5884yyacceptlab:
5885 yyresult = 0;
5886 goto yyreturn;
5887
5888/*-----------------------------------.
5889| yyabortlab -- YYABORT comes here. |
5890`-----------------------------------*/
5891yyabortlab:
5892 yyresult = 1;
5893 goto yyreturn;
5894
5895#ifndef yyoverflow
5896/*-------------------------------------------------.
5897| yyexhaustedlab -- memory exhaustion comes here. |
5898`-------------------------------------------------*/
5899yyexhaustedlab:
5900 yyerror (YY_("memory exhausted"));
5901 yyresult = 2;
5902 /* Fall through. */
Chris Lattner32980692007-02-19 07:44:24 +00005903#endif
Reid Spencer38c91a92007-02-28 02:24:54 +00005904
5905yyreturn:
5906 if (yychar != YYEOF && yychar != YYEMPTY)
5907 yydestruct ("Cleanup: discarding lookahead",
5908 yytoken, &yylval);
5909 while (yyssp != yyss)
5910 {
5911 yydestruct ("Cleanup: popping",
5912 yystos[*yyssp], yyvsp);
5913 YYPOPSTACK;
Chris Lattner32980692007-02-19 07:44:24 +00005914 }
Reid Spencer38c91a92007-02-28 02:24:54 +00005915#ifndef yyoverflow
5916 if (yyss != yyssa)
5917 YYSTACK_FREE (yyss);
5918#endif
5919 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005920}
Reid Spencer38c91a92007-02-28 02:24:54 +00005921
5922
Reid Spencer66728ef2007-03-20 01:13:36 +00005923#line 2936 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005924
5925
Reid Spencer14310612006-12-31 05:40:51 +00005926// common code from the two 'RunVMAsmParser' functions
5927static Module* RunParser(Module * M) {
5928
5929 llvmAsmlineno = 1; // Reset the current line number...
5930 CurModule.CurrentModule = M;
5931#if YYDEBUG
5932 yydebug = Debug;
5933#endif
5934
5935 // Check to make sure the parser succeeded
5936 if (yyparse()) {
5937 if (ParserResult)
5938 delete ParserResult;
5939 return 0;
5940 }
5941
5942 // Check to make sure that parsing produced a result
5943 if (!ParserResult)
5944 return 0;
5945
5946 // Reset ParserResult variable while saving its value for the result.
5947 Module *Result = ParserResult;
5948 ParserResult = 0;
5949
5950 return Result;
5951}
5952
Reid Spencer61c83e02006-08-18 08:43:06 +00005953void llvm::GenerateError(const std::string &message, int LineNo) {
5954 if (LineNo == -1) LineNo = llvmAsmlineno;
5955 // TODO: column number in exception
5956 if (TheParseError)
5957 TheParseError->setError(CurFilename, message, LineNo);
5958 TriggerError = 1;
5959}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005960
5961int yyerror(const char *ErrorMsg) {
5962 std::string where
5963 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5964 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00005965 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5966 if (yychar != YYEMPTY && yychar != 0)
5967 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5968 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005969 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005970 return 0;
5971}
Reid Spencer38c91a92007-02-28 02:24:54 +00005972