blob: 0336d9ec2f22f4b32cce563fad73711d7b6c755c [file] [log] [blame]
Reid Spencer3822ff52006-11-08 06:47:33 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Reid Spencer3822ff52006-11-08 06:47:33 +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.
Reid Spencer68a24bd2005-08-27 18:50:39 +00005
Reid Spencer3822ff52006-11-08 06:47:33 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +000010
Reid Spencer3822ff52006-11-08 06:47:33 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
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 Spencer3822ff52006-11-08 06:47:33 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencer3822ff52006-11-08 06:47:33 +000055#define yylval llvmAsmlval
56#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000057#define yydebug llvmAsmdebug
58#define yynerrs llvmAsmnerrs
59
Reid Spencer3822ff52006-11-08 06:47:33 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 SINTVAL = 260,
70 UINTVAL = 261,
71 FPVAL = 262,
72 VOID = 263,
73 BOOL = 264,
74 SBYTE = 265,
75 UBYTE = 266,
76 SHORT = 267,
77 USHORT = 268,
78 INT = 269,
79 UINT = 270,
80 LONG = 271,
81 ULONG = 272,
82 FLOAT = 273,
83 DOUBLE = 274,
84 TYPE = 275,
85 LABEL = 276,
86 VAR_ID = 277,
87 LABELSTR = 278,
88 STRINGCONSTANT = 279,
89 IMPLEMENTATION = 280,
90 ZEROINITIALIZER = 281,
91 TRUETOK = 282,
92 FALSETOK = 283,
93 BEGINTOK = 284,
94 ENDTOK = 285,
95 DECLARE = 286,
96 GLOBAL = 287,
97 CONSTANT = 288,
98 SECTION = 289,
99 VOLATILE = 290,
100 TO = 291,
101 DOTDOTDOT = 292,
102 NULL_TOK = 293,
103 UNDEF = 294,
104 CONST = 295,
105 INTERNAL = 296,
106 LINKONCE = 297,
107 WEAK = 298,
108 APPENDING = 299,
109 DLLIMPORT = 300,
110 DLLEXPORT = 301,
111 EXTERN_WEAK = 302,
112 OPAQUE = 303,
113 NOT = 304,
114 EXTERNAL = 305,
115 TARGET = 306,
116 TRIPLE = 307,
117 ENDIAN = 308,
118 POINTERSIZE = 309,
119 LITTLE = 310,
120 BIG = 311,
121 ALIGN = 312,
122 DEPLIBS = 313,
123 CALL = 314,
124 TAIL = 315,
125 ASM_TOK = 316,
126 MODULE = 317,
127 SIDEEFFECT = 318,
128 CC_TOK = 319,
129 CCC_TOK = 320,
130 CSRETCC_TOK = 321,
131 FASTCC_TOK = 322,
132 COLDCC_TOK = 323,
133 X86_STDCALLCC_TOK = 324,
134 X86_FASTCALLCC_TOK = 325,
135 DATALAYOUT = 326,
136 RET = 327,
137 BR = 328,
138 SWITCH = 329,
139 INVOKE = 330,
140 UNWIND = 331,
141 UNREACHABLE = 332,
142 ADD = 333,
143 SUB = 334,
144 MUL = 335,
145 UDIV = 336,
146 SDIV = 337,
147 FDIV = 338,
148 UREM = 339,
149 SREM = 340,
150 FREM = 341,
151 AND = 342,
152 OR = 343,
153 XOR = 344,
154 SETLE = 345,
155 SETGE = 346,
156 SETLT = 347,
157 SETGT = 348,
158 SETEQ = 349,
159 SETNE = 350,
Reid Spencera132e042006-12-03 05:46:11 +0000160 ICMP = 351,
161 FCMP = 352,
162 EQ = 353,
163 NE = 354,
164 SLT = 355,
165 SGT = 356,
166 SLE = 357,
167 SGE = 358,
168 ULT = 359,
169 UGT = 360,
170 ULE = 361,
171 UGE = 362,
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000172 OEQ = 363,
173 ONE = 364,
174 OLT = 365,
175 OGT = 366,
176 OLE = 367,
177 OGE = 368,
Reid Spencera132e042006-12-03 05:46:11 +0000178 ORD = 369,
179 UNO = 370,
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000180 UEQ = 371,
181 UNE = 372,
182 MALLOC = 373,
183 ALLOCA = 374,
184 FREE = 375,
185 LOAD = 376,
186 STORE = 377,
187 GETELEMENTPTR = 378,
188 TRUNC = 379,
189 ZEXT = 380,
190 SEXT = 381,
191 FPTRUNC = 382,
192 FPEXT = 383,
193 BITCAST = 384,
194 UITOFP = 385,
195 SITOFP = 386,
196 FPTOUI = 387,
197 FPTOSI = 388,
198 INTTOPTR = 389,
199 PTRTOINT = 390,
200 PHI_TOK = 391,
201 SELECT = 392,
202 SHL = 393,
203 LSHR = 394,
204 ASHR = 395,
205 VAARG = 396,
206 EXTRACTELEMENT = 397,
207 INSERTELEMENT = 398,
Reid Spencercd42c582006-12-05 23:29:42 +0000208 SHUFFLEVECTOR = 399
Reid Spencer3822ff52006-11-08 06:47:33 +0000209 };
210#endif
211/* Tokens. */
212#define ESINT64VAL 258
213#define EUINT64VAL 259
214#define SINTVAL 260
215#define UINTVAL 261
216#define FPVAL 262
217#define VOID 263
218#define BOOL 264
219#define SBYTE 265
220#define UBYTE 266
221#define SHORT 267
222#define USHORT 268
223#define INT 269
224#define UINT 270
225#define LONG 271
226#define ULONG 272
227#define FLOAT 273
228#define DOUBLE 274
229#define TYPE 275
230#define LABEL 276
231#define VAR_ID 277
232#define LABELSTR 278
233#define STRINGCONSTANT 279
234#define IMPLEMENTATION 280
235#define ZEROINITIALIZER 281
236#define TRUETOK 282
237#define FALSETOK 283
238#define BEGINTOK 284
239#define ENDTOK 285
240#define DECLARE 286
241#define GLOBAL 287
242#define CONSTANT 288
243#define SECTION 289
244#define VOLATILE 290
245#define TO 291
246#define DOTDOTDOT 292
247#define NULL_TOK 293
248#define UNDEF 294
249#define CONST 295
250#define INTERNAL 296
251#define LINKONCE 297
252#define WEAK 298
253#define APPENDING 299
254#define DLLIMPORT 300
255#define DLLEXPORT 301
256#define EXTERN_WEAK 302
257#define OPAQUE 303
258#define NOT 304
259#define EXTERNAL 305
260#define TARGET 306
261#define TRIPLE 307
262#define ENDIAN 308
263#define POINTERSIZE 309
264#define LITTLE 310
265#define BIG 311
266#define ALIGN 312
267#define DEPLIBS 313
268#define CALL 314
269#define TAIL 315
270#define ASM_TOK 316
271#define MODULE 317
272#define SIDEEFFECT 318
273#define CC_TOK 319
274#define CCC_TOK 320
275#define CSRETCC_TOK 321
276#define FASTCC_TOK 322
277#define COLDCC_TOK 323
278#define X86_STDCALLCC_TOK 324
279#define X86_FASTCALLCC_TOK 325
280#define DATALAYOUT 326
281#define RET 327
282#define BR 328
283#define SWITCH 329
284#define INVOKE 330
285#define UNWIND 331
286#define UNREACHABLE 332
287#define ADD 333
288#define SUB 334
289#define MUL 335
290#define UDIV 336
291#define SDIV 337
292#define FDIV 338
293#define UREM 339
294#define SREM 340
295#define FREM 341
296#define AND 342
297#define OR 343
298#define XOR 344
299#define SETLE 345
300#define SETGE 346
301#define SETLT 347
302#define SETGT 348
303#define SETEQ 349
304#define SETNE 350
Reid Spencera132e042006-12-03 05:46:11 +0000305#define ICMP 351
306#define FCMP 352
307#define EQ 353
308#define NE 354
309#define SLT 355
310#define SGT 356
311#define SLE 357
312#define SGE 358
313#define ULT 359
314#define UGT 360
315#define ULE 361
316#define UGE 362
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000317#define OEQ 363
318#define ONE 364
319#define OLT 365
320#define OGT 366
321#define OLE 367
322#define OGE 368
Reid Spencera132e042006-12-03 05:46:11 +0000323#define ORD 369
324#define UNO 370
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000325#define UEQ 371
326#define UNE 372
327#define MALLOC 373
328#define ALLOCA 374
329#define FREE 375
330#define LOAD 376
331#define STORE 377
332#define GETELEMENTPTR 378
333#define TRUNC 379
334#define ZEXT 380
335#define SEXT 381
336#define FPTRUNC 382
337#define FPEXT 383
338#define BITCAST 384
339#define UITOFP 385
340#define SITOFP 386
341#define FPTOUI 387
342#define FPTOSI 388
343#define INTTOPTR 389
344#define PTRTOINT 390
345#define PHI_TOK 391
346#define SELECT 392
347#define SHL 393
348#define LSHR 394
349#define ASHR 395
350#define VAARG 396
351#define EXTRACTELEMENT 397
352#define INSERTELEMENT 398
353#define SHUFFLEVECTOR 399
Reid Spencer3822ff52006-11-08 06:47:33 +0000354
355
356
357
358/* Copy the first part of user declarations. */
Reid Spencer4012e832006-12-04 05:24:24 +0000359#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000360
361#include "ParserInternals.h"
362#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000363#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000364#include "llvm/Instructions.h"
365#include "llvm/Module.h"
366#include "llvm/SymbolTable.h"
367#include "llvm/Support/GetElementPtrTypeIterator.h"
368#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000369#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000370#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000371#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000372#include <list>
373#include <utility>
374
Reid Spencere4f47592006-08-18 17:32:55 +0000375// The following is a gross hack. In order to rid the libAsmParser library of
376// exceptions, we have to have a way of getting the yyparse function to go into
377// an error situation. So, whenever we want an error to occur, the GenerateError
378// function (see bottom of file) sets TriggerError. Then, at the end of each
379// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
380// (a goto) to put YACC in error state. Furthermore, several calls to
381// GenerateError are made from inside productions and they must simulate the
382// previous exception behavior by exiting the production immediately. We have
383// replaced these with the GEN_ERROR macro which calls GeneratError and then
384// immediately invokes YYERROR. This would be so much cleaner if it was a
385// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000386static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000387#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000388#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
389
Reid Spencer68a24bd2005-08-27 18:50:39 +0000390int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
391int yylex(); // declaration" of xxx warnings.
392int yyparse();
393
394namespace llvm {
395 std::string CurFilename;
396}
397using namespace llvm;
398
399static Module *ParserResult;
400
401// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
402// relating to upreferences in the input stream.
403//
404//#define DEBUG_UPREFS 1
405#ifdef DEBUG_UPREFS
Reid Spencer481169e2006-12-01 00:33:46 +0000406#define UR_OUT(X) llvm_cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000407#else
408#define UR_OUT(X)
409#endif
410
411#define YYERROR_VERBOSE 1
412
Reid Spencer68a24bd2005-08-27 18:50:39 +0000413static bool NewVarArgs;
Chris Lattnerb475c422005-11-12 18:22:38 +0000414static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000415
416
417// This contains info used when building the body of a function. It is
418// destroyed when the function is completed.
419//
420typedef std::vector<Value *> ValueList; // Numbered defs
421static void
422ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
423 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
424
425static struct PerModuleInfo {
426 Module *CurrentModule;
427 std::map<const Type *, ValueList> Values; // Module level numbered definitions
428 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000429 std::vector<PATypeHolder> Types;
430 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000431
432 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000433 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000434 /// that we can resolve them later and print error messages as appropriate.
435 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
436
437 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
438 // references to global values. Global values may be referenced before they
439 // are defined, and if so, the temporary object that they represent is held
440 // here. This is used for forward references of GlobalValues.
441 //
442 typedef std::map<std::pair<const PointerType *,
443 ValID>, GlobalValue*> GlobalRefsType;
444 GlobalRefsType GlobalRefs;
445
446 void ModuleDone() {
447 // If we could not resolve some functions at function compilation time
448 // (calls to functions before they are defined), resolve them now... Types
449 // are resolved when the constant pool has been completely parsed.
450 //
451 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000452 if (TriggerError)
453 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000454
455 // Check to make sure that all global value forward references have been
456 // resolved!
457 //
458 if (!GlobalRefs.empty()) {
459 std::string UndefinedReferences = "Unresolved global references exist:\n";
460
461 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
462 I != E; ++I) {
463 UndefinedReferences += " " + I->first.first->getDescription() + " " +
464 I->first.second.getName() + "\n";
465 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000466 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000467 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000468 }
469
470 Values.clear(); // Clear out function local definitions
471 Types.clear();
472 CurrentModule = 0;
473 }
474
Reid Spencer68a24bd2005-08-27 18:50:39 +0000475 // GetForwardRefForGlobal - Check to see if there is a forward reference
476 // for this global. If so, remove it from the GlobalRefs map and return it.
477 // If not, just return null.
478 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
479 // Check to see if there is a forward reference to this global variable...
480 // if there is, eliminate it and patch the reference to use the new def'n.
481 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
482 GlobalValue *Ret = 0;
483 if (I != GlobalRefs.end()) {
484 Ret = I->second;
485 GlobalRefs.erase(I);
486 }
487 return Ret;
488 }
489} CurModule;
490
491static struct PerFunctionInfo {
492 Function *CurrentFunction; // Pointer to current function being created
493
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000494 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000495 std::map<const Type*, ValueList> LateResolveValues;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000496 bool isDeclare; // Is this function a forward declararation?
497 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000498
499 /// BBForwardRefs - When we see forward references to basic blocks, keep
500 /// track of them here.
501 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
502 std::vector<BasicBlock*> NumberedBlocks;
503 unsigned NextBBNum;
504
505 inline PerFunctionInfo() {
506 CurrentFunction = 0;
507 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000508 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000509 }
510
511 inline void FunctionStart(Function *M) {
512 CurrentFunction = M;
513 NextBBNum = 0;
514 }
515
516 void FunctionDone() {
517 NumberedBlocks.clear();
518
519 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000520 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000521 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000522 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000523 return;
524 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000525
526 // Resolve all forward references now.
527 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
528
529 Values.clear(); // Clear out function local definitions
530 CurrentFunction = 0;
531 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000532 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000533 }
534} CurFun; // Info for the current function...
535
536static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
537
538
539//===----------------------------------------------------------------------===//
540// Code to handle definitions of all the types
541//===----------------------------------------------------------------------===//
542
543static int InsertValue(Value *V,
544 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
545 if (V->hasName()) return -1; // Is this a numbered definition?
546
547 // Yes, insert the value into the value table...
548 ValueList &List = ValueTab[V->getType()];
549 List.push_back(V);
550 return List.size()-1;
551}
552
553static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
554 switch (D.Type) {
555 case ValID::NumberVal: // Is it a numbered definition?
556 // Module constants occupy the lowest numbered slots...
557 if ((unsigned)D.Num < CurModule.Types.size())
Reid Spencer861d9d62006-11-28 07:29:44 +0000558 return CurModule.Types[(unsigned)D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000559 break;
560 case ValID::NameVal: // Is it a named definition?
561 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
562 D.destroy(); // Free old strdup'd memory...
563 return N;
564 }
565 break;
566 default:
Reid Spencer61c83e02006-08-18 08:43:06 +0000567 GenerateError("Internal parser error: Invalid symbol type reference!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000568 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000569 }
570
571 // If we reached here, we referenced either a symbol that we don't know about
572 // or an id number that hasn't been read yet. We may be referencing something
573 // forward, so just create an entry to be resolved later and get to it...
574 //
575 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
576
577
578 if (inFunctionScope()) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000579 if (D.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000580 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000581 return 0;
582 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000583 GenerateError("Reference to an undefined type: #" + itostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000584 return 0;
585 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000586 }
587
Reid Spencer861d9d62006-11-28 07:29:44 +0000588 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000589 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000590 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000591
Reid Spencer861d9d62006-11-28 07:29:44 +0000592 Type *Typ = OpaqueType::get();
593 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
594 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000595 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000596
597static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
598 SymbolTable &SymTab =
599 inFunctionScope() ? CurFun.CurrentFunction->getSymbolTable() :
600 CurModule.CurrentModule->getSymbolTable();
601 return SymTab.lookup(Ty, Name);
602}
603
604// getValNonImprovising - Look up the value specified by the provided type and
605// the provided ValID. If the value exists and has already been defined, return
606// it. Otherwise return null.
607//
608static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000609 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000610 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000611 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000612 return 0;
613 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000614
615 switch (D.Type) {
616 case ValID::NumberVal: { // Is it a numbered definition?
617 unsigned Num = (unsigned)D.Num;
618
619 // Module constants occupy the lowest numbered slots...
620 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
621 if (VI != CurModule.Values.end()) {
622 if (Num < VI->second.size())
623 return VI->second[Num];
624 Num -= VI->second.size();
625 }
626
627 // Make sure that our type is within bounds
628 VI = CurFun.Values.find(Ty);
629 if (VI == CurFun.Values.end()) return 0;
630
631 // Check that the number is within bounds...
632 if (VI->second.size() <= Num) return 0;
633
634 return VI->second[Num];
635 }
636
637 case ValID::NameVal: { // Is it a named definition?
638 Value *N = lookupInSymbolTable(Ty, std::string(D.Name));
639 if (N == 0) return 0;
640
641 D.destroy(); // Free old strdup'd memory...
642 return N;
643 }
644
645 // Check to make sure that "Ty" is an integral type, and that our
646 // value will fit into the specified type...
647 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000648 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000649 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000650 itostr(D.ConstPool64) + "' is invalid for type '" +
651 Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000652 return 0;
653 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000654 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000655
656 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000657 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
658 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000659 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000660 "' is invalid or out of range!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000661 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000662 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000663 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000664 }
665 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000666 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000667 }
668
669 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000670 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000671 GenerateError("FP constant invalid for type!!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000672 return 0;
673 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000674 return ConstantFP::get(Ty, D.ConstPoolFP);
675
676 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000677 if (!isa<PointerType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000678 GenerateError("Cannot create a a non pointer null!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000679 return 0;
680 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000681 return ConstantPointerNull::get(cast<PointerType>(Ty));
682
683 case ValID::ConstUndefVal: // Is it an undef value?
684 return UndefValue::get(Ty);
685
Chris Lattner7aa61892005-12-21 17:53:23 +0000686 case ValID::ConstZeroVal: // Is it a zero value?
687 return Constant::getNullValue(Ty);
688
Reid Spencer68a24bd2005-08-27 18:50:39 +0000689 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000690 if (D.ConstantValue->getType() != Ty) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000691 GenerateError("Constant expression type different from required type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000692 return 0;
693 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000694 return D.ConstantValue;
695
Chris Lattner0e9c3762006-01-25 22:27:16 +0000696 case ValID::InlineAsmVal: { // Inline asm expression
697 const PointerType *PTy = dyn_cast<PointerType>(Ty);
698 const FunctionType *FTy =
699 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000700 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000701 GenerateError("Invalid type for asm constraint string!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000702 return 0;
703 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000704 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
705 D.IAD->HasSideEffects);
706 D.destroy(); // Free InlineAsmDescriptor.
707 return IA;
708 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000709 default:
710 assert(0 && "Unhandled case!");
711 return 0;
712 } // End of switch
713
714 assert(0 && "Unhandled case!");
715 return 0;
716}
717
718// getVal - This function is identical to getValNonImprovising, except that if a
719// value is not already defined, it "improvises" by creating a placeholder var
720// that looks and acts just like the requested variable. When the value is
721// defined later, all uses of the placeholder variable are replaced with the
722// real thing.
723//
724static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000725 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000726 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000727 return 0;
728 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000729
730 // See if the value has already been defined.
731 Value *V = getValNonImprovising(Ty, ID);
732 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000733 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000734
Reid Spencer5b7e7532006-09-28 19:28:24 +0000735 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000736 GenerateError("Invalid use of a composite type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000737 return 0;
738 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000739
740 // If we reached here, we referenced either a symbol that we don't know about
741 // or an id number that hasn't been read yet. We may be referencing something
742 // forward, so just create an entry to be resolved later and get to it...
743 //
744 V = new Argument(Ty);
745
746 // Remember where this forward reference came from. FIXME, shouldn't we try
747 // to recycle these things??
748 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
749 llvmAsmlineno)));
750
751 if (inFunctionScope())
752 InsertValue(V, CurFun.LateResolveValues);
753 else
754 InsertValue(V, CurModule.LateResolveValues);
755 return V;
756}
757
758/// getBBVal - This is used for two purposes:
759/// * If isDefinition is true, a new basic block with the specified ID is being
760/// defined.
761/// * If isDefinition is true, this is a reference to a basic block, which may
762/// or may not be a forward reference.
763///
764static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
765 assert(inFunctionScope() && "Can't get basic block at global scope!");
766
767 std::string Name;
768 BasicBlock *BB = 0;
769 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000770 default:
771 GenerateError("Illegal label reference " + ID.getName());
772 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000773 case ValID::NumberVal: // Is it a numbered definition?
774 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
775 CurFun.NumberedBlocks.resize(ID.Num+1);
776 BB = CurFun.NumberedBlocks[ID.Num];
777 break;
778 case ValID::NameVal: // Is it a named definition?
779 Name = ID.Name;
780 if (Value *N = CurFun.CurrentFunction->
781 getSymbolTable().lookup(Type::LabelTy, Name))
782 BB = cast<BasicBlock>(N);
783 break;
784 }
785
786 // See if the block has already been defined.
787 if (BB) {
788 // If this is the definition of the block, make sure the existing value was
789 // just a forward reference. If it was a forward reference, there will be
790 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000791 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000792 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000793 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000794 return 0;
795 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000796
797 ID.destroy(); // Free strdup'd memory.
798 return BB;
799 }
800
801 // Otherwise this block has not been seen before.
802 BB = new BasicBlock("", CurFun.CurrentFunction);
803 if (ID.Type == ValID::NameVal) {
804 BB->setName(ID.Name);
805 } else {
806 CurFun.NumberedBlocks[ID.Num] = BB;
807 }
808
809 // If this is not a definition, keep track of it so we can use it as a forward
810 // reference.
811 if (!isDefinition) {
812 // Remember where this forward reference came from.
813 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
814 } else {
815 // The forward declaration could have been inserted anywhere in the
816 // function: insert it into the correct place now.
817 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
818 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
819 }
820 ID.destroy();
821 return BB;
822}
823
824
825//===----------------------------------------------------------------------===//
826// Code to handle forward references in instructions
827//===----------------------------------------------------------------------===//
828//
829// This code handles the late binding needed with statements that reference
830// values not defined yet... for example, a forward branch, or the PHI node for
831// a loop body.
832//
833// This keeps a table (CurFun.LateResolveValues) of all such forward references
834// and back patchs after we are done.
835//
836
837// ResolveDefinitions - If we could not resolve some defs at parsing
838// time (forward branches, phi functions for loops, etc...) resolve the
839// defs now...
840//
841static void
842ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
843 std::map<const Type*,ValueList> *FutureLateResolvers) {
844 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
845 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
846 E = LateResolvers.end(); LRI != E; ++LRI) {
847 ValueList &List = LRI->second;
848 while (!List.empty()) {
849 Value *V = List.back();
850 List.pop_back();
851
852 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
853 CurModule.PlaceHolderInfo.find(V);
854 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
855
856 ValID &DID = PHI->second.first;
857
858 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000859 if (TriggerError)
860 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000861 if (TheRealValue) {
862 V->replaceAllUsesWith(TheRealValue);
863 delete V;
864 CurModule.PlaceHolderInfo.erase(PHI);
865 } else if (FutureLateResolvers) {
866 // Functions have their unresolved items forwarded to the module late
867 // resolver table
868 InsertValue(V, *FutureLateResolvers);
869 } else {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000870 if (DID.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000871 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000872 "' of type '" + V->getType()->getDescription() + "'",
873 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000874 return;
875 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000876 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000877 itostr(DID.Num) + " of type '" +
878 V->getType()->getDescription() + "'",
879 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000880 return;
881 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000882 }
883 }
884 }
885
886 LateResolvers.clear();
887}
888
889// ResolveTypeTo - A brand new type was just declared. This means that (if
890// name is not null) things referencing Name can be resolved. Otherwise, things
891// refering to the number can be resolved. Do this now.
892//
893static void ResolveTypeTo(char *Name, const Type *ToTy) {
894 ValID D;
895 if (Name) D = ValID::create(Name);
896 else D = ValID::create((int)CurModule.Types.size());
897
Reid Spencer861d9d62006-11-28 07:29:44 +0000898 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000899 CurModule.LateResolveTypes.find(D);
900 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000901 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000902 CurModule.LateResolveTypes.erase(I);
903 }
904}
905
906// setValueName - Set the specified value to the name given. The name may be
907// null potentially, in which case this is a noop. The string passed in is
908// assumed to be a malloc'd string buffer, and is free'd by this function.
909//
910static void setValueName(Value *V, char *NameStr) {
911 if (NameStr) {
912 std::string Name(NameStr); // Copy string
913 free(NameStr); // Free old string
914
Reid Spencer5b7e7532006-09-28 19:28:24 +0000915 if (V->getType() == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000916 GenerateError("Can't assign name '" + Name+"' to value with void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000917 return;
918 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000919
920 assert(inFunctionScope() && "Must be in function scope!");
921 SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
Reid Spencer5b7e7532006-09-28 19:28:24 +0000922 if (ST.lookup(V->getType(), Name)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000923 GenerateError("Redefinition of value named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000924 V->getType()->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000925 return;
926 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000927
928 // Set the name.
929 V->setName(Name);
930 }
931}
932
933/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
934/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000935static GlobalVariable *
936ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
937 bool isConstantGlobal, const Type *Ty,
938 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000939 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000940 GenerateError("Cannot declare global vars of function type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000941 return 0;
942 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000943
944 const PointerType *PTy = PointerType::get(Ty);
945
946 std::string Name;
947 if (NameStr) {
948 Name = NameStr; // Copy string
949 free(NameStr); // Free old string
950 }
951
952 // See if this global value was forward referenced. If so, recycle the
953 // object.
954 ValID ID;
955 if (!Name.empty()) {
956 ID = ValID::create((char*)Name.c_str());
957 } else {
958 ID = ValID::create((int)CurModule.Values[PTy].size());
959 }
960
961 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
962 // Move the global to the end of the list, from whereever it was
963 // previously inserted.
964 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
965 CurModule.CurrentModule->getGlobalList().remove(GV);
966 CurModule.CurrentModule->getGlobalList().push_back(GV);
967 GV->setInitializer(Initializer);
968 GV->setLinkage(Linkage);
969 GV->setConstant(isConstantGlobal);
970 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +0000971 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000972 }
973
974 // If this global has a name, check to see if there is already a definition
975 // of this global in the module. If so, merge as appropriate. Note that
976 // this is really just a hack around problems in the CFE. :(
977 if (!Name.empty()) {
978 // We are a simple redefinition of a value, check to see if it is defined
979 // the same as the old one.
980 if (GlobalVariable *EGV =
981 CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
982 // We are allowed to redefine a global variable in two circumstances:
983 // 1. If at least one of the globals is uninitialized or
984 // 2. If both initializers have the same value.
985 //
986 if (!EGV->hasInitializer() || !Initializer ||
987 EGV->getInitializer() == Initializer) {
988
989 // Make sure the existing global version gets the initializer! Make
990 // sure that it also gets marked const if the new version is.
991 if (Initializer && !EGV->hasInitializer())
992 EGV->setInitializer(Initializer);
993 if (isConstantGlobal)
994 EGV->setConstant(true);
995 EGV->setLinkage(Linkage);
Chris Lattnerb475c422005-11-12 18:22:38 +0000996 return EGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000997 }
998
Reid Spencer61c83e02006-08-18 08:43:06 +0000999 GenerateError("Redefinition of global variable named '" + Name +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001000 "' in the '" + Ty->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001001 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001002 }
1003 }
1004
1005 // Otherwise there is no existing GV to use, create one now.
1006 GlobalVariable *GV =
1007 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1008 CurModule.CurrentModule);
1009 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001010 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001011}
1012
1013// setTypeName - Set the specified type to the name given. The name may be
1014// null potentially, in which case this is a noop. The string passed in is
1015// assumed to be a malloc'd string buffer, and is freed by this function.
1016//
1017// This function returns true if the type has already been defined, but is
1018// allowed to be redefined in the specified context. If the name is a new name
1019// for the type plane, it is inserted and false is returned.
1020static bool setTypeName(const Type *T, char *NameStr) {
1021 assert(!inFunctionScope() && "Can't give types function-local names!");
1022 if (NameStr == 0) return false;
1023
1024 std::string Name(NameStr); // Copy string
1025 free(NameStr); // Free old string
1026
1027 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001028 if (T == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001029 GenerateError("Can't assign name '" + Name + "' to the void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001030 return false;
1031 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001032
1033 // Set the type name, checking for conflicts as we do so.
1034 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1035
1036 if (AlreadyExists) { // Inserting a name that is already defined???
1037 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1038 assert(Existing && "Conflict but no matching type?");
1039
1040 // There is only one case where this is allowed: when we are refining an
1041 // opaque type. In this case, Existing will be an opaque type.
1042 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1043 // We ARE replacing an opaque type!
1044 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1045 return true;
1046 }
1047
1048 // Otherwise, this is an attempt to redefine a type. That's okay if
1049 // the redefinition is identical to the original. This will be so if
1050 // Existing and T point to the same Type object. In this one case we
1051 // allow the equivalent redefinition.
1052 if (Existing == T) return true; // Yes, it's equal.
1053
1054 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer61c83e02006-08-18 08:43:06 +00001055 GenerateError("Redefinition of type named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001056 T->getDescription() + "' type plane!");
1057 }
1058
1059 return false;
1060}
1061
1062//===----------------------------------------------------------------------===//
1063// Code for handling upreferences in type names...
1064//
1065
1066// TypeContains - Returns true if Ty directly contains E in it.
1067//
1068static bool TypeContains(const Type *Ty, const Type *E) {
1069 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1070 E) != Ty->subtype_end();
1071}
1072
1073namespace {
1074 struct UpRefRecord {
1075 // NestingLevel - The number of nesting levels that need to be popped before
1076 // this type is resolved.
1077 unsigned NestingLevel;
1078
1079 // LastContainedTy - This is the type at the current binding level for the
1080 // type. Every time we reduce the nesting level, this gets updated.
1081 const Type *LastContainedTy;
1082
1083 // UpRefTy - This is the actual opaque type that the upreference is
1084 // represented with.
1085 OpaqueType *UpRefTy;
1086
1087 UpRefRecord(unsigned NL, OpaqueType *URTy)
1088 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1089 };
1090}
1091
1092// UpRefs - A list of the outstanding upreferences that need to be resolved.
1093static std::vector<UpRefRecord> UpRefs;
1094
1095/// HandleUpRefs - Every time we finish a new layer of types, this function is
1096/// called. It loops through the UpRefs vector, which is a list of the
1097/// currently active types. For each type, if the up reference is contained in
1098/// the newly completed type, we decrement the level count. When the level
1099/// count reaches zero, the upreferenced type is the type that is passed in:
1100/// thus we can complete the cycle.
1101///
1102static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001103 // If Ty isn't abstract, or if there are no up-references in it, then there is
1104 // nothing to resolve here.
1105 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1106
Reid Spencer68a24bd2005-08-27 18:50:39 +00001107 PATypeHolder Ty(ty);
1108 UR_OUT("Type '" << Ty->getDescription() <<
1109 "' newly formed. Resolving upreferences.\n" <<
1110 UpRefs.size() << " upreferences active!\n");
1111
1112 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1113 // to zero), we resolve them all together before we resolve them to Ty. At
1114 // the end of the loop, if there is anything to resolve to Ty, it will be in
1115 // this variable.
1116 OpaqueType *TypeToResolve = 0;
1117
1118 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1119 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1120 << UpRefs[i].second->getDescription() << ") = "
1121 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1122 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1123 // Decrement level of upreference
1124 unsigned Level = --UpRefs[i].NestingLevel;
1125 UpRefs[i].LastContainedTy = Ty;
1126 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1127 if (Level == 0) { // Upreference should be resolved!
1128 if (!TypeToResolve) {
1129 TypeToResolve = UpRefs[i].UpRefTy;
1130 } else {
1131 UR_OUT(" * Resolving upreference for "
1132 << UpRefs[i].second->getDescription() << "\n";
1133 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1134 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1135 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1136 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1137 }
1138 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1139 --i; // Do not skip the next element...
1140 }
1141 }
1142 }
1143
1144 if (TypeToResolve) {
1145 UR_OUT(" * Resolving upreference for "
1146 << UpRefs[i].second->getDescription() << "\n";
1147 std::string OldName = TypeToResolve->getDescription());
1148 TypeToResolve->refineAbstractTypeTo(Ty);
1149 }
1150
1151 return Ty;
1152}
1153
Reid Spencer68a24bd2005-08-27 18:50:39 +00001154// common code from the two 'RunVMAsmParser' functions
Reid Spencer5b7e7532006-09-28 19:28:24 +00001155static Module* RunParser(Module * M) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001156
1157 llvmAsmlineno = 1; // Reset the current line number...
Reid Spencer68a24bd2005-08-27 18:50:39 +00001158 NewVarArgs = false;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001159 CurModule.CurrentModule = M;
Reid Spencerf63697d2006-10-09 17:36:59 +00001160
1161 // Check to make sure the parser succeeded
1162 if (yyparse()) {
1163 if (ParserResult)
1164 delete ParserResult;
1165 return 0;
1166 }
1167
1168 // Check to make sure that parsing produced a result
Reid Spencer61c83e02006-08-18 08:43:06 +00001169 if (!ParserResult)
1170 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001171
Reid Spencerf63697d2006-10-09 17:36:59 +00001172 // Reset ParserResult variable while saving its value for the result.
Reid Spencer68a24bd2005-08-27 18:50:39 +00001173 Module *Result = ParserResult;
1174 ParserResult = 0;
1175
Reid Spencer68a24bd2005-08-27 18:50:39 +00001176 return Result;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001177}
Reid Spencer68a24bd2005-08-27 18:50:39 +00001178
1179//===----------------------------------------------------------------------===//
1180// RunVMAsmParser - Define an interface to this parser
1181//===----------------------------------------------------------------------===//
1182//
1183Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1184 set_scan_file(F);
1185
1186 CurFilename = Filename;
1187 return RunParser(new Module(CurFilename));
1188}
1189
1190Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1191 set_scan_string(AsmString);
1192
1193 CurFilename = "from_memory";
1194 if (M == NULL) {
1195 return RunParser(new Module (CurFilename));
1196 } else {
1197 return RunParser(M);
1198 }
1199}
1200
1201
Reid Spencer3822ff52006-11-08 06:47:33 +00001202
1203/* Enabling traces. */
1204#ifndef YYDEBUG
1205# define YYDEBUG 0
1206#endif
1207
1208/* Enabling verbose error messages. */
1209#ifdef YYERROR_VERBOSE
1210# undef YYERROR_VERBOSE
1211# define YYERROR_VERBOSE 1
1212#else
1213# define YYERROR_VERBOSE 0
1214#endif
1215
1216/* Enabling the token table. */
1217#ifndef YYTOKEN_TABLE
1218# define YYTOKEN_TABLE 0
1219#endif
1220
1221#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencercd42c582006-12-05 23:29:42 +00001222#line 857 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00001223typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001224 llvm::Module *ModuleVal;
1225 llvm::Function *FunctionVal;
Reid Spencera132e042006-12-03 05:46:11 +00001226 std::pair<llvm::PATypeHolder*, char*> *ArgVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001227 llvm::BasicBlock *BasicBlockVal;
1228 llvm::TerminatorInst *TermInstVal;
1229 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001230 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001231
Reid Spencera132e042006-12-03 05:46:11 +00001232 const llvm::Type *PrimType;
1233 llvm::PATypeHolder *TypeVal;
1234 llvm::Value *ValueVal;
1235
1236 std::vector<std::pair<llvm::PATypeHolder*,char*> > *ArgList;
1237 std::vector<llvm::Value*> *ValueList;
1238 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001239 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001240 std::list<std::pair<llvm::Value*,
1241 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001242 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001243 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001244
1245 llvm::GlobalValue::LinkageTypes Linkage;
1246 int64_t SInt64Val;
1247 uint64_t UInt64Val;
1248 int SIntVal;
1249 unsigned UIntVal;
1250 double FPVal;
1251 bool BoolVal;
1252
1253 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001254 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001255
Reid Spencera132e042006-12-03 05:46:11 +00001256 llvm::Instruction::BinaryOps BinaryOpVal;
1257 llvm::Instruction::TermOps TermOpVal;
1258 llvm::Instruction::MemoryOps MemOpVal;
1259 llvm::Instruction::CastOps CastOpVal;
1260 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencer1628cec2006-10-26 06:15:43 +00001261 llvm::Module::Endianness Endianness;
Reid Spencera132e042006-12-03 05:46:11 +00001262 llvm::ICmpInst::Predicate IPredicate;
1263 llvm::FCmpInst::Predicate FPredicate;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001264} YYSTYPE;
Reid Spencer3822ff52006-11-08 06:47:33 +00001265/* Line 196 of yacc.c. */
Reid Spencercd42c582006-12-05 23:29:42 +00001266#line 1267 "llvmAsmParser.tab.c"
Reid Spencer3822ff52006-11-08 06:47:33 +00001267# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1268# define YYSTYPE_IS_DECLARED 1
1269# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001270#endif
1271
1272
1273
Reid Spencer3822ff52006-11-08 06:47:33 +00001274/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001275
1276
Reid Spencer3822ff52006-11-08 06:47:33 +00001277/* Line 219 of yacc.c. */
Reid Spencercd42c582006-12-05 23:29:42 +00001278#line 1279 "llvmAsmParser.tab.c"
Reid Spencer68a24bd2005-08-27 18:50:39 +00001279
Reid Spencer3822ff52006-11-08 06:47:33 +00001280#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1281# define YYSIZE_T __SIZE_TYPE__
1282#endif
1283#if ! defined (YYSIZE_T) && defined (size_t)
1284# define YYSIZE_T size_t
1285#endif
1286#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1287# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1288# define YYSIZE_T size_t
1289#endif
1290#if ! defined (YYSIZE_T)
1291# define YYSIZE_T unsigned int
1292#endif
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001293
Reid Spencer3822ff52006-11-08 06:47:33 +00001294#ifndef YY_
1295# if YYENABLE_NLS
1296# if ENABLE_NLS
1297# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1298# define YY_(msgid) dgettext ("bison-runtime", msgid)
1299# endif
1300# endif
1301# ifndef YY_
1302# define YY_(msgid) msgid
1303# endif
1304#endif
1305
1306#if ! defined (yyoverflow) || YYERROR_VERBOSE
1307
1308/* The parser invokes alloca or malloc; define the necessary symbols. */
1309
1310# ifdef YYSTACK_USE_ALLOCA
1311# if YYSTACK_USE_ALLOCA
1312# ifdef __GNUC__
1313# define YYSTACK_ALLOC __builtin_alloca
1314# else
1315# define YYSTACK_ALLOC alloca
1316# if defined (__STDC__) || defined (__cplusplus)
1317# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1318# define YYINCLUDED_STDLIB_H
1319# endif
1320# endif
1321# endif
1322# endif
1323
1324# ifdef YYSTACK_ALLOC
1325 /* Pacify GCC's `empty if-body' warning. */
1326# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1327# ifndef YYSTACK_ALLOC_MAXIMUM
1328 /* The OS might guarantee only one guard page at the bottom of the stack,
1329 and a page size can be as small as 4096 bytes. So we cannot safely
1330 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1331 to allow for a few compiler-allocated temporary stack slots. */
1332# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1333# endif
1334# else
1335# define YYSTACK_ALLOC YYMALLOC
1336# define YYSTACK_FREE YYFREE
1337# ifndef YYSTACK_ALLOC_MAXIMUM
1338# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1339# endif
1340# ifdef __cplusplus
1341extern "C" {
1342# endif
1343# ifndef YYMALLOC
1344# define YYMALLOC malloc
1345# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1346 && (defined (__STDC__) || defined (__cplusplus)))
1347void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1348# endif
1349# endif
1350# ifndef YYFREE
1351# define YYFREE free
1352# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1353 && (defined (__STDC__) || defined (__cplusplus)))
1354void free (void *); /* INFRINGES ON USER NAME SPACE */
1355# endif
1356# endif
1357# ifdef __cplusplus
1358}
1359# endif
1360# endif
1361#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1362
1363
1364#if (! defined (yyoverflow) \
1365 && (! defined (__cplusplus) \
1366 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1367
1368/* A type that is properly aligned for any stack member. */
1369union yyalloc
1370{
1371 short int yyss;
1372 YYSTYPE yyvs;
1373 };
1374
1375/* The size of the maximum gap between one aligned stack and the next. */
1376# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1377
1378/* The size of an array large to enough to hold all stacks, each with
1379 N elements. */
1380# define YYSTACK_BYTES(N) \
1381 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1382 + YYSTACK_GAP_MAXIMUM)
1383
1384/* Copy COUNT objects from FROM to TO. The source and destination do
1385 not overlap. */
1386# ifndef YYCOPY
1387# if defined (__GNUC__) && 1 < __GNUC__
1388# define YYCOPY(To, From, Count) \
1389 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1390# else
1391# define YYCOPY(To, From, Count) \
1392 do \
1393 { \
1394 YYSIZE_T yyi; \
1395 for (yyi = 0; yyi < (Count); yyi++) \
1396 (To)[yyi] = (From)[yyi]; \
1397 } \
1398 while (0)
1399# endif
1400# endif
1401
1402/* Relocate STACK from its old location to the new one. The
1403 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1404 elements in the stack, and YYPTR gives the new location of the
1405 stack. Advance YYPTR to a properly aligned location for the next
1406 stack. */
1407# define YYSTACK_RELOCATE(Stack) \
1408 do \
1409 { \
1410 YYSIZE_T yynewbytes; \
1411 YYCOPY (&yyptr->Stack, Stack, yysize); \
1412 Stack = &yyptr->Stack; \
1413 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1414 yyptr += yynewbytes / sizeof (*yyptr); \
1415 } \
1416 while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001417
1418#endif
1419
Reid Spencer3822ff52006-11-08 06:47:33 +00001420#if defined (__STDC__) || defined (__cplusplus)
1421 typedef signed char yysigned_char;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001422#else
Reid Spencer3822ff52006-11-08 06:47:33 +00001423 typedef short int yysigned_char;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001424#endif
1425
Reid Spencer3822ff52006-11-08 06:47:33 +00001426/* YYFINAL -- State number of the termination state. */
1427#define YYFINAL 4
1428/* YYLAST -- Last index in YYTABLE. */
Reid Spencercd42c582006-12-05 23:29:42 +00001429#define YYLAST 1509
Reid Spencer3822ff52006-11-08 06:47:33 +00001430
1431/* YYNTOKENS -- Number of terminals. */
Reid Spencercd42c582006-12-05 23:29:42 +00001432#define YYNTOKENS 159
Reid Spencer3822ff52006-11-08 06:47:33 +00001433/* YYNNTS -- Number of nonterminals. */
Reid Spencera132e042006-12-03 05:46:11 +00001434#define YYNNTS 78
Reid Spencer3822ff52006-11-08 06:47:33 +00001435/* YYNRULES -- Number of rules. */
Reid Spencercd42c582006-12-05 23:29:42 +00001436#define YYNRULES 297
Reid Spencer3822ff52006-11-08 06:47:33 +00001437/* YYNRULES -- Number of states. */
Reid Spencercd42c582006-12-05 23:29:42 +00001438#define YYNSTATES 578
Reid Spencer3822ff52006-11-08 06:47:33 +00001439
1440/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1441#define YYUNDEFTOK 2
Reid Spencercd42c582006-12-05 23:29:42 +00001442#define YYMAXUTOK 399
Reid Spencer3822ff52006-11-08 06:47:33 +00001443
1444#define YYTRANSLATE(YYX) \
1445 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1446
1447/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1448static const unsigned char yytranslate[] =
1449{
1450 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1451 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1452 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1453 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencercd42c582006-12-05 23:29:42 +00001454 148, 149, 157, 2, 146, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001455 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencercd42c582006-12-05 23:29:42 +00001456 153, 145, 154, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001457 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1458 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencercd42c582006-12-05 23:29:42 +00001459 2, 150, 147, 152, 2, 2, 2, 2, 2, 158,
Reid Spencer3822ff52006-11-08 06:47:33 +00001460 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1461 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencercd42c582006-12-05 23:29:42 +00001462 151, 2, 2, 155, 2, 156, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001463 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1464 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1465 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1466 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1467 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1468 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1469 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1470 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1471 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1472 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1473 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1474 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1475 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1476 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1477 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1478 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1479 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1480 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1481 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1482 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1483 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1484 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1485 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
Reid Spencer3da59db2006-11-27 01:05:10 +00001486 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
Reid Spencera132e042006-12-03 05:46:11 +00001487 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1488 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
Reid Spencercd42c582006-12-05 23:29:42 +00001489 135, 136, 137, 138, 139, 140, 141, 142, 143, 144
Reid Spencer3822ff52006-11-08 06:47:33 +00001490};
1491
1492#if YYDEBUG
1493/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1494 YYRHS. */
1495static const unsigned short int yyprhs[] =
1496{
1497 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1498 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1499 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1500 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
Reid Spencer3da59db2006-11-27 01:05:10 +00001501 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
Reid Spencera132e042006-12-03 05:46:11 +00001502 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1503 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001504 139, 141, 143, 145, 147, 149, 151, 153, 156, 157,
1505 159, 161, 163, 165, 167, 169, 171, 172, 173, 175,
1506 177, 179, 181, 183, 185, 188, 189, 192, 193, 197,
1507 200, 201, 203, 204, 208, 210, 213, 215, 217, 219,
Reid Spencera132e042006-12-03 05:46:11 +00001508 221, 223, 225, 227, 229, 231, 233, 235, 237, 239,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001509 241, 243, 245, 247, 249, 251, 253, 255, 258, 263,
1510 269, 275, 279, 282, 285, 287, 291, 293, 297, 299,
1511 300, 305, 309, 313, 318, 323, 327, 330, 333, 336,
1512 339, 342, 345, 348, 351, 354, 357, 364, 370, 379,
Reid Spencer4012e832006-12-04 05:24:24 +00001513 386, 393, 400, 408, 416, 423, 430, 439, 448, 452,
1514 454, 456, 458, 460, 463, 466, 471, 474, 476, 481,
1515 484, 489, 490, 498, 499, 507, 508, 516, 517, 525,
1516 529, 534, 535, 537, 539, 541, 545, 549, 553, 557,
1517 561, 565, 567, 568, 570, 572, 574, 575, 578, 582,
1518 584, 586, 590, 592, 593, 602, 604, 606, 610, 612,
1519 614, 617, 618, 620, 622, 623, 628, 629, 631, 633,
1520 635, 637, 639, 641, 643, 645, 647, 651, 653, 659,
1521 661, 663, 665, 667, 670, 673, 676, 680, 683, 684,
1522 686, 689, 692, 696, 706, 716, 725, 739, 741, 743,
1523 750, 756, 759, 766, 774, 776, 780, 782, 783, 786,
1524 788, 794, 800, 806, 813, 820, 823, 828, 833, 840,
Reid Spencercd42c582006-12-05 23:29:42 +00001525 845, 850, 857, 864, 867, 875, 877, 880, 881, 883,
1526 884, 888, 895, 899, 906, 909, 914, 921
Reid Spencer3822ff52006-11-08 06:47:33 +00001527};
1528
1529/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1530static const short int yyrhs[] =
1531{
Reid Spencercd42c582006-12-05 23:29:42 +00001532 193, 0, -1, 5, -1, 6, -1, 3, -1, 4,
Reid Spencer3822ff52006-11-08 06:47:33 +00001533 -1, 78, -1, 79, -1, 80, -1, 81, -1, 82,
1534 -1, 83, -1, 84, -1, 85, -1, 86, -1, 87,
1535 -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001536 -1, 93, -1, 94, -1, 95, -1, 124, -1, 125,
1537 -1, 126, -1, 127, -1, 128, -1, 129, -1, 130,
1538 -1, 131, -1, 132, -1, 133, -1, 134, -1, 135,
1539 -1, 138, -1, 139, -1, 140, -1, 98, -1, 99,
Reid Spencera132e042006-12-03 05:46:11 +00001540 -1, 100, -1, 101, -1, 102, -1, 103, -1, 104,
1541 -1, 105, -1, 106, -1, 107, -1, 108, -1, 109,
1542 -1, 110, -1, 111, -1, 112, -1, 113, -1, 114,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001543 -1, 115, -1, 116, -1, 117, -1, 104, -1, 105,
1544 -1, 106, -1, 107, -1, 27, -1, 28, -1, 16,
1545 -1, 14, -1, 12, -1, 10, -1, 17, -1, 15,
Reid Spencercd42c582006-12-05 23:29:42 +00001546 -1, 13, -1, 11, -1, 169, -1, 170, -1, 18,
1547 -1, 19, -1, 205, 145, -1, -1, 41, -1, 42,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001548 -1, 43, -1, 44, -1, 45, -1, 46, -1, 47,
1549 -1, -1, -1, 65, -1, 66, -1, 67, -1, 68,
1550 -1, 69, -1, 70, -1, 64, 4, -1, -1, 57,
Reid Spencercd42c582006-12-05 23:29:42 +00001551 4, -1, -1, 146, 57, 4, -1, 34, 24, -1,
1552 -1, 178, -1, -1, 146, 181, 180, -1, 178, -1,
1553 57, 4, -1, 184, -1, 8, -1, 186, -1, 8,
1554 -1, 186, -1, 9, -1, 10, -1, 11, -1, 12,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001555 -1, 13, -1, 14, -1, 15, -1, 16, -1, 17,
1556 -1, 18, -1, 19, -1, 20, -1, 21, -1, 48,
Reid Spencercd42c582006-12-05 23:29:42 +00001557 -1, 185, -1, 220, -1, 147, 4, -1, 183, 148,
1558 188, 149, -1, 150, 4, 151, 186, 152, -1, 153,
1559 4, 151, 186, 154, -1, 155, 187, 156, -1, 155,
1560 156, -1, 186, 157, -1, 186, -1, 187, 146, 186,
1561 -1, 187, -1, 187, 146, 37, -1, 37, -1, -1,
1562 184, 150, 191, 152, -1, 184, 150, 152, -1, 184,
1563 158, 24, -1, 184, 153, 191, 154, -1, 184, 155,
1564 191, 156, -1, 184, 155, 156, -1, 184, 38, -1,
1565 184, 39, -1, 184, 220, -1, 184, 190, -1, 184,
1566 26, -1, 169, 161, -1, 170, 4, -1, 9, 27,
1567 -1, 9, 28, -1, 172, 7, -1, 165, 148, 189,
1568 36, 184, 149, -1, 123, 148, 189, 234, 149, -1,
1569 137, 148, 189, 146, 189, 146, 189, 149, -1, 162,
1570 148, 189, 146, 189, 149, -1, 163, 148, 189, 146,
1571 189, 149, -1, 164, 148, 189, 146, 189, 149, -1,
1572 96, 167, 148, 189, 146, 189, 149, -1, 97, 168,
1573 148, 189, 146, 189, 149, -1, 166, 148, 189, 146,
1574 189, 149, -1, 142, 148, 189, 146, 189, 149, -1,
1575 143, 148, 189, 146, 189, 146, 189, 149, -1, 144,
1576 148, 189, 146, 189, 146, 189, 149, -1, 191, 146,
1577 189, -1, 189, -1, 32, -1, 33, -1, 194, -1,
1578 194, 214, -1, 194, 216, -1, 194, 62, 61, 200,
1579 -1, 194, 25, -1, 195, -1, 195, 173, 20, 182,
1580 -1, 195, 216, -1, 195, 62, 61, 200, -1, -1,
1581 195, 173, 174, 192, 189, 196, 180, -1, -1, 195,
1582 173, 50, 192, 184, 197, 180, -1, -1, 195, 173,
1583 45, 192, 184, 198, 180, -1, -1, 195, 173, 47,
1584 192, 184, 199, 180, -1, 195, 51, 202, -1, 195,
1585 58, 145, 203, -1, -1, 24, -1, 56, -1, 55,
1586 -1, 53, 145, 201, -1, 54, 145, 4, -1, 52,
1587 145, 24, -1, 71, 145, 24, -1, 150, 204, 152,
1588 -1, 204, 146, 24, -1, 24, -1, -1, 22, -1,
1589 24, -1, 205, -1, -1, 184, 206, -1, 208, 146,
1590 207, -1, 207, -1, 208, -1, 208, 146, 37, -1,
1591 37, -1, -1, 175, 182, 205, 148, 209, 149, 179,
1592 176, -1, 29, -1, 155, -1, 174, 210, 211, -1,
1593 30, -1, 156, -1, 223, 213, -1, -1, 45, -1,
1594 47, -1, -1, 31, 217, 215, 210, -1, -1, 63,
Reid Spencer4012e832006-12-04 05:24:24 +00001595 -1, 3, -1, 4, -1, 7, -1, 27, -1, 28,
Reid Spencercd42c582006-12-05 23:29:42 +00001596 -1, 38, -1, 39, -1, 26, -1, 153, 191, 154,
1597 -1, 190, -1, 61, 218, 24, 146, 24, -1, 160,
1598 -1, 205, -1, 220, -1, 219, -1, 184, 221, -1,
1599 223, 224, -1, 212, 224, -1, 225, 173, 226, -1,
1600 225, 228, -1, -1, 23, -1, 72, 222, -1, 72,
1601 8, -1, 73, 21, 221, -1, 73, 9, 221, 146,
1602 21, 221, 146, 21, 221, -1, 74, 171, 221, 146,
1603 21, 221, 150, 227, 152, -1, 74, 171, 221, 146,
1604 21, 221, 150, 152, -1, 75, 175, 182, 221, 148,
1605 231, 149, 36, 21, 221, 76, 21, 221, -1, 76,
1606 -1, 77, -1, 227, 171, 219, 146, 21, 221, -1,
1607 171, 219, 146, 21, 221, -1, 173, 233, -1, 184,
1608 150, 221, 146, 221, 152, -1, 229, 146, 150, 221,
1609 146, 221, 152, -1, 222, -1, 230, 146, 222, -1,
1610 230, -1, -1, 60, 59, -1, 59, -1, 162, 184,
1611 221, 146, 221, -1, 163, 184, 221, 146, 221, -1,
1612 164, 184, 221, 146, 221, -1, 96, 167, 184, 221,
1613 146, 221, -1, 97, 168, 184, 221, 146, 221, -1,
1614 49, 222, -1, 166, 222, 146, 222, -1, 165, 222,
1615 36, 184, -1, 137, 222, 146, 222, 146, 222, -1,
1616 141, 222, 146, 184, -1, 142, 222, 146, 222, -1,
1617 143, 222, 146, 222, 146, 222, -1, 144, 222, 146,
1618 222, 146, 222, -1, 136, 229, -1, 232, 175, 182,
1619 221, 148, 231, 149, -1, 236, -1, 146, 230, -1,
1620 -1, 35, -1, -1, 118, 184, 177, -1, 118, 184,
1621 146, 15, 221, 177, -1, 119, 184, 177, -1, 119,
1622 184, 146, 15, 221, 177, -1, 120, 222, -1, 235,
1623 121, 184, 221, -1, 235, 122, 222, 146, 184, 221,
1624 -1, 123, 184, 221, 234, -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001625};
1626
1627/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1628static const unsigned short int yyrline[] =
1629{
Reid Spencercd42c582006-12-05 23:29:42 +00001630 0, 992, 992, 993, 1001, 1002, 1012, 1012, 1012, 1012,
1631 1012, 1012, 1012, 1012, 1012, 1013, 1013, 1013, 1014, 1014,
1632 1014, 1014, 1014, 1014, 1015, 1015, 1015, 1015, 1015, 1015,
1633 1016, 1016, 1016, 1016, 1016, 1016, 1017, 1017, 1017, 1019,
1634 1019, 1020, 1020, 1021, 1021, 1022, 1022, 1023, 1023, 1027,
1635 1027, 1028, 1028, 1029, 1029, 1030, 1030, 1031, 1031, 1032,
1636 1032, 1033, 1033, 1034, 1035, 1040, 1040, 1040, 1040, 1041,
1637 1041, 1041, 1041, 1042, 1042, 1043, 1043, 1046, 1050, 1055,
1638 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1064, 1065, 1066,
1639 1067, 1068, 1069, 1070, 1071, 1080, 1081, 1087, 1088, 1096,
1640 1104, 1105, 1110, 1111, 1112, 1117, 1131, 1131, 1132, 1132,
1641 1134, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145, 1145,
1642 1145, 1145, 1145, 1145, 1146, 1150, 1154, 1162, 1170, 1183,
1643 1188, 1200, 1210, 1214, 1225, 1230, 1236, 1237, 1241, 1245,
1644 1256, 1282, 1296, 1326, 1352, 1373, 1386, 1396, 1401, 1462,
1645 1469, 1477, 1483, 1489, 1493, 1497, 1505, 1517, 1538, 1546,
1646 1552, 1563, 1569, 1574, 1579, 1588, 1594, 1600, 1609, 1613,
1647 1621, 1621, 1631, 1639, 1644, 1648, 1652, 1656, 1671, 1693,
1648 1696, 1699, 1699, 1707, 1707, 1715, 1715, 1723, 1723, 1732,
1649 1735, 1738, 1742, 1755, 1756, 1758, 1762, 1771, 1775, 1780,
1650 1782, 1787, 1792, 1801, 1801, 1802, 1802, 1804, 1811, 1817,
1651 1824, 1828, 1834, 1839, 1844, 1939, 1939, 1941, 1949, 1949,
1652 1951, 1956, 1957, 1958, 1960, 1960, 1970, 1974, 1979, 1983,
1653 1987, 1991, 1995, 1999, 2003, 2007, 2011, 2036, 2040, 2054,
1654 2058, 2064, 2064, 2070, 2075, 2079, 2088, 2099, 2108, 2120,
1655 2133, 2137, 2141, 2146, 2155, 2174, 2183, 2239, 2243, 2250,
1656 2261, 2274, 2283, 2292, 2302, 2306, 2313, 2313, 2315, 2319,
1657 2324, 2343, 2358, 2372, 2383, 2394, 2407, 2416, 2427, 2435,
1658 2441, 2447, 2453, 2459, 2474, 2533, 2540, 2543, 2548, 2552,
1659 2559, 2564, 2570, 2575, 2581, 2589, 2601, 2616
Reid Spencer3822ff52006-11-08 06:47:33 +00001660};
1661#endif
1662
1663#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1664/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1665 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1666static const char *const yytname[] =
1667{
1668 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
1669 "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
1670 "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
1671 "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
1672 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1673 "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1674 "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
1675 "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1676 "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
1677 "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
1678 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
1679 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1680 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1681 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
Reid Spencera132e042006-12-03 05:46:11 +00001682 "XOR", "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "ICMP",
1683 "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE",
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001684 "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ",
1685 "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR",
1686 "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP",
1687 "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK",
1688 "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
Reid Spencercd42c582006-12-05 23:29:42 +00001689 "INSERTELEMENT", "SHUFFLEVECTOR", "'='", "','", "'\\\\'", "'('", "')'",
1690 "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'*'", "'c'", "$accept",
1691 "INTVAL", "EINT64VAL", "ArithmeticOps", "LogicalOps", "SetCondOps",
1692 "CastOps", "ShiftOps", "IPredicates", "FPredicates", "SIntType",
1693 "UIntType", "IntType", "FPType", "OptAssign", "OptLinkage",
1694 "OptCallingConv", "OptAlign", "OptCAlign", "SectionString", "OptSection",
1695 "GlobalVarAttributes", "GlobalVarAttribute", "TypesV", "UpRTypesV",
1696 "Types", "PrimType", "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal",
1697 "ConstExpr", "ConstVector", "GlobalType", "Module", "FunctionList",
1698 "ConstPool", "@1", "@2", "@3", "@4", "AsmBlock", "BigOrLittle",
1699 "TargetDefinition", "LibrariesDefinition", "LibList", "Name", "OptName",
1700 "ArgVal", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
1701 "FunctionHeader", "END", "Function", "FnDeclareLinkage", "FunctionProto",
1702 "@5", "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
1703 "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList",
1704 "BBTerminatorInst", "JumpTable", "Inst", "PHIList", "ValueRefList",
1705 "ValueRefListE", "OptTailCall", "InstVal", "IndexList", "OptVolatile",
1706 "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001707};
1708#endif
1709
1710# ifdef YYPRINT
1711/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1712 token YYLEX-NUM. */
1713static const unsigned short int yytoknum[] =
1714{
1715 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1716 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1717 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1718 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1719 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1720 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1721 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1722 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1723 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1724 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1725 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001726 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001727 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1728 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
Reid Spencercd42c582006-12-05 23:29:42 +00001729 395, 396, 397, 398, 399, 61, 44, 92, 40, 41,
1730 91, 120, 93, 60, 62, 123, 125, 42, 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001731};
1732# endif
1733
1734/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1735static const unsigned char yyr1[] =
1736{
Reid Spencercd42c582006-12-05 23:29:42 +00001737 0, 159, 160, 160, 161, 161, 162, 162, 162, 162,
1738 162, 162, 162, 162, 162, 163, 163, 163, 164, 164,
1739 164, 164, 164, 164, 165, 165, 165, 165, 165, 165,
1740 165, 165, 165, 165, 165, 165, 166, 166, 166, 167,
1741 167, 167, 167, 167, 167, 167, 167, 167, 167, 168,
1742 168, 168, 168, 168, 168, 168, 168, 168, 168, 168,
1743 168, 168, 168, 168, 168, 169, 169, 169, 169, 170,
1744 170, 170, 170, 171, 171, 172, 172, 173, 173, 174,
1745 174, 174, 174, 174, 174, 174, 174, 175, 175, 175,
1746 175, 175, 175, 175, 175, 176, 176, 177, 177, 178,
1747 179, 179, 180, 180, 181, 181, 182, 182, 183, 183,
1748 184, 185, 185, 185, 185, 185, 185, 185, 185, 185,
1749 185, 185, 185, 185, 186, 186, 186, 186, 186, 186,
1750 186, 186, 186, 186, 187, 187, 188, 188, 188, 188,
1751 189, 189, 189, 189, 189, 189, 189, 189, 189, 189,
1752 189, 189, 189, 189, 189, 189, 190, 190, 190, 190,
1753 190, 190, 190, 190, 190, 190, 190, 190, 191, 191,
1754 192, 192, 193, 194, 194, 194, 194, 194, 195, 195,
1755 195, 196, 195, 197, 195, 198, 195, 199, 195, 195,
1756 195, 195, 200, 201, 201, 202, 202, 202, 202, 203,
1757 204, 204, 204, 205, 205, 206, 206, 207, 208, 208,
1758 209, 209, 209, 209, 210, 211, 211, 212, 213, 213,
1759 214, 215, 215, 215, 217, 216, 218, 218, 219, 219,
1760 219, 219, 219, 219, 219, 219, 219, 219, 219, 220,
1761 220, 221, 221, 222, 223, 223, 224, 225, 225, 225,
1762 226, 226, 226, 226, 226, 226, 226, 226, 226, 227,
1763 227, 228, 229, 229, 230, 230, 231, 231, 232, 232,
1764 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
1765 233, 233, 233, 233, 233, 233, 234, 234, 235, 235,
1766 236, 236, 236, 236, 236, 236, 236, 236
Reid Spencer3822ff52006-11-08 06:47:33 +00001767};
1768
1769/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1770static const unsigned char yyr2[] =
1771{
1772 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1773 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1774 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001775 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001776 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001777 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1778 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001779 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1780 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1781 1, 1, 1, 1, 2, 0, 2, 0, 3, 2,
1782 0, 1, 0, 3, 1, 2, 1, 1, 1, 1,
Reid Spencera132e042006-12-03 05:46:11 +00001783 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001784 1, 1, 1, 1, 1, 1, 1, 2, 4, 5,
1785 5, 3, 2, 2, 1, 3, 1, 3, 1, 0,
1786 4, 3, 3, 4, 4, 3, 2, 2, 2, 2,
1787 2, 2, 2, 2, 2, 2, 6, 5, 8, 6,
Reid Spencer4012e832006-12-04 05:24:24 +00001788 6, 6, 7, 7, 6, 6, 8, 8, 3, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001789 1, 1, 1, 2, 2, 4, 2, 1, 4, 2,
1790 4, 0, 7, 0, 7, 0, 7, 0, 7, 3,
1791 4, 0, 1, 1, 1, 3, 3, 3, 3, 3,
1792 3, 1, 0, 1, 1, 1, 0, 2, 3, 1,
1793 1, 3, 1, 0, 8, 1, 1, 3, 1, 1,
1794 2, 0, 1, 1, 0, 4, 0, 1, 1, 1,
1795 1, 1, 1, 1, 1, 1, 3, 1, 5, 1,
1796 1, 1, 1, 2, 2, 2, 3, 2, 0, 1,
1797 2, 2, 3, 9, 9, 8, 13, 1, 1, 6,
1798 5, 2, 6, 7, 1, 3, 1, 0, 2, 1,
1799 5, 5, 5, 6, 6, 2, 4, 4, 6, 4,
Reid Spencercd42c582006-12-05 23:29:42 +00001800 4, 6, 6, 2, 7, 1, 2, 0, 1, 0,
1801 3, 6, 3, 6, 2, 4, 6, 4
Reid Spencer3822ff52006-11-08 06:47:33 +00001802};
1803
1804/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1805 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1806 means the default is an error. */
1807static const unsigned short int yydefact[] =
1808{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001809 191, 0, 86, 177, 1, 176, 224, 79, 80, 81,
1810 82, 83, 84, 85, 0, 87, 248, 173, 174, 248,
1811 203, 204, 0, 0, 0, 86, 0, 179, 221, 0,
1812 0, 88, 89, 90, 91, 92, 93, 0, 0, 249,
1813 245, 78, 218, 219, 220, 244, 0, 0, 0, 0,
1814 189, 0, 0, 0, 0, 0, 0, 0, 77, 222,
1815 223, 87, 192, 175, 94, 2, 3, 107, 111, 112,
1816 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
1817 123, 124, 0, 0, 0, 0, 239, 0, 0, 106,
Reid Spencercd42c582006-12-05 23:29:42 +00001818 125, 110, 240, 126, 215, 216, 217, 289, 247, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001819 0, 0, 0, 202, 190, 180, 178, 170, 171, 0,
1820 0, 0, 0, 225, 127, 0, 0, 109, 132, 134,
Reid Spencercd42c582006-12-05 23:29:42 +00001821 0, 0, 139, 133, 288, 0, 269, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001822 0, 87, 257, 258, 6, 7, 8, 9, 10, 11,
Reid Spencer3822ff52006-11-08 06:47:33 +00001823 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
Reid Spencera132e042006-12-03 05:46:11 +00001824 22, 23, 0, 0, 0, 0, 0, 0, 24, 25,
1825 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1826 0, 0, 36, 37, 38, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00001827 0, 0, 0, 0, 246, 87, 261, 0, 285, 197,
1828 194, 193, 195, 196, 198, 201, 0, 185, 187, 183,
1829 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
1830 121, 0, 0, 0, 0, 181, 0, 0, 0, 131,
1831 213, 138, 136, 0, 0, 275, 268, 251, 250, 0,
1832 0, 68, 72, 67, 71, 66, 70, 65, 69, 73,
1833 74, 0, 0, 39, 40, 41, 42, 43, 44, 45,
1834 46, 47, 48, 0, 63, 64, 59, 60, 61, 62,
1835 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
1836 0, 97, 97, 294, 0, 0, 283, 0, 0, 0,
Reid Spencer3822ff52006-11-08 06:47:33 +00001837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00001838 0, 199, 102, 102, 102, 153, 154, 4, 5, 151,
1839 152, 155, 150, 146, 147, 0, 0, 0, 0, 0,
Reid Spencer3822ff52006-11-08 06:47:33 +00001840 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00001841 0, 149, 148, 102, 108, 108, 135, 212, 206, 209,
1842 210, 0, 0, 128, 228, 229, 230, 235, 231, 232,
1843 233, 234, 226, 0, 237, 242, 241, 243, 0, 252,
1844 0, 0, 0, 0, 0, 290, 0, 292, 287, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001845 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00001846 0, 0, 0, 0, 200, 0, 186, 188, 184, 0,
1847 0, 0, 0, 0, 0, 0, 141, 169, 0, 0,
1848 145, 0, 142, 0, 0, 0, 0, 0, 182, 129,
1849 130, 205, 207, 0, 100, 137, 227, 0, 0, 0,
1850 0, 0, 0, 0, 0, 0, 0, 0, 297, 0,
1851 0, 0, 279, 280, 0, 0, 0, 0, 0, 277,
1852 276, 0, 295, 0, 0, 0, 104, 102, 0, 0,
1853 287, 0, 0, 0, 0, 0, 140, 143, 144, 0,
1854 0, 0, 0, 0, 211, 208, 101, 95, 0, 236,
1855 0, 0, 267, 0, 0, 97, 98, 97, 264, 286,
1856 0, 0, 0, 0, 0, 270, 271, 272, 267, 0,
1857 99, 105, 103, 0, 0, 0, 0, 0, 0, 0,
1858 168, 0, 0, 0, 0, 0, 0, 214, 0, 0,
1859 0, 266, 0, 273, 274, 0, 291, 293, 0, 0,
1860 0, 278, 281, 282, 0, 296, 0, 0, 157, 0,
1861 0, 0, 0, 0, 0, 0, 0, 0, 96, 238,
1862 0, 0, 0, 265, 262, 0, 284, 0, 0, 0,
1863 165, 0, 0, 159, 160, 161, 156, 164, 0, 255,
1864 0, 0, 0, 263, 162, 163, 0, 0, 0, 253,
1865 0, 254, 0, 0, 158, 166, 167, 0, 0, 0,
1866 0, 0, 0, 260, 0, 0, 259, 256
Reid Spencer3822ff52006-11-08 06:47:33 +00001867};
1868
1869/* YYDEFGOTO[NTERM-NUM]. */
1870static const short int yydefgoto[] =
1871{
Reid Spencercd42c582006-12-05 23:29:42 +00001872 -1, 86, 299, 316, 317, 318, 319, 320, 253, 270,
1873 211, 212, 241, 213, 25, 15, 37, 497, 355, 436,
1874 457, 376, 437, 87, 88, 214, 90, 91, 120, 223,
1875 387, 344, 388, 109, 1, 2, 3, 323, 294, 292,
1876 293, 63, 192, 50, 104, 196, 92, 402, 329, 330,
1877 331, 38, 96, 16, 44, 17, 61, 18, 28, 407,
1878 345, 93, 347, 468, 19, 40, 41, 184, 551, 98,
1879 276, 501, 502, 185, 186, 418, 187, 188
Reid Spencer3822ff52006-11-08 06:47:33 +00001880};
1881
1882/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1883 STATE-NUM. */
Reid Spencercd42c582006-12-05 23:29:42 +00001884#define YYPACT_NINF -517
Reid Spencer3822ff52006-11-08 06:47:33 +00001885static const short int yypact[] =
1886{
Reid Spencercd42c582006-12-05 23:29:42 +00001887 -517, 40, 69, 528, -517, -517, -517, -517, -517, -517,
1888 -517, -517, -517, -517, 16, 90, 76, -517, -517, 5,
1889 -517, -517, 50, -40, 71, 37, -15, -517, -4, 124,
1890 164, -517, -517, -517, -517, -517, -517, 1244, -18, -517,
1891 -517, 125, -517, -517, -517, -517, 45, 53, 54, 59,
1892 -517, 67, 124, 1244, 103, 103, 103, 103, -517, -517,
1893 -517, 90, -517, -517, -517, -517, -517, 70, -517, -517,
1894 -517, -517, -517, -517, -517, -517, -517, -517, -517, -517,
1895 -517, -517, 197, 215, 216, 670, -517, 125, 73, -517,
1896 -517, -62, -517, -517, -517, -517, -517, 1349, -517, 198,
1897 111, 219, 200, 201, -517, -517, -517, -517, -517, 1264,
1898 1264, 1264, 1309, -517, -517, 75, 77, -517, -517, -62,
1899 -108, 81, 1051, -517, -517, 1264, -517, 168, 1354, 24,
1900 112, 90, -517, -517, -517, -517, -517, -517, -517, -517,
1901 -517, -517, -517, -517, -517, -517, -517, -517, -517, -517,
1902 -517, -517, 108, 65, 1264, 1264, 1264, 1264, -517, -517,
1903 -517, -517, -517, -517, -517, -517, -517, -517, -517, -517,
1904 1264, 1264, -517, -517, -517, 1264, 1264, 1264, 1264, 1264,
1905 1264, 1264, 1264, 1264, -517, 90, -517, 42, -517, -517,
1906 -517, -517, -517, -517, -517, -517, -110, -517, -517, -517,
1907 157, 183, 226, 185, 227, 189, 228, 191, 230, 231,
1908 235, 193, 239, 237, 577, -517, 1264, 1264, 1264, -517,
1909 1092, -517, 89, 96, 763, -517, -517, 70, -517, 763,
1910 763, -517, -517, -517, -517, -517, -517, -517, -517, -517,
1911 -517, 763, 1244, -517, -517, -517, -517, -517, -517, -517,
1912 -517, -517, -517, 1264, -517, -517, -517, -517, -517, -517,
1913 -517, -517, -517, -517, -517, -517, -517, -517, -517, -517,
1914 1264, 101, 102, -517, 763, 99, 107, 109, 110, 113,
1915 114, 115, 763, 763, 763, 218, 116, 1244, 1264, 1264,
1916 233, -517, 117, 117, 117, -517, -517, -517, -517, -517,
1917 -517, -517, -517, -517, -517, 108, 65, 119, 120, 121,
1918 123, 126, 998, 1309, 728, 234, 127, 128, 129, 130,
1919 131, -517, -517, 117, -56, -142, -62, -517, 125, -517,
1920 118, 132, 1149, -517, -517, -517, -517, -517, -517, -517,
1921 -517, -517, 202, 1309, -517, -517, -517, -517, 136, -517,
1922 137, 763, 763, 763, -7, -517, -2, -517, 138, 763,
1923 122, 1264, 1264, 1264, 1264, 1264, 146, 147, 148, 1264,
1924 1264, 763, 763, 149, -517, -20, -517, -517, -517, 150,
1925 156, 1309, 1309, 1309, 1309, 1309, -517, -517, -76, -57,
1926 -517, -71, -517, 1309, 1309, 1309, 1309, 1309, -517, -517,
1927 -517, -517, -517, 1203, 262, -517, -517, 249, -48, 284,
1928 285, 159, 165, 166, 763, 306, 763, 1264, -517, 167,
1929 763, 169, -517, -517, 170, 171, 763, 763, 763, -517,
1930 -517, 173, -517, 1264, 290, 314, -517, 117, 1309, 1309,
1931 138, 176, 177, 188, 190, 1309, -517, -517, -517, 195,
1932 196, 206, 283, 208, -517, -517, -517, 272, 209, -517,
1933 763, 763, 1264, 763, 763, 210, -517, 210, -517, 211,
1934 763, 212, 1264, 1264, 1264, -517, -517, -517, 1264, 763,
1935 -517, -517, -517, 213, 214, 186, 1309, 1309, 1309, 1309,
1936 -517, 1309, 1309, 1309, 1264, 1309, 333, -517, 319, 221,
1937 220, 211, 222, -517, -517, 289, -517, -517, 1264, 217,
1938 763, -517, -517, -517, 223, -517, 1309, 1309, -517, 229,
1939 224, 232, 236, 225, 238, 240, 241, 242, -517, -517,
1940 326, 10, 328, -517, -517, 248, -517, 253, 254, 1309,
1941 -517, 1309, 1309, -517, -517, -517, -517, -517, 763, -517,
1942 905, 51, 344, -517, -517, -517, 256, 261, 263, -517,
1943 265, -517, 905, 763, -517, -517, -517, 347, 267, 300,
1944 763, 356, 358, -517, 763, 763, -517, -517
Reid Spencer3822ff52006-11-08 06:47:33 +00001945};
1946
1947/* YYPGOTO[NTERM-NUM]. */
1948static const short int yypgoto[] =
1949{
Reid Spencercd42c582006-12-05 23:29:42 +00001950 -517, -517, -517, 286, 288, 291, 317, 320, 134, 80,
1951 -127, -125, -502, -517, 340, 391, -114, -517, -265, 14,
1952 -517, -284, -517, -51, -517, -37, -517, -66, 297, -517,
1953 -94, 207, -283, 52, -517, -517, -517, -517, -517, -517,
1954 -517, 368, -517, -517, -517, -517, 3, -517, 26, -517,
1955 -517, 372, -517, -517, -517, -517, -517, 431, -517, -517,
1956 -516, 56, 79, -124, -517, 421, -517, -517, -517, -517,
1957 -517, 25, -35, -517, -517, 4, -517, -517
Reid Spencer3822ff52006-11-08 06:47:33 +00001958};
1959
1960/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
1961 positive, shift that token. If negative, reduce the rule which
1962 number is the opposite. If zero, do what YYDEFACT says.
1963 If YYTABLE_NINF, syntax error. */
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001964#define YYTABLE_NINF -173
Reid Spencer3822ff52006-11-08 06:47:33 +00001965static const short int yytable[] =
1966{
Reid Spencercd42c582006-12-05 23:29:42 +00001967 89, 225, 106, 239, 228, 240, 26, 357, 414, 377,
1968 378, 94, 400, 416, 434, 123, 89, 242, 215, 119,
1969 231, 232, 233, 234, 235, 236, 237, 238, 39, 550,
1970 389, 391, 273, 229, 560, 42, 290, 435, 218, 398,
1971 4, 59, 291, 60, 26, 230, 568, 277, 219, 562,
1972 415, 278, 279, 280, 281, 415, 119, 53, 285, 286,
1973 408, 231, 232, 233, 234, 235, 236, 237, 238, -172,
1974 445, 287, 197, 198, 199, 445, 446, 29, 7, 8,
1975 9, 10, 54, 12, 55, 448, -108, 56, 224, 445,
1976 121, 224, 254, 255, 5, 123, 399, 447, 445, 39,
1977 6, 123, 46, 47, 48, 51, 459, 110, 111, 112,
1978 7, 8, 9, 10, 11, 12, 13, 271, 272, 224,
1979 274, 49, 231, 232, 233, 234, 235, 236, 237, 238,
1980 58, 14, 52, 275, 224, 107, 108, 95, 224, 224,
1981 224, 224, 282, 283, 284, 224, 224, 20, 62, 21,
1982 324, 325, 326, 482, 30, 31, 32, 33, 34, 35,
1983 36, 43, 549, 288, 289, 373, 190, 191, 64, 256,
1984 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
1985 267, 268, 269, 328, 295, 296, -68, -68, -67, -67,
1986 99, 351, -66, -66, -65, -65, 297, 298, 100, 101,
1987 506, 114, 507, 561, 102, 89, 243, 244, 245, 246,
1988 247, 248, 249, 250, 251, 252, 352, 103, -109, 115,
1989 116, 122, 189, 193, 194, 195, 216, 226, 217, 220,
1990 -72, -71, -70, 353, -69, 332, 371, 421, -75, 423,
1991 424, 425, -76, 300, 301, 333, 430, 354, 356, 359,
1992 89, 372, 224, 360, 369, 361, 362, 374, 392, 363,
1993 364, 365, 370, 375, 403, 406, 326, 381, 382, 383,
1994 322, 384, 420, 458, 385, 393, 394, 395, 396, 397,
1995 346, 404, 409, 410, 417, 346, 346, 440, 441, 442,
1996 443, 444, 426, 427, 428, 433, 434, 346, 438, 449,
1997 450, 451, 452, 453, 439, 460, 461, 462, 348, 349,
1998 466, 463, 464, 470, 480, 472, 473, 474, 481, 494,
1999 350, 478, 486, 487, 224, 422, 224, 224, 224, 496,
2000 346, 401, 429, 224, 488, 518, 489, 528, 346, 346,
2001 346, 491, 492, 529, 483, 484, 415, 548, 511, 512,
2002 513, 490, 493, 358, 495, 498, 505, 508, 510, 516,
2003 517, 366, 367, 368, 552, 563, 328, 530, 570, 534,
2004 531, 532, 536, 540, 543, 539, 572, 574, 541, 575,
2005 224, 97, 542, 179, 533, 180, 380, 544, 181, 545,
2006 546, 547, 519, 520, 521, 522, 479, 523, 524, 525,
2007 553, 527, 554, 555, 239, 564, 240, 346, 346, 346,
2008 565, 567, 566, 571, 182, 346, 57, 183, 456, 222,
2009 105, 321, 537, 538, 239, 224, 240, 346, 346, 455,
2010 411, 412, 413, 113, 27, 224, 224, 224, 419, 379,
2011 45, 224, 469, 514, 485, 556, 0, 557, 558, 0,
2012 431, 432, 0, 0, 0, 0, 0, 526, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002013 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002014 346, 224, 346, 0, 0, 0, 346, 0, 0, 0,
2015 0, 0, 346, 346, 346, 0, 0, 0, 0, 0,
2016 0, 0, 0, 465, 0, 467, 0, 0, 0, 471,
2017 0, 0, 0, 0, 0, 475, 476, 477, 0, 0,
2018 0, 0, 0, 0, 0, 0, 346, 346, 0, 346,
2019 346, 0, 0, 0, 0, 0, 346, 0, 0, 0,
2020 0, 0, 0, 0, 0, 346, 0, 0, 0, 499,
2021 500, 0, 503, 504, 0, 0, 0, 0, -78, 509,
2022 20, 0, 21, 0, 0, 0, 0, 0, 515, 6,
2023 -78, -78, 0, 0, 0, 0, 346, 0, 0, -78,
2024 -78, -78, -78, -78, -78, -78, 0, 0, -78, 22,
2025 0, 0, 65, 66, 0, 0, 23, 0, 0, 535,
2026 24, 0, 0, 0, 0, 0, 0, 0, 0, 20,
2027 0, 21, 0, 302, 346, 0, 0, 0, 0, 0,
2028 0, 0, 0, 0, 0, 303, 304, 0, 0, 346,
2029 0, 0, 0, 0, 0, 0, 346, 559, 0, 0,
2030 346, 346, 0, 0, 0, 0, 0, 0, 0, 0,
2031 0, 0, 569, 0, 0, 0, 0, 0, 0, 573,
2032 0, 0, 0, 576, 577, 134, 135, 136, 137, 138,
Reid Spencer4012e832006-12-04 05:24:24 +00002033 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
Reid Spencercd42c582006-12-05 23:29:42 +00002034 149, 150, 151, 305, 306, 65, 66, 0, 117, 68,
2035 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2036 79, 80, 20, 0, 21, 0, 0, 0, 0, 0,
2037 307, 158, 159, 160, 161, 162, 163, 164, 165, 166,
2038 167, 168, 169, 0, 308, 172, 173, 174, 81, 309,
2039 310, 311, 0, 0, 0, 0, 0, 312, 0, 0,
2040 313, 0, 314, 65, 66, 315, 117, 200, 201, 202,
2041 203, 204, 205, 206, 207, 208, 209, 210, 79, 80,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002042 20, 0, 21, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002043 0, 0, 0, 0, 0, 0, 334, 335, 65, 66,
2044 336, 0, 0, 0, 0, 0, 81, 0, 0, 0,
2045 0, 0, 0, 0, 0, 20, 0, 21, 0, 337,
2046 338, 339, 0, 0, 0, 0, 0, 0, 0, 0,
2047 0, 340, 341, 0, 0, 0, 0, 0, 0, 0,
2048 0, 0, 0, 0, 0, 0, 0, 82, 0, 0,
2049 83, 0, 0, 84, 342, 85, 118, 0, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002050 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002051 0, 134, 135, 136, 137, 138, 139, 140, 141, 142,
2052 143, 144, 145, 146, 147, 148, 149, 150, 151, 305,
2053 306, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2054 0, 0, 0, 0, 0, 82, 0, 0, 83, 0,
2055 0, 84, 0, 85, 390, 0, 307, 158, 159, 160,
2056 161, 162, 163, 164, 165, 166, 167, 168, 169, 0,
2057 308, 172, 173, 174, 0, 309, 310, 311, 334, 335,
2058 0, 0, 336, 0, 0, 0, 343, 0, 0, 0,
2059 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2060 0, 337, 338, 339, 0, 0, 0, 0, 0, 0,
2061 0, 0, 0, 340, 341, 0, 0, 0, 0, 0,
2062 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2063 0, 0, 0, 0, 0, 0, 342, 0, 0, 0,
2064 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2065 0, 0, 0, 134, 135, 136, 137, 138, 139, 140,
2066 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2067 151, 305, 306, 65, 66, 0, 117, 200, 201, 202,
2068 203, 204, 205, 206, 207, 208, 209, 210, 79, 80,
2069 20, 0, 21, 0, 0, 0, 0, 0, 307, 158,
2070 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
2071 169, 0, 308, 172, 173, 174, 81, 309, 310, 311,
2072 0, 0, 0, 0, 0, 0, 65, 66, 343, 117,
Reid Spencer4012e832006-12-04 05:24:24 +00002073 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2074 78, 79, 80, 20, 0, 21, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002075 0, 0, 0, 0, 0, 0, 0, 0, 221, 0,
2076 0, 0, 0, 0, 0, 0, 0, 65, 66, 81,
Reid Spencer4012e832006-12-04 05:24:24 +00002077 117, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2078 77, 78, 79, 80, 20, 0, 21, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002079 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
2080 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2081 81, 0, 0, 0, 0, 82, 0, 0, 83, 0,
2082 386, 84, 0, 85, 65, 66, 0, 117, 68, 69,
2083 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2084 80, 20, 0, 21, 0, 0, 0, 0, 0, 0,
2085 0, 0, 0, 0, 0, 0, 405, 0, 0, 0,
2086 0, 0, 0, 0, 0, 0, 0, 81, 82, 0,
2087 0, 83, 0, 0, 84, 0, 85, 0, 65, 66,
2088 0, 117, 68, 69, 70, 71, 72, 73, 74, 75,
Reid Spencer4012e832006-12-04 05:24:24 +00002089 76, 77, 78, 79, 80, 20, 0, 21, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002090 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
2091 454, 0, 83, 0, 0, 84, 0, 85, 0, 65,
2092 66, 81, 67, 68, 69, 70, 71, 72, 73, 74,
2093 75, 76, 77, 78, 79, 80, 20, 0, 21, 65,
2094 66, 0, 117, 68, 69, 70, 71, 72, 73, 74,
2095 75, 76, 77, 78, 79, 80, 20, 0, 21, 0,
2096 0, 0, 81, 0, 0, 0, 82, 0, 0, 83,
2097 0, 0, 84, 0, 85, 0, 0, 0, 0, 0,
2098 0, 0, 81, 0, 65, 66, 0, 117, 200, 201,
2099 202, 203, 204, 205, 206, 207, 208, 209, 210, 79,
2100 80, 20, 0, 21, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002101 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencercd42c582006-12-05 23:29:42 +00002102 82, 0, 0, 83, 0, 0, 84, 81, 85, 65,
2103 66, 0, 227, 68, 69, 70, 71, 72, 73, 74,
2104 75, 76, 77, 78, 79, 80, 20, 0, 21, 0,
2105 0, 0, 0, 0, 124, 0, 0, 0, 0, 0,
2106 0, 82, 0, 0, 83, 0, 0, 84, 125, 85,
2107 0, 0, 81, 0, 0, 0, 0, 0, 126, 127,
Reid Spencer4012e832006-12-04 05:24:24 +00002108 0, 82, 0, 0, 83, 0, 0, 84, 0, 85,
Reid Spencercd42c582006-12-05 23:29:42 +00002109 0, 128, 129, 130, 131, 132, 133, 134, 135, 136,
2110 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
2111 147, 148, 149, 150, 151, 152, 153, 0, 0, 0,
2112 0, 0, 0, 0, 0, 0, 82, 0, 0, 83,
2113 0, 0, 84, 0, 85, 0, 0, 154, 155, 156,
2114 0, 0, 157, 158, 159, 160, 161, 162, 163, 164,
2115 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
2116 175, 176, 177, 178, 0, 0, 0, 0, 0, 0,
2117 0, 82, 0, 0, 83, 0, 0, 84, 0, 85
Reid Spencer3822ff52006-11-08 06:47:33 +00002118};
2119
2120static const short int yycheck[] =
2121{
Reid Spencercd42c582006-12-05 23:29:42 +00002122 37, 125, 53, 130, 128, 130, 3, 272, 15, 293,
2123 294, 29, 154, 15, 34, 157, 53, 131, 112, 85,
2124 10, 11, 12, 13, 14, 15, 16, 17, 23, 531,
2125 313, 314, 156, 9, 550, 30, 146, 57, 146, 323,
2126 0, 45, 152, 47, 41, 21, 562, 171, 156, 551,
2127 57, 175, 176, 177, 178, 57, 122, 20, 182, 183,
2128 343, 10, 11, 12, 13, 14, 15, 16, 17, 0,
2129 146, 185, 109, 110, 111, 146, 152, 61, 41, 42,
2130 43, 44, 45, 46, 47, 156, 148, 50, 125, 146,
2131 87, 128, 27, 28, 25, 157, 152, 154, 146, 23,
2132 31, 157, 52, 53, 54, 145, 154, 55, 56, 57,
2133 41, 42, 43, 44, 45, 46, 47, 154, 155, 156,
2134 157, 71, 10, 11, 12, 13, 14, 15, 16, 17,
2135 145, 62, 61, 170, 171, 32, 33, 155, 175, 176,
2136 177, 178, 179, 180, 181, 182, 183, 22, 24, 24,
2137 216, 217, 218, 437, 64, 65, 66, 67, 68, 69,
2138 70, 156, 152, 121, 122, 289, 55, 56, 4, 104,
2139 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
2140 115, 116, 117, 220, 27, 28, 3, 4, 3, 4,
2141 145, 242, 3, 4, 3, 4, 3, 4, 145, 145,
2142 465, 4, 467, 152, 145, 242, 98, 99, 100, 101,
2143 102, 103, 104, 105, 106, 107, 253, 150, 148, 4,
2144 4, 148, 24, 4, 24, 24, 151, 59, 151, 148,
2145 4, 4, 4, 270, 4, 146, 287, 361, 7, 363,
2146 364, 365, 7, 4, 7, 149, 370, 146, 146, 150,
2147 287, 288, 289, 146, 36, 146, 146, 24, 24, 146,
2148 146, 146, 146, 146, 146, 63, 332, 148, 148, 148,
2149 214, 148, 150, 24, 148, 148, 148, 148, 148, 148,
2150 224, 149, 146, 146, 146, 229, 230, 381, 382, 383,
2151 384, 385, 146, 146, 146, 146, 34, 241, 148, 393,
2152 394, 395, 396, 397, 148, 21, 21, 148, 229, 230,
2153 4, 146, 146, 146, 24, 146, 146, 146, 4, 36,
2154 241, 148, 146, 146, 361, 362, 363, 364, 365, 57,
2155 274, 328, 369, 370, 146, 149, 146, 4, 282, 283,
2156 284, 146, 146, 24, 438, 439, 57, 21, 472, 473,
2157 474, 445, 146, 274, 146, 146, 146, 146, 146, 146,
2158 146, 282, 283, 284, 36, 21, 403, 146, 21, 152,
2159 150, 149, 149, 149, 149, 146, 76, 21, 146, 21,
2160 417, 41, 146, 97, 508, 97, 306, 149, 97, 149,
2161 149, 149, 486, 487, 488, 489, 433, 491, 492, 493,
2162 152, 495, 149, 149, 531, 149, 531, 351, 352, 353,
2163 149, 146, 149, 146, 97, 359, 25, 97, 404, 122,
2164 52, 214, 516, 517, 551, 462, 551, 371, 372, 403,
2165 351, 352, 353, 61, 3, 472, 473, 474, 359, 305,
2166 19, 478, 417, 478, 440, 539, -1, 541, 542, -1,
2167 371, 372, -1, -1, -1, -1, -1, 494, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002168 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencercd42c582006-12-05 23:29:42 +00002169 414, 508, 416, -1, -1, -1, 420, -1, -1, -1,
2170 -1, -1, 426, 427, 428, -1, -1, -1, -1, -1,
2171 -1, -1, -1, 414, -1, 416, -1, -1, -1, 420,
2172 -1, -1, -1, -1, -1, 426, 427, 428, -1, -1,
2173 -1, -1, -1, -1, -1, -1, 460, 461, -1, 463,
2174 464, -1, -1, -1, -1, -1, 470, -1, -1, -1,
2175 -1, -1, -1, -1, -1, 479, -1, -1, -1, 460,
2176 461, -1, 463, 464, -1, -1, -1, -1, 20, 470,
2177 22, -1, 24, -1, -1, -1, -1, -1, 479, 31,
2178 32, 33, -1, -1, -1, -1, 510, -1, -1, 41,
2179 42, 43, 44, 45, 46, 47, -1, -1, 50, 51,
2180 -1, -1, 5, 6, -1, -1, 58, -1, -1, 510,
2181 62, -1, -1, -1, -1, -1, -1, -1, -1, 22,
2182 -1, 24, -1, 26, 548, -1, -1, -1, -1, -1,
2183 -1, -1, -1, -1, -1, 38, 39, -1, -1, 563,
2184 -1, -1, -1, -1, -1, -1, 570, 548, -1, -1,
2185 574, 575, -1, -1, -1, -1, -1, -1, -1, -1,
2186 -1, -1, 563, -1, -1, -1, -1, -1, -1, 570,
2187 -1, -1, -1, 574, 575, 78, 79, 80, 81, 82,
2188 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
2189 93, 94, 95, 96, 97, 5, 6, -1, 8, 9,
2190 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2191 20, 21, 22, -1, 24, -1, -1, -1, -1, -1,
2192 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2193 133, 134, 135, -1, 137, 138, 139, 140, 48, 142,
2194 143, 144, -1, -1, -1, -1, -1, 150, -1, -1,
2195 153, -1, 155, 5, 6, 158, 8, 9, 10, 11,
2196 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2197 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
2198 -1, -1, -1, -1, -1, -1, 3, 4, 5, 6,
2199 7, -1, -1, -1, -1, -1, 48, -1, -1, -1,
2200 -1, -1, -1, -1, -1, 22, -1, 24, -1, 26,
2201 27, 28, -1, -1, -1, -1, -1, -1, -1, -1,
2202 -1, 38, 39, -1, -1, -1, -1, -1, -1, -1,
2203 -1, -1, -1, -1, -1, -1, -1, 147, -1, -1,
2204 150, -1, -1, 153, 61, 155, 156, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002205 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencercd42c582006-12-05 23:29:42 +00002206 -1, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2207 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
2208 97, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2209 -1, -1, -1, -1, -1, 147, -1, -1, 150, -1,
2210 -1, 153, -1, 155, 156, -1, 123, 124, 125, 126,
2211 127, 128, 129, 130, 131, 132, 133, 134, 135, -1,
2212 137, 138, 139, 140, -1, 142, 143, 144, 3, 4,
2213 -1, -1, 7, -1, -1, -1, 153, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencercd42c582006-12-05 23:29:42 +00002215 -1, 26, 27, 28, -1, -1, -1, -1, -1, -1,
2216 -1, -1, -1, 38, 39, -1, -1, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002217 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencercd42c582006-12-05 23:29:42 +00002218 -1, -1, -1, -1, -1, -1, 61, -1, -1, -1,
2219 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2220 -1, -1, -1, 78, 79, 80, 81, 82, 83, 84,
2221 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2222 95, 96, 97, 5, 6, -1, 8, 9, 10, 11,
2223 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2224 22, -1, 24, -1, -1, -1, -1, -1, 123, 124,
2225 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
2226 135, -1, 137, 138, 139, 140, 48, 142, 143, 144,
2227 -1, -1, -1, -1, -1, -1, 5, 6, 153, 8,
2228 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2229 19, 20, 21, 22, -1, 24, -1, -1, -1, -1,
2230 -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
2231 -1, -1, -1, -1, -1, -1, -1, 5, 6, 48,
2232 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
2233 18, 19, 20, 21, 22, -1, 24, -1, -1, -1,
2234 -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
2235 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2236 48, -1, -1, -1, -1, 147, -1, -1, 150, -1,
2237 152, 153, -1, 155, 5, 6, -1, 8, 9, 10,
Reid Spencer4012e832006-12-04 05:24:24 +00002238 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
Reid Spencercd42c582006-12-05 23:29:42 +00002239 21, 22, -1, 24, -1, -1, -1, -1, -1, -1,
2240 -1, -1, -1, -1, -1, -1, 37, -1, -1, -1,
2241 -1, -1, -1, -1, -1, -1, -1, 48, 147, -1,
2242 -1, 150, -1, -1, 153, -1, 155, -1, 5, 6,
2243 -1, 8, 9, 10, 11, 12, 13, 14, 15, 16,
2244 17, 18, 19, 20, 21, 22, -1, 24, -1, -1,
2245 -1, -1, -1, -1, -1, -1, -1, -1, -1, 147,
2246 37, -1, 150, -1, -1, 153, -1, 155, -1, 5,
2247 6, 48, 8, 9, 10, 11, 12, 13, 14, 15,
2248 16, 17, 18, 19, 20, 21, 22, -1, 24, 5,
2249 6, -1, 8, 9, 10, 11, 12, 13, 14, 15,
2250 16, 17, 18, 19, 20, 21, 22, -1, 24, -1,
2251 -1, -1, 48, -1, -1, -1, 147, -1, -1, 150,
2252 -1, -1, 153, -1, 155, -1, -1, -1, -1, -1,
2253 -1, -1, 48, -1, 5, 6, -1, 8, 9, 10,
Reid Spencer4012e832006-12-04 05:24:24 +00002254 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
2255 21, 22, -1, 24, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002256 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencercd42c582006-12-05 23:29:42 +00002257 147, -1, -1, 150, -1, -1, 153, 48, 155, 5,
2258 6, -1, 8, 9, 10, 11, 12, 13, 14, 15,
2259 16, 17, 18, 19, 20, 21, 22, -1, 24, -1,
2260 -1, -1, -1, -1, 35, -1, -1, -1, -1, -1,
2261 -1, 147, -1, -1, 150, -1, -1, 153, 49, 155,
2262 -1, -1, 48, -1, -1, -1, -1, -1, 59, 60,
2263 -1, 147, -1, -1, 150, -1, -1, 153, -1, 155,
2264 -1, 72, 73, 74, 75, 76, 77, 78, 79, 80,
Reid Spencer4012e832006-12-04 05:24:24 +00002265 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
Reid Spencercd42c582006-12-05 23:29:42 +00002266 91, 92, 93, 94, 95, 96, 97, -1, -1, -1,
2267 -1, -1, -1, -1, -1, -1, 147, -1, -1, 150,
2268 -1, -1, 153, -1, 155, -1, -1, 118, 119, 120,
Reid Spencer4012e832006-12-04 05:24:24 +00002269 -1, -1, 123, 124, 125, 126, 127, 128, 129, 130,
Reid Spencercd42c582006-12-05 23:29:42 +00002270 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
2271 141, 142, 143, 144, -1, -1, -1, -1, -1, -1,
2272 -1, 147, -1, -1, 150, -1, -1, 153, -1, 155
Reid Spencer3822ff52006-11-08 06:47:33 +00002273};
2274
2275/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2276 symbol of state STATE-NUM. */
2277static const unsigned char yystos[] =
2278{
Reid Spencercd42c582006-12-05 23:29:42 +00002279 0, 193, 194, 195, 0, 25, 31, 41, 42, 43,
2280 44, 45, 46, 47, 62, 174, 212, 214, 216, 223,
2281 22, 24, 51, 58, 62, 173, 205, 216, 217, 61,
2282 64, 65, 66, 67, 68, 69, 70, 175, 210, 23,
2283 224, 225, 30, 156, 213, 224, 52, 53, 54, 71,
2284 202, 145, 61, 20, 45, 47, 50, 174, 145, 45,
2285 47, 215, 24, 200, 4, 5, 6, 8, 9, 10,
Reid Spencer3822ff52006-11-08 06:47:33 +00002286 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
Reid Spencercd42c582006-12-05 23:29:42 +00002287 21, 48, 147, 150, 153, 155, 160, 182, 183, 184,
2288 185, 186, 205, 220, 29, 155, 211, 173, 228, 145,
2289 145, 145, 145, 150, 203, 200, 182, 32, 33, 192,
2290 192, 192, 192, 210, 4, 4, 4, 8, 156, 186,
2291 187, 205, 148, 157, 35, 49, 59, 60, 72, 73,
Reid Spencer3822ff52006-11-08 06:47:33 +00002292 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2293 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002294 94, 95, 96, 97, 118, 119, 120, 123, 124, 125,
2295 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
Reid Spencercd42c582006-12-05 23:29:42 +00002296 136, 137, 138, 139, 140, 141, 142, 143, 144, 162,
2297 163, 164, 165, 166, 226, 232, 233, 235, 236, 24,
2298 55, 56, 201, 4, 24, 24, 204, 184, 184, 184,
2299 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2300 19, 169, 170, 172, 184, 189, 151, 151, 146, 156,
2301 148, 37, 187, 188, 184, 222, 59, 8, 222, 9,
2302 21, 10, 11, 12, 13, 14, 15, 16, 17, 169,
2303 170, 171, 175, 98, 99, 100, 101, 102, 103, 104,
2304 105, 106, 107, 167, 27, 28, 104, 105, 106, 107,
2305 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
2306 168, 184, 184, 222, 184, 184, 229, 222, 222, 222,
2307 222, 222, 184, 184, 184, 222, 222, 175, 121, 122,
2308 146, 152, 198, 199, 197, 27, 28, 3, 4, 161,
2309 4, 7, 26, 38, 39, 96, 97, 123, 137, 142,
2310 143, 144, 150, 153, 155, 158, 162, 163, 164, 165,
2311 166, 190, 220, 196, 186, 186, 186, 37, 184, 207,
2312 208, 209, 146, 149, 3, 4, 7, 26, 27, 28,
2313 38, 39, 61, 153, 190, 219, 220, 221, 221, 221,
2314 221, 182, 184, 184, 146, 177, 146, 177, 221, 150,
2315 146, 146, 146, 146, 146, 146, 221, 221, 221, 36,
2316 146, 182, 184, 222, 24, 146, 180, 180, 180, 167,
2317 168, 148, 148, 148, 148, 148, 152, 189, 191, 191,
2318 156, 191, 24, 148, 148, 148, 148, 148, 180, 152,
2319 154, 205, 206, 146, 149, 37, 63, 218, 191, 146,
2320 146, 221, 221, 221, 15, 57, 15, 146, 234, 221,
2321 150, 222, 184, 222, 222, 222, 146, 146, 146, 184,
2322 222, 221, 221, 146, 34, 57, 178, 181, 148, 148,
2323 189, 189, 189, 189, 189, 146, 152, 154, 156, 189,
2324 189, 189, 189, 189, 37, 207, 178, 179, 24, 154,
2325 21, 21, 148, 146, 146, 221, 4, 221, 222, 230,
2326 146, 221, 146, 146, 146, 221, 221, 221, 148, 184,
2327 24, 4, 180, 189, 189, 234, 146, 146, 146, 146,
2328 189, 146, 146, 146, 36, 146, 57, 176, 146, 221,
2329 221, 230, 231, 221, 221, 146, 177, 177, 146, 221,
2330 146, 222, 222, 222, 231, 221, 146, 146, 149, 189,
2331 189, 189, 189, 189, 189, 189, 184, 189, 4, 24,
2332 146, 150, 149, 222, 152, 221, 149, 189, 189, 146,
2333 149, 146, 146, 149, 149, 149, 149, 149, 21, 152,
2334 171, 227, 36, 152, 149, 149, 189, 189, 189, 221,
2335 219, 152, 171, 21, 149, 149, 149, 146, 219, 221,
2336 21, 146, 76, 221, 21, 21, 221, 221
Reid Spencer3822ff52006-11-08 06:47:33 +00002337};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002338
2339#define yyerrok (yyerrstatus = 0)
2340#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002341#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002342#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002343
Reid Spencer68a24bd2005-08-27 18:50:39 +00002344#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002345#define YYABORT goto yyabortlab
2346#define YYERROR goto yyerrorlab
2347
2348
2349/* Like YYERROR except do call yyerror. This remains here temporarily
2350 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002351 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002352
Reid Spencer68a24bd2005-08-27 18:50:39 +00002353#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002354
Reid Spencer68a24bd2005-08-27 18:50:39 +00002355#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002356
2357#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002358do \
2359 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002360 { \
2361 yychar = (Token); \
2362 yylval = (Value); \
2363 yytoken = YYTRANSLATE (yychar); \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002364 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002365 goto yybackup; \
2366 } \
2367 else \
Reid Spencer3822ff52006-11-08 06:47:33 +00002368 { \
2369 yyerror (YY_("syntax error: cannot back up")); \
2370 YYERROR; \
2371 } \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002372while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002373
Reid Spencer3822ff52006-11-08 06:47:33 +00002374
Reid Spencer68a24bd2005-08-27 18:50:39 +00002375#define YYTERROR 1
2376#define YYERRCODE 256
2377
Reid Spencer3822ff52006-11-08 06:47:33 +00002378
2379/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2380 If N is 0, then set CURRENT to the empty location which ends
2381 the previous symbol: RHS[0] (always defined). */
2382
2383#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2384#ifndef YYLLOC_DEFAULT
2385# define YYLLOC_DEFAULT(Current, Rhs, N) \
2386 do \
2387 if (N) \
2388 { \
2389 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2390 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2391 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2392 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2393 } \
2394 else \
2395 { \
2396 (Current).first_line = (Current).last_line = \
2397 YYRHSLOC (Rhs, 0).last_line; \
2398 (Current).first_column = (Current).last_column = \
2399 YYRHSLOC (Rhs, 0).last_column; \
2400 } \
2401 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002402#endif
2403
Reid Spencer3822ff52006-11-08 06:47:33 +00002404
2405/* YY_LOCATION_PRINT -- Print the location on the stream.
2406 This macro was not mandated originally: define only if we know
2407 we won't break user code: when these are the locations we know. */
2408
2409#ifndef YY_LOCATION_PRINT
2410# if YYLTYPE_IS_TRIVIAL
2411# define YY_LOCATION_PRINT(File, Loc) \
2412 fprintf (File, "%d.%d-%d.%d", \
2413 (Loc).first_line, (Loc).first_column, \
2414 (Loc).last_line, (Loc).last_column)
2415# else
2416# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2417# endif
2418#endif
2419
2420
2421/* YYLEX -- calling `yylex' with the right arguments. */
2422
Reid Spencer68a24bd2005-08-27 18:50:39 +00002423#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002424# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002425#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002426# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002427#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002428
2429/* Enable debugging if requested. */
2430#if YYDEBUG
2431
2432# ifndef YYFPRINTF
2433# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2434# define YYFPRINTF fprintf
2435# endif
2436
2437# define YYDPRINTF(Args) \
2438do { \
2439 if (yydebug) \
2440 YYFPRINTF Args; \
2441} while (0)
2442
2443# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2444do { \
2445 if (yydebug) \
2446 { \
2447 YYFPRINTF (stderr, "%s ", Title); \
2448 yysymprint (stderr, \
2449 Type, Value); \
2450 YYFPRINTF (stderr, "\n"); \
2451 } \
2452} while (0)
2453
2454/*------------------------------------------------------------------.
2455| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2456| TOP (included). |
2457`------------------------------------------------------------------*/
2458
2459#if defined (__STDC__) || defined (__cplusplus)
2460static void
2461yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002462#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002463static void
2464yy_stack_print (bottom, top)
2465 short int *bottom;
2466 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002467#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002468{
2469 YYFPRINTF (stderr, "Stack now");
2470 for (/* Nothing. */; bottom <= top; ++bottom)
2471 YYFPRINTF (stderr, " %d", *bottom);
2472 YYFPRINTF (stderr, "\n");
2473}
2474
2475# define YY_STACK_PRINT(Bottom, Top) \
2476do { \
2477 if (yydebug) \
2478 yy_stack_print ((Bottom), (Top)); \
2479} while (0)
2480
2481
2482/*------------------------------------------------.
2483| Report that the YYRULE is going to be reduced. |
2484`------------------------------------------------*/
2485
2486#if defined (__STDC__) || defined (__cplusplus)
2487static void
2488yy_reduce_print (int yyrule)
2489#else
2490static void
2491yy_reduce_print (yyrule)
2492 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002493#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002494{
2495 int yyi;
2496 unsigned long int yylno = yyrline[yyrule];
2497 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2498 yyrule - 1, yylno);
2499 /* Print the symbols being reduced, and their result. */
2500 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2501 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2502 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2503}
Reid Spencer21be8652006-10-22 07:03:43 +00002504
Reid Spencer3822ff52006-11-08 06:47:33 +00002505# define YY_REDUCE_PRINT(Rule) \
2506do { \
2507 if (yydebug) \
2508 yy_reduce_print (Rule); \
2509} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002510
Reid Spencer3822ff52006-11-08 06:47:33 +00002511/* Nonzero means print parse trace. It is left uninitialized so that
2512 multiple parsers can coexist. */
2513int yydebug;
2514#else /* !YYDEBUG */
2515# define YYDPRINTF(Args)
2516# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2517# define YY_STACK_PRINT(Bottom, Top)
2518# define YY_REDUCE_PRINT(Rule)
2519#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002520
Reid Spencer21be8652006-10-22 07:03:43 +00002521
Reid Spencer3822ff52006-11-08 06:47:33 +00002522/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002523#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002524# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002525#endif
2526
Reid Spencer3822ff52006-11-08 06:47:33 +00002527/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2528 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002529
Reid Spencer3822ff52006-11-08 06:47:33 +00002530 Do not make this value too large; the results are undefined if
2531 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2532 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002533
2534#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002535# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002536#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002537
Reid Spencer68a24bd2005-08-27 18:50:39 +00002538
2539
Reid Spencer3822ff52006-11-08 06:47:33 +00002540#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002541
Reid Spencer3822ff52006-11-08 06:47:33 +00002542# ifndef yystrlen
2543# if defined (__GLIBC__) && defined (_STRING_H)
2544# define yystrlen strlen
2545# else
2546/* Return the length of YYSTR. */
2547static YYSIZE_T
2548# if defined (__STDC__) || defined (__cplusplus)
2549yystrlen (const char *yystr)
2550# else
2551yystrlen (yystr)
2552 const char *yystr;
2553# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002554{
Reid Spencer3822ff52006-11-08 06:47:33 +00002555 const char *yys = yystr;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002556
Reid Spencer3822ff52006-11-08 06:47:33 +00002557 while (*yys++ != '\0')
2558 continue;
2559
2560 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002561}
Reid Spencer3822ff52006-11-08 06:47:33 +00002562# endif
2563# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002564
Reid Spencer3822ff52006-11-08 06:47:33 +00002565# ifndef yystpcpy
2566# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2567# define yystpcpy stpcpy
2568# else
2569/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2570 YYDEST. */
2571static char *
2572# if defined (__STDC__) || defined (__cplusplus)
2573yystpcpy (char *yydest, const char *yysrc)
2574# else
2575yystpcpy (yydest, yysrc)
2576 char *yydest;
2577 const char *yysrc;
2578# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002579{
Reid Spencer3822ff52006-11-08 06:47:33 +00002580 char *yyd = yydest;
2581 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002582
Reid Spencer3822ff52006-11-08 06:47:33 +00002583 while ((*yyd++ = *yys++) != '\0')
2584 continue;
2585
2586 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002587}
Reid Spencer3822ff52006-11-08 06:47:33 +00002588# endif
2589# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002590
Reid Spencer3822ff52006-11-08 06:47:33 +00002591# ifndef yytnamerr
2592/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2593 quotes and backslashes, so that it's suitable for yyerror. The
2594 heuristic is that double-quoting is unnecessary unless the string
2595 contains an apostrophe, a comma, or backslash (other than
2596 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2597 null, do not copy; instead, return the length of what the result
2598 would have been. */
2599static YYSIZE_T
2600yytnamerr (char *yyres, const char *yystr)
2601{
2602 if (*yystr == '"')
2603 {
2604 size_t yyn = 0;
2605 char const *yyp = yystr;
2606
2607 for (;;)
2608 switch (*++yyp)
2609 {
2610 case '\'':
2611 case ',':
2612 goto do_not_strip_quotes;
2613
2614 case '\\':
2615 if (*++yyp != '\\')
2616 goto do_not_strip_quotes;
2617 /* Fall through. */
2618 default:
2619 if (yyres)
2620 yyres[yyn] = *yyp;
2621 yyn++;
2622 break;
2623
2624 case '"':
2625 if (yyres)
2626 yyres[yyn] = '\0';
2627 return yyn;
2628 }
2629 do_not_strip_quotes: ;
2630 }
2631
2632 if (! yyres)
2633 return yystrlen (yystr);
2634
2635 return yystpcpy (yyres, yystr) - yyres;
2636}
2637# endif
2638
2639#endif /* YYERROR_VERBOSE */
2640
Reid Spencer21be8652006-10-22 07:03:43 +00002641
2642
Reid Spencer3822ff52006-11-08 06:47:33 +00002643#if YYDEBUG
2644/*--------------------------------.
2645| Print this symbol on YYOUTPUT. |
2646`--------------------------------*/
Reid Spencer21be8652006-10-22 07:03:43 +00002647
Reid Spencer3822ff52006-11-08 06:47:33 +00002648#if defined (__STDC__) || defined (__cplusplus)
2649static void
2650yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002651#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002652static void
2653yysymprint (yyoutput, yytype, yyvaluep)
2654 FILE *yyoutput;
2655 int yytype;
2656 YYSTYPE *yyvaluep;
2657#endif
2658{
2659 /* Pacify ``unused variable'' warnings. */
2660 (void) yyvaluep;
2661
2662 if (yytype < YYNTOKENS)
2663 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2664 else
2665 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2666
2667
2668# ifdef YYPRINT
2669 if (yytype < YYNTOKENS)
2670 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2671# endif
2672 switch (yytype)
2673 {
2674 default:
2675 break;
2676 }
2677 YYFPRINTF (yyoutput, ")");
2678}
2679
2680#endif /* ! YYDEBUG */
2681/*-----------------------------------------------.
2682| Release the memory associated to this symbol. |
2683`-----------------------------------------------*/
2684
2685#if defined (__STDC__) || defined (__cplusplus)
2686static void
2687yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2688#else
2689static void
2690yydestruct (yymsg, yytype, yyvaluep)
2691 const char *yymsg;
2692 int yytype;
2693 YYSTYPE *yyvaluep;
2694#endif
2695{
2696 /* Pacify ``unused variable'' warnings. */
2697 (void) yyvaluep;
2698
2699 if (!yymsg)
2700 yymsg = "Deleting";
2701 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2702
2703 switch (yytype)
2704 {
2705
2706 default:
2707 break;
2708 }
2709}
2710
2711
2712/* Prevent warnings from -Wmissing-prototypes. */
2713
2714#ifdef YYPARSE_PARAM
2715# if defined (__STDC__) || defined (__cplusplus)
2716int yyparse (void *YYPARSE_PARAM);
2717# else
2718int yyparse ();
2719# endif
2720#else /* ! YYPARSE_PARAM */
2721#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002722int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002723#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002724int yyparse ();
2725#endif
2726#endif /* ! YYPARSE_PARAM */
2727
2728
2729
2730/* The look-ahead symbol. */
2731int yychar;
2732
2733/* The semantic value of the look-ahead symbol. */
2734YYSTYPE yylval;
2735
2736/* Number of syntax errors so far. */
2737int yynerrs;
2738
2739
2740
2741/*----------.
2742| yyparse. |
2743`----------*/
2744
2745#ifdef YYPARSE_PARAM
2746# if defined (__STDC__) || defined (__cplusplus)
2747int yyparse (void *YYPARSE_PARAM)
2748# else
2749int yyparse (YYPARSE_PARAM)
2750 void *YYPARSE_PARAM;
2751# endif
2752#else /* ! YYPARSE_PARAM */
2753#if defined (__STDC__) || defined (__cplusplus)
2754int
2755yyparse (void)
2756#else
2757int
2758yyparse ()
2759
2760#endif
2761#endif
2762{
2763
2764 int yystate;
2765 int yyn;
2766 int yyresult;
2767 /* Number of tokens to shift before error messages enabled. */
2768 int yyerrstatus;
2769 /* Look-ahead token as an internal (translated) token number. */
2770 int yytoken = 0;
2771
2772 /* Three stacks and their tools:
2773 `yyss': related to states,
2774 `yyvs': related to semantic values,
2775 `yyls': related to locations.
2776
2777 Refer to the stacks thru separate pointers, to allow yyoverflow
2778 to reallocate them elsewhere. */
2779
2780 /* The state stack. */
2781 short int yyssa[YYINITDEPTH];
2782 short int *yyss = yyssa;
2783 short int *yyssp;
2784
2785 /* The semantic value stack. */
2786 YYSTYPE yyvsa[YYINITDEPTH];
2787 YYSTYPE *yyvs = yyvsa;
2788 YYSTYPE *yyvsp;
2789
2790
2791
Reid Spencer5b7e7532006-09-28 19:28:24 +00002792#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002793
Reid Spencer3822ff52006-11-08 06:47:33 +00002794 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002795
Reid Spencer3822ff52006-11-08 06:47:33 +00002796 /* The variables used to return semantic value and location from the
2797 action routines. */
2798 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002799
2800
Reid Spencer3822ff52006-11-08 06:47:33 +00002801 /* When reducing, the number of symbols on the RHS of the reduced
2802 rule. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00002803 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002804
Reid Spencer3822ff52006-11-08 06:47:33 +00002805 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002806
Reid Spencer68a24bd2005-08-27 18:50:39 +00002807 yystate = 0;
2808 yyerrstatus = 0;
2809 yynerrs = 0;
2810 yychar = YYEMPTY; /* Cause a token to be read. */
2811
2812 /* Initialize stack pointers.
2813 Waste one element of value and location stack
2814 so that they stay on the same level as the state stack.
2815 The wasted elements are never initialized. */
2816
Reid Spencer3822ff52006-11-08 06:47:33 +00002817 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002818 yyvsp = yyvs;
2819
Reid Spencer3822ff52006-11-08 06:47:33 +00002820 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002821
Reid Spencer3822ff52006-11-08 06:47:33 +00002822/*------------------------------------------------------------.
2823| yynewstate -- Push a new state, which is found in yystate. |
2824`------------------------------------------------------------*/
2825 yynewstate:
2826 /* In all cases, when you get here, the value and location stacks
2827 have just been pushed. so pushing a state here evens the stacks.
2828 */
2829 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002830
Reid Spencer3822ff52006-11-08 06:47:33 +00002831 yysetstate:
2832 *yyssp = yystate;
2833
2834 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002835 {
2836 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002837 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002838
2839#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002840 {
2841 /* Give user a chance to reallocate the stack. Use copies of
2842 these so that the &'s don't force the real ones into
2843 memory. */
2844 YYSTYPE *yyvs1 = yyvs;
2845 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002846
Reid Spencer3822ff52006-11-08 06:47:33 +00002847
2848 /* Each stack pointer address is followed by the size of the
2849 data in use in that stack, in bytes. This used to be a
2850 conditional around just the two extra args, but that might
2851 be undefined if yyoverflow is a macro. */
2852 yyoverflow (YY_("memory exhausted"),
2853 &yyss1, yysize * sizeof (*yyssp),
2854 &yyvs1, yysize * sizeof (*yyvsp),
2855
2856 &yystacksize);
2857
2858 yyss = yyss1;
2859 yyvs = yyvs1;
2860 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002861#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002862# ifndef YYSTACK_RELOCATE
2863 goto yyexhaustedlab;
2864# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002865 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002866 if (YYMAXDEPTH <= yystacksize)
2867 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002868 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002869 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002870 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00002871
2872 {
2873 short int *yyss1 = yyss;
2874 union yyalloc *yyptr =
2875 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2876 if (! yyptr)
2877 goto yyexhaustedlab;
2878 YYSTACK_RELOCATE (yyss);
2879 YYSTACK_RELOCATE (yyvs);
2880
2881# undef YYSTACK_RELOCATE
2882 if (yyss1 != yyssa)
2883 YYSTACK_FREE (yyss1);
2884 }
2885# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002886#endif /* no yyoverflow */
2887
Reid Spencer3822ff52006-11-08 06:47:33 +00002888 yyssp = yyss + yysize - 1;
2889 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002890
2891
Reid Spencer3822ff52006-11-08 06:47:33 +00002892 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2893 (unsigned long int) yystacksize));
2894
2895 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002896 YYABORT;
2897 }
2898
Reid Spencer3822ff52006-11-08 06:47:33 +00002899 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002900
2901 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00002902
2903/*-----------.
2904| yybackup. |
2905`-----------*/
2906yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002907
Reid Spencer5b7e7532006-09-28 19:28:24 +00002908/* Do appropriate processing given the current state. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002909/* Read a look-ahead token if we need one and don't already have one. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00002910/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002911
Reid Spencer3822ff52006-11-08 06:47:33 +00002912 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00002913
Reid Spencer68a24bd2005-08-27 18:50:39 +00002914 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00002915 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002916 goto yydefault;
2917
Reid Spencer3822ff52006-11-08 06:47:33 +00002918 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002919
Reid Spencer3822ff52006-11-08 06:47:33 +00002920 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002921 if (yychar == YYEMPTY)
2922 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002923 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002924 yychar = YYLEX;
2925 }
2926
Reid Spencer3822ff52006-11-08 06:47:33 +00002927 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002928 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002929 yychar = yytoken = YYEOF;
2930 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00002931 }
2932 else
2933 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002934 yytoken = YYTRANSLATE (yychar);
2935 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00002936 }
2937
Reid Spencer3822ff52006-11-08 06:47:33 +00002938 /* If the proper action on seeing token YYTOKEN is to reduce or to
2939 detect an error, take that action. */
2940 yyn += yytoken;
2941 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002942 goto yydefault;
2943 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00002944 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002945 {
Reid Spencer3822ff52006-11-08 06:47:33 +00002946 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002947 goto yyerrlab;
2948 yyn = -yyn;
2949 goto yyreduce;
2950 }
2951
2952 if (yyn == YYFINAL)
2953 YYACCEPT;
2954
Reid Spencer3822ff52006-11-08 06:47:33 +00002955 /* Shift the look-ahead token. */
2956 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Reid Spencer5b7e7532006-09-28 19:28:24 +00002957
2958 /* Discard the token being shifted unless it is eof. */
2959 if (yychar != YYEOF)
2960 yychar = YYEMPTY;
2961
2962 *++yyvsp = yylval;
2963
Reid Spencer3822ff52006-11-08 06:47:33 +00002964
2965 /* Count tokens shifted since error; after three, turn off error
2966 status. */
2967 if (yyerrstatus)
2968 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00002969
Reid Spencer68a24bd2005-08-27 18:50:39 +00002970 yystate = yyn;
2971 goto yynewstate;
2972
Chris Lattnerf49c1762006-11-08 05:58:47 +00002973
Reid Spencer3822ff52006-11-08 06:47:33 +00002974/*-----------------------------------------------------------.
2975| yydefault -- do the default action for the current state. |
2976`-----------------------------------------------------------*/
2977yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00002978 yyn = yydefact[yystate];
2979 if (yyn == 0)
2980 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00002981 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002982
Reid Spencer3822ff52006-11-08 06:47:33 +00002983
2984/*-----------------------------.
2985| yyreduce -- Do a reduction. |
2986`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00002987yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00002988 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002989 yylen = yyr2[yyn];
2990
Reid Spencer3822ff52006-11-08 06:47:33 +00002991 /* If YYLEN is nonzero, implement the default value of the action:
2992 `$$ = $1'.
2993
2994 Otherwise, the following line sets YYVAL to garbage.
2995 This behavior is undocumented and Bison
2996 users should not rely upon it. Assigning to YYVAL
2997 unconditionally makes the parser a bit smaller, and it avoids a
2998 GCC warning that YYVAL may be used uninitialized. */
2999 yyval = yyvsp[1-yylen];
3000
3001
3002 YY_REDUCE_PRINT (yyn);
3003 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003004 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003005 case 3:
Reid Spencercd42c582006-12-05 23:29:42 +00003006#line 993 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003007 {
3008 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003009 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003010 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003011 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003012;}
3013 break;
3014
3015 case 5:
Reid Spencercd42c582006-12-05 23:29:42 +00003016#line 1002 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003017 {
3018 if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003019 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003020 (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003021 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003022;}
3023 break;
3024
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003025 case 39:
Reid Spencercd42c582006-12-05 23:29:42 +00003026#line 1019 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003027 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3028 break;
3029
3030 case 40:
Reid Spencercd42c582006-12-05 23:29:42 +00003031#line 1019 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003032 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3033 break;
3034
3035 case 41:
Reid Spencercd42c582006-12-05 23:29:42 +00003036#line 1020 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003037 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3038 break;
3039
3040 case 42:
Reid Spencercd42c582006-12-05 23:29:42 +00003041#line 1020 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003042 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3043 break;
3044
3045 case 43:
Reid Spencercd42c582006-12-05 23:29:42 +00003046#line 1021 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003047 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3048 break;
3049
3050 case 44:
Reid Spencercd42c582006-12-05 23:29:42 +00003051#line 1021 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003052 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3053 break;
3054
3055 case 45:
Reid Spencercd42c582006-12-05 23:29:42 +00003056#line 1022 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003057 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3058 break;
3059
3060 case 46:
Reid Spencercd42c582006-12-05 23:29:42 +00003061#line 1022 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003062 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3063 break;
3064
3065 case 47:
Reid Spencercd42c582006-12-05 23:29:42 +00003066#line 1023 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003067 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3068 break;
3069
3070 case 48:
Reid Spencercd42c582006-12-05 23:29:42 +00003071#line 1023 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003072 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3073 break;
3074
3075 case 49:
Reid Spencercd42c582006-12-05 23:29:42 +00003076#line 1027 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003077 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3078 break;
3079
3080 case 50:
Reid Spencercd42c582006-12-05 23:29:42 +00003081#line 1027 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003082 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3083 break;
3084
3085 case 51:
Reid Spencercd42c582006-12-05 23:29:42 +00003086#line 1028 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003087 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3088 break;
3089
3090 case 52:
Reid Spencercd42c582006-12-05 23:29:42 +00003091#line 1028 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003092 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3093 break;
3094
3095 case 53:
Reid Spencercd42c582006-12-05 23:29:42 +00003096#line 1029 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003097 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3098 break;
3099
3100 case 54:
Reid Spencercd42c582006-12-05 23:29:42 +00003101#line 1029 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003102 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3103 break;
3104
3105 case 55:
Reid Spencercd42c582006-12-05 23:29:42 +00003106#line 1030 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003107 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3108 break;
3109
3110 case 56:
Reid Spencercd42c582006-12-05 23:29:42 +00003111#line 1030 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003112 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3113 break;
3114
3115 case 57:
Reid Spencercd42c582006-12-05 23:29:42 +00003116#line 1031 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003117 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3118 break;
3119
3120 case 58:
Reid Spencercd42c582006-12-05 23:29:42 +00003121#line 1031 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003122 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3123 break;
3124
3125 case 59:
Reid Spencercd42c582006-12-05 23:29:42 +00003126#line 1032 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003127 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3128 break;
3129
3130 case 60:
Reid Spencercd42c582006-12-05 23:29:42 +00003131#line 1032 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003132 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3133 break;
3134
3135 case 61:
Reid Spencercd42c582006-12-05 23:29:42 +00003136#line 1033 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003137 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3138 break;
3139
3140 case 62:
Reid Spencercd42c582006-12-05 23:29:42 +00003141#line 1033 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003142 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3143 break;
3144
3145 case 63:
Reid Spencercd42c582006-12-05 23:29:42 +00003146#line 1034 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003147 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3148 break;
3149
3150 case 64:
Reid Spencercd42c582006-12-05 23:29:42 +00003151#line 1035 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003152 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3153 break;
3154
3155 case 77:
Reid Spencercd42c582006-12-05 23:29:42 +00003156#line 1046 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003157 {
3158 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003159 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003160 ;}
3161 break;
3162
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003163 case 78:
Reid Spencercd42c582006-12-05 23:29:42 +00003164#line 1050 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003165 {
3166 (yyval.StrVal) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00003167 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003168 ;}
3169 break;
3170
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003171 case 79:
Reid Spencercd42c582006-12-05 23:29:42 +00003172#line 1055 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003173 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3174 break;
3175
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003176 case 80:
Reid Spencercd42c582006-12-05 23:29:42 +00003177#line 1056 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003178 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3179 break;
3180
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003181 case 81:
Reid Spencercd42c582006-12-05 23:29:42 +00003182#line 1057 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003183 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3184 break;
3185
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003186 case 82:
Reid Spencercd42c582006-12-05 23:29:42 +00003187#line 1058 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003188 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3189 break;
3190
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003191 case 83:
Reid Spencercd42c582006-12-05 23:29:42 +00003192#line 1059 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003193 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3194 break;
3195
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003196 case 84:
Reid Spencercd42c582006-12-05 23:29:42 +00003197#line 1060 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003198 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3199 break;
3200
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003201 case 85:
Reid Spencercd42c582006-12-05 23:29:42 +00003202#line 1061 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003203 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3204 break;
3205
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003206 case 86:
Reid Spencercd42c582006-12-05 23:29:42 +00003207#line 1062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003208 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3209 break;
3210
Reid Spencera132e042006-12-03 05:46:11 +00003211 case 87:
Reid Spencercd42c582006-12-05 23:29:42 +00003212#line 1064 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003213 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003214 break;
3215
Reid Spencera132e042006-12-03 05:46:11 +00003216 case 88:
Reid Spencercd42c582006-12-05 23:29:42 +00003217#line 1065 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003218 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003219 break;
3220
Reid Spencera132e042006-12-03 05:46:11 +00003221 case 89:
Reid Spencercd42c582006-12-05 23:29:42 +00003222#line 1066 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003223 { (yyval.UIntVal) = CallingConv::CSRet; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003224 break;
3225
Reid Spencera132e042006-12-03 05:46:11 +00003226 case 90:
Reid Spencercd42c582006-12-05 23:29:42 +00003227#line 1067 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003228 { (yyval.UIntVal) = CallingConv::Fast; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003229 break;
3230
Reid Spencera132e042006-12-03 05:46:11 +00003231 case 91:
Reid Spencercd42c582006-12-05 23:29:42 +00003232#line 1068 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003233 { (yyval.UIntVal) = CallingConv::Cold; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003234 break;
3235
Reid Spencera132e042006-12-03 05:46:11 +00003236 case 92:
Reid Spencercd42c582006-12-05 23:29:42 +00003237#line 1069 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003238 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3239 break;
3240
3241 case 93:
Reid Spencercd42c582006-12-05 23:29:42 +00003242#line 1070 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003243 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3244 break;
3245
3246 case 94:
Reid Spencercd42c582006-12-05 23:29:42 +00003247#line 1071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003248 {
3249 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003250 GEN_ERROR("Calling conv too large!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003251 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003252 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003253 ;}
3254 break;
3255
Reid Spencera132e042006-12-03 05:46:11 +00003256 case 95:
Reid Spencercd42c582006-12-05 23:29:42 +00003257#line 1080 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003258 { (yyval.UIntVal) = 0; ;}
3259 break;
3260
Reid Spencera132e042006-12-03 05:46:11 +00003261 case 96:
Reid Spencercd42c582006-12-05 23:29:42 +00003262#line 1081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003263 {
3264 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3265 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencer3ed469c2006-11-02 20:25:50 +00003266 GEN_ERROR("Alignment must be a power of two!");
3267 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003268;}
3269 break;
3270
Reid Spencera132e042006-12-03 05:46:11 +00003271 case 97:
Reid Spencercd42c582006-12-05 23:29:42 +00003272#line 1087 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003273 { (yyval.UIntVal) = 0; ;}
3274 break;
3275
3276 case 98:
Reid Spencercd42c582006-12-05 23:29:42 +00003277#line 1088 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003278 {
3279 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3280 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3281 GEN_ERROR("Alignment must be a power of two!");
3282 CHECK_FOR_ERROR
3283;}
3284 break;
3285
3286 case 99:
Reid Spencercd42c582006-12-05 23:29:42 +00003287#line 1096 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003288 {
3289 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3290 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
Reid Spencer61c83e02006-08-18 08:43:06 +00003291 GEN_ERROR("Invalid character in section name!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003292 (yyval.StrVal) = (yyvsp[0].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003293 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003294;}
3295 break;
3296
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003297 case 100:
Reid Spencercd42c582006-12-05 23:29:42 +00003298#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003299 { (yyval.StrVal) = 0; ;}
3300 break;
3301
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003302 case 101:
Reid Spencercd42c582006-12-05 23:29:42 +00003303#line 1105 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003304 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3305 break;
3306
Reid Spencera132e042006-12-03 05:46:11 +00003307 case 102:
Reid Spencercd42c582006-12-05 23:29:42 +00003308#line 1110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003309 {;}
3310 break;
3311
3312 case 103:
Reid Spencercd42c582006-12-05 23:29:42 +00003313#line 1111 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003314 {;}
3315 break;
3316
3317 case 104:
Reid Spencercd42c582006-12-05 23:29:42 +00003318#line 1112 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003319 {
3320 CurGV->setSection((yyvsp[0].StrVal));
3321 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003322 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003323 ;}
3324 break;
3325
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003326 case 105:
Reid Spencercd42c582006-12-05 23:29:42 +00003327#line 1117 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003328 {
3329 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003330 GEN_ERROR("Alignment must be a power of two!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003331 CurGV->setAlignment((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003332 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003333 ;}
3334 break;
3335
Reid Spencera132e042006-12-03 05:46:11 +00003336 case 107:
Reid Spencercd42c582006-12-05 23:29:42 +00003337#line 1131 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003338 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003339 break;
3340
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003341 case 109:
Reid Spencercd42c582006-12-05 23:29:42 +00003342#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003343 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
3344 break;
3345
3346 case 110:
Reid Spencercd42c582006-12-05 23:29:42 +00003347#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003348 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003349 if (!UpRefs.empty())
Reid Spencera132e042006-12-03 05:46:11 +00003350 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer3da59db2006-11-27 01:05:10 +00003351 (yyval.TypeVal) = (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003352 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003353 ;}
3354 break;
3355
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003356 case 124:
Reid Spencercd42c582006-12-05 23:29:42 +00003357#line 1146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003358 {
3359 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
3360 CHECK_FOR_ERROR
3361 ;}
3362 break;
3363
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003364 case 125:
Reid Spencercd42c582006-12-05 23:29:42 +00003365#line 1150 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003366 {
3367 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
3368 CHECK_FOR_ERROR
3369 ;}
3370 break;
3371
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003372 case 126:
Reid Spencercd42c582006-12-05 23:29:42 +00003373#line 1154 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003374 { // Named types are also simple types...
3375 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3376 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00003377 (yyval.TypeVal) = new PATypeHolder(tmp);
Reid Spencer3da59db2006-11-27 01:05:10 +00003378;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003379 break;
3380
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003381 case 127:
Reid Spencercd42c582006-12-05 23:29:42 +00003382#line 1162 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003383 { // Type UpReference
3384 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
3385 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3386 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
Reid Spencera132e042006-12-03 05:46:11 +00003387 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003388 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003389 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003390 ;}
3391 break;
3392
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003393 case 128:
Reid Spencercd42c582006-12-05 23:29:42 +00003394#line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003395 { // Function derived type?
3396 std::vector<const Type*> Params;
Reid Spencera132e042006-12-03 05:46:11 +00003397 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003398 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003399 Params.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003400 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3401 if (isVarArg) Params.pop_back();
3402
Reid Spencera132e042006-12-03 05:46:11 +00003403 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FunctionType::get(*(yyvsp[-3].TypeVal),Params,isVarArg)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003404 delete (yyvsp[-1].TypeList); // Delete the argument list
Reid Spencera132e042006-12-03 05:46:11 +00003405 delete (yyvsp[-3].TypeVal); // Delete the return type handle
Reid Spencer3da59db2006-11-27 01:05:10 +00003406 CHECK_FOR_ERROR
3407 ;}
3408 break;
3409
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003410 case 129:
Reid Spencercd42c582006-12-05 23:29:42 +00003411#line 1183 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003412 { // Sized array type?
Reid Spencera132e042006-12-03 05:46:11 +00003413 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3414 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003415 CHECK_FOR_ERROR
3416 ;}
3417 break;
3418
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003419 case 130:
Reid Spencercd42c582006-12-05 23:29:42 +00003420#line 1188 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003421 { // Packed array type?
Reid Spencera132e042006-12-03 05:46:11 +00003422 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3423 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3424 GEN_ERROR("Unsigned result not equal to signed result");
3425 if (!ElemTy->isPrimitiveType())
3426 GEN_ERROR("Elemental type of a PackedType must be primitive");
3427 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3428 GEN_ERROR("Vector length should be a power of 2!");
3429 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3430 delete (yyvsp[-1].TypeVal);
3431 CHECK_FOR_ERROR
Reid Spencer3da59db2006-11-27 01:05:10 +00003432 ;}
3433 break;
3434
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003435 case 131:
Reid Spencercd42c582006-12-05 23:29:42 +00003436#line 1200 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003437 { // Structure type?
3438 std::vector<const Type*> Elements;
Reid Spencera132e042006-12-03 05:46:11 +00003439 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003440 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003441 Elements.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003442
Reid Spencera132e042006-12-03 05:46:11 +00003443 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003444 delete (yyvsp[-1].TypeList);
3445 CHECK_FOR_ERROR
3446 ;}
3447 break;
3448
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003449 case 132:
Reid Spencercd42c582006-12-05 23:29:42 +00003450#line 1210 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003451 { // Empty structure type?
Reid Spencera132e042006-12-03 05:46:11 +00003452 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer3da59db2006-11-27 01:05:10 +00003453 CHECK_FOR_ERROR
3454 ;}
3455 break;
3456
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003457 case 133:
Reid Spencercd42c582006-12-05 23:29:42 +00003458#line 1214 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003459 { // Pointer type?
Reid Spencera132e042006-12-03 05:46:11 +00003460 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Reid Spencer3da59db2006-11-27 01:05:10 +00003461 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencera132e042006-12-03 05:46:11 +00003462 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3463 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003464 CHECK_FOR_ERROR
3465 ;}
3466 break;
3467
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003468 case 134:
Reid Spencercd42c582006-12-05 23:29:42 +00003469#line 1225 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003470 {
Reid Spencera132e042006-12-03 05:46:11 +00003471 (yyval.TypeList) = new std::list<PATypeHolder>();
3472 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003473 CHECK_FOR_ERROR
3474 ;}
3475 break;
3476
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003477 case 135:
Reid Spencercd42c582006-12-05 23:29:42 +00003478#line 1230 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003479 {
Reid Spencera132e042006-12-03 05:46:11 +00003480 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003481 CHECK_FOR_ERROR
3482 ;}
3483 break;
3484
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003485 case 137:
Reid Spencercd42c582006-12-05 23:29:42 +00003486#line 1237 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003487 {
Reid Spencera132e042006-12-03 05:46:11 +00003488 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003489 CHECK_FOR_ERROR
3490 ;}
3491 break;
3492
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003493 case 138:
Reid Spencercd42c582006-12-05 23:29:42 +00003494#line 1241 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003495 {
Reid Spencera132e042006-12-03 05:46:11 +00003496 ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003497 CHECK_FOR_ERROR
3498 ;}
3499 break;
3500
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003501 case 139:
Reid Spencercd42c582006-12-05 23:29:42 +00003502#line 1245 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003503 {
Reid Spencera132e042006-12-03 05:46:11 +00003504 (yyval.TypeList) = new std::list<PATypeHolder>();
Reid Spencer3da59db2006-11-27 01:05:10 +00003505 CHECK_FOR_ERROR
3506 ;}
3507 break;
3508
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003509 case 140:
Reid Spencercd42c582006-12-05 23:29:42 +00003510#line 1256 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003511 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003512 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003513 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003514 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003515 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003516 const Type *ETy = ATy->getElementType();
3517 int NumElements = ATy->getNumElements();
3518
3519 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003520 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003521 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003522 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003523 itostr(NumElements) + "!");
3524
3525 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003526 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003527 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003528 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003529 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003530 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003531 }
3532
Reid Spencera132e042006-12-03 05:46:11 +00003533 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3534 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003535 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003536 ;}
3537 break;
3538
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003539 case 141:
Reid Spencercd42c582006-12-05 23:29:42 +00003540#line 1282 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003541 {
Reid Spencera132e042006-12-03 05:46:11 +00003542 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003543 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003544 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003545 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003546
3547 int NumElements = ATy->getNumElements();
3548 if (NumElements != -1 && NumElements != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003549 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencer68a24bd2005-08-27 18:50:39 +00003550 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencera132e042006-12-03 05:46:11 +00003551 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3552 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003553 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003554 ;}
3555 break;
3556
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003557 case 142:
Reid Spencercd42c582006-12-05 23:29:42 +00003558#line 1296 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003559 {
Reid Spencera132e042006-12-03 05:46:11 +00003560 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003561 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003562 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003563 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003564
3565 int NumElements = ATy->getNumElements();
3566 const Type *ETy = ATy->getElementType();
Reid Spencer3822ff52006-11-08 06:47:33 +00003567 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3568 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003569 GEN_ERROR("Can't build string constant of size " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003570 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003571 " when array has size " + itostr(NumElements) + "!");
3572 std::vector<Constant*> Vals;
3573 if (ETy == Type::SByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003574 for (signed char *C = (signed char *)(yyvsp[0].StrVal); C != (signed char *)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003575 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003576 } else if (ETy == Type::UByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003577 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00003578 C != (unsigned char*)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003579 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003580 } else {
Reid Spencer3822ff52006-11-08 06:47:33 +00003581 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003582 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003583 }
Reid Spencer3822ff52006-11-08 06:47:33 +00003584 free((yyvsp[0].StrVal));
Reid Spencera132e042006-12-03 05:46:11 +00003585 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3586 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003587 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003588 ;}
3589 break;
3590
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003591 case 143:
Reid Spencercd42c582006-12-05 23:29:42 +00003592#line 1326 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003593 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003594 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003595 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003596 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003597 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003598 const Type *ETy = PTy->getElementType();
3599 int NumElements = PTy->getNumElements();
3600
3601 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003602 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003603 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003604 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003605 itostr(NumElements) + "!");
3606
3607 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003608 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003609 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003610 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003611 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003612 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003613 }
3614
Reid Spencera132e042006-12-03 05:46:11 +00003615 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3616 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003617 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003618 ;}
3619 break;
3620
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003621 case 144:
Reid Spencercd42c582006-12-05 23:29:42 +00003622#line 1352 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003623 {
Reid Spencera132e042006-12-03 05:46:11 +00003624 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Reid Spencer61c83e02006-08-18 08:43:06 +00003625 if (STy == 0)
3626 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003627 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003628
Reid Spencer3822ff52006-11-08 06:47:33 +00003629 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencer61c83e02006-08-18 08:43:06 +00003630 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003631
3632 // Check to ensure that constants are compatible with the type initializer!
Reid Spencer3822ff52006-11-08 06:47:33 +00003633 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
Reid Spencera132e042006-12-03 05:46:11 +00003634 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer61c83e02006-08-18 08:43:06 +00003635 GEN_ERROR("Expected type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003636 STy->getElementType(i)->getDescription() +
3637 "' for element #" + utostr(i) +
3638 " of structure initializer!");
3639
Reid Spencera132e042006-12-03 05:46:11 +00003640 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3641 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003642 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003643 ;}
3644 break;
3645
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003646 case 145:
Reid Spencercd42c582006-12-05 23:29:42 +00003647#line 1373 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003648 {
Reid Spencera132e042006-12-03 05:46:11 +00003649 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003650 if (STy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003651 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003652 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003653
3654 if (STy->getNumContainedTypes() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003655 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003656
Reid Spencera132e042006-12-03 05:46:11 +00003657 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3658 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003659 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003660 ;}
3661 break;
3662
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003663 case 146:
Reid Spencercd42c582006-12-05 23:29:42 +00003664#line 1386 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003665 {
Reid Spencera132e042006-12-03 05:46:11 +00003666 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003667 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003668 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003669 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003670
Reid Spencera132e042006-12-03 05:46:11 +00003671 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3672 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003673 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003674 ;}
3675 break;
3676
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003677 case 147:
Reid Spencercd42c582006-12-05 23:29:42 +00003678#line 1396 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003679 {
Reid Spencera132e042006-12-03 05:46:11 +00003680 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3681 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003682 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003683 ;}
3684 break;
3685
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003686 case 148:
Reid Spencercd42c582006-12-05 23:29:42 +00003687#line 1401 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003688 {
Reid Spencera132e042006-12-03 05:46:11 +00003689 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003690 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003691 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003692
3693 // ConstExprs can exist in the body of a function, thus creating
3694 // GlobalValues whenever they refer to a variable. Because we are in
3695 // the context of a function, getValNonImprovising will search the functions
3696 // symbol table instead of the module symbol table for the global symbol,
3697 // which throws things all off. To get around this, we just tell
3698 // getValNonImprovising that we are at global scope here.
3699 //
3700 Function *SavedCurFn = CurFun.CurrentFunction;
3701 CurFun.CurrentFunction = 0;
3702
Reid Spencer3822ff52006-11-08 06:47:33 +00003703 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003704 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003705
3706 CurFun.CurrentFunction = SavedCurFn;
3707
3708 // If this is an initializer for a constant pointer, which is referencing a
3709 // (currently) undefined variable, create a stub now that shall be replaced
3710 // in the future with the right type of variable.
3711 //
3712 if (V == 0) {
3713 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3714 const PointerType *PT = cast<PointerType>(Ty);
3715
3716 // First check to see if the forward references value is already created!
3717 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencer3822ff52006-11-08 06:47:33 +00003718 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003719
3720 if (I != CurModule.GlobalRefs.end()) {
3721 V = I->second; // Placeholder already exists, use it...
Reid Spencer3822ff52006-11-08 06:47:33 +00003722 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003723 } else {
3724 std::string Name;
Reid Spencer3822ff52006-11-08 06:47:33 +00003725 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003726
3727 // Create the forward referenced global.
3728 GlobalValue *GV;
3729 if (const FunctionType *FTy =
3730 dyn_cast<FunctionType>(PT->getElementType())) {
3731 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3732 CurModule.CurrentModule);
3733 } else {
3734 GV = new GlobalVariable(PT->getElementType(), false,
3735 GlobalValue::ExternalLinkage, 0,
3736 Name, CurModule.CurrentModule);
3737 }
3738
3739 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencer3822ff52006-11-08 06:47:33 +00003740 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003741 V = GV;
3742 }
3743 }
3744
Reid Spencera132e042006-12-03 05:46:11 +00003745 (yyval.ConstVal) = cast<GlobalValue>(V);
3746 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003747 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003748 ;}
3749 break;
3750
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003751 case 149:
Reid Spencercd42c582006-12-05 23:29:42 +00003752#line 1462 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003753 {
Reid Spencera132e042006-12-03 05:46:11 +00003754 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003755 GEN_ERROR("Mismatched types for constant expression!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003756 (yyval.ConstVal) = (yyvsp[0].ConstVal);
Reid Spencera132e042006-12-03 05:46:11 +00003757 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003758 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003759 ;}
3760 break;
3761
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003762 case 150:
Reid Spencercd42c582006-12-05 23:29:42 +00003763#line 1469 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003764 {
Reid Spencera132e042006-12-03 05:46:11 +00003765 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003766 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencer61c83e02006-08-18 08:43:06 +00003767 GEN_ERROR("Cannot create a null initialized value of this type!");
Reid Spencera132e042006-12-03 05:46:11 +00003768 (yyval.ConstVal) = Constant::getNullValue(Ty);
3769 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003770 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003771 ;}
3772 break;
3773
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003774 case 151:
Reid Spencercd42c582006-12-05 23:29:42 +00003775#line 1477 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003776 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003777 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003778 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003779 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003780 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003781 ;}
3782 break;
3783
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003784 case 152:
Reid Spencercd42c582006-12-05 23:29:42 +00003785#line 1483 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003786 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003787 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003788 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003789 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003790 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003791 ;}
3792 break;
3793
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003794 case 153:
Reid Spencercd42c582006-12-05 23:29:42 +00003795#line 1489 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003796 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003797 (yyval.ConstVal) = ConstantBool::getTrue();
Reid Spencer61c83e02006-08-18 08:43:06 +00003798 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003799 ;}
3800 break;
3801
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003802 case 154:
Reid Spencercd42c582006-12-05 23:29:42 +00003803#line 1493 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003804 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003805 (yyval.ConstVal) = ConstantBool::getFalse();
Reid Spencer61c83e02006-08-18 08:43:06 +00003806 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003807 ;}
3808 break;
3809
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003810 case 155:
Reid Spencercd42c582006-12-05 23:29:42 +00003811#line 1497 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003812 { // Float & Double constants
Reid Spencera132e042006-12-03 05:46:11 +00003813 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003814 GEN_ERROR("Floating point constant invalid for type!!");
Reid Spencera132e042006-12-03 05:46:11 +00003815 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003816 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003817 ;}
3818 break;
3819
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003820 case 156:
Reid Spencercd42c582006-12-05 23:29:42 +00003821#line 1505 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003822 {
Reid Spencera132e042006-12-03 05:46:11 +00003823 Constant *Val = (yyvsp[-3].ConstVal);
3824 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00003825 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003826 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003827 Val->getType()->getDescription() + "'!");
3828 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003829 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003830 Ty->getDescription() + "'!");
Reid Spencera132e042006-12-03 05:46:11 +00003831 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
3832 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00003833 ;}
3834 break;
3835
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003836 case 157:
Reid Spencercd42c582006-12-05 23:29:42 +00003837#line 1517 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003838 {
Reid Spencera132e042006-12-03 05:46:11 +00003839 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00003840 GEN_ERROR("GetElementPtr requires a pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003841
Reid Spencera132e042006-12-03 05:46:11 +00003842 const Type *IdxTy =
3843 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
3844 if (!IdxTy)
3845 GEN_ERROR("Index list invalid for constant getelementptr!");
3846
3847 std::vector<Constant*> IdxVec;
3848 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
3849 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Reid Spencer68a24bd2005-08-27 18:50:39 +00003850 IdxVec.push_back(C);
3851 else
Reid Spencer61c83e02006-08-18 08:43:06 +00003852 GEN_ERROR("Indices to constant getelementptr must be constants!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003853
Reid Spencer3822ff52006-11-08 06:47:33 +00003854 delete (yyvsp[-1].ValueList);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003855
Reid Spencera132e042006-12-03 05:46:11 +00003856 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
Reid Spencer61c83e02006-08-18 08:43:06 +00003857 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003858 ;}
3859 break;
3860
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003861 case 158:
Reid Spencercd42c582006-12-05 23:29:42 +00003862#line 1538 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003863 {
Reid Spencera132e042006-12-03 05:46:11 +00003864 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00003865 GEN_ERROR("Select condition must be of boolean type!");
Reid Spencera132e042006-12-03 05:46:11 +00003866 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003867 GEN_ERROR("Select operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00003868 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003869 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003870 ;}
3871 break;
3872
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003873 case 159:
Reid Spencercd42c582006-12-05 23:29:42 +00003874#line 1546 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003875 {
Reid Spencera132e042006-12-03 05:46:11 +00003876 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003877 GEN_ERROR("Binary operator types must match!");
Reid Spencer1628cec2006-10-26 06:15:43 +00003878 CHECK_FOR_ERROR;
Reid Spencer9eef56f2006-12-05 19:16:11 +00003879 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00003880 ;}
3881 break;
3882
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003883 case 160:
Reid Spencercd42c582006-12-05 23:29:42 +00003884#line 1552 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003885 {
Reid Spencera132e042006-12-03 05:46:11 +00003886 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003887 GEN_ERROR("Logical operator types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00003888 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
3889 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
3890 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00003891 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00003892 }
Reid Spencera132e042006-12-03 05:46:11 +00003893 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003894 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003895 ;}
3896 break;
3897
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003898 case 161:
Reid Spencercd42c582006-12-05 23:29:42 +00003899#line 1563 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003900 {
Reid Spencera132e042006-12-03 05:46:11 +00003901 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer1628cec2006-10-26 06:15:43 +00003902 GEN_ERROR("setcc operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00003903 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00003904 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003905 ;}
3906 break;
3907
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003908 case 162:
Reid Spencercd42c582006-12-05 23:29:42 +00003909#line 1569 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003910 {
Reid Spencera132e042006-12-03 05:46:11 +00003911 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
3912 GEN_ERROR("icmp operand types must match!");
3913 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
3914 ;}
3915 break;
3916
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003917 case 163:
Reid Spencercd42c582006-12-05 23:29:42 +00003918#line 1574 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003919 {
3920 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
3921 GEN_ERROR("fcmp operand types must match!");
3922 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
3923 ;}
3924 break;
3925
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003926 case 164:
Reid Spencercd42c582006-12-05 23:29:42 +00003927#line 1579 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003928 {
3929 if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
Reid Spencer1628cec2006-10-26 06:15:43 +00003930 GEN_ERROR("Shift count for shift constant must be unsigned byte!");
Reid Spencera132e042006-12-03 05:46:11 +00003931 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
Reid Spencer1628cec2006-10-26 06:15:43 +00003932 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003933 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00003934 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00003935 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003936 ;}
3937 break;
3938
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003939 case 165:
Reid Spencercd42c582006-12-05 23:29:42 +00003940#line 1588 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003941 {
Reid Spencera132e042006-12-03 05:46:11 +00003942 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003943 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00003944 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003945 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003946 ;}
3947 break;
3948
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003949 case 166:
Reid Spencercd42c582006-12-05 23:29:42 +00003950#line 1594 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003951 {
Reid Spencera132e042006-12-03 05:46:11 +00003952 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003953 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00003954 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003955 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003956 ;}
3957 break;
3958
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003959 case 167:
Reid Spencercd42c582006-12-05 23:29:42 +00003960#line 1600 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003961 {
Reid Spencera132e042006-12-03 05:46:11 +00003962 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003963 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00003964 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003965 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003966 ;}
3967 break;
3968
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003969 case 168:
Reid Spencercd42c582006-12-05 23:29:42 +00003970#line 1609 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003971 {
3972 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003973 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003974 ;}
3975 break;
3976
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003977 case 169:
Reid Spencercd42c582006-12-05 23:29:42 +00003978#line 1613 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003979 {
Reid Spencera132e042006-12-03 05:46:11 +00003980 (yyval.ConstVector) = new std::vector<Constant*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00003981 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003982 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003983 ;}
3984 break;
3985
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003986 case 170:
Reid Spencercd42c582006-12-05 23:29:42 +00003987#line 1621 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003988 { (yyval.BoolVal) = false; ;}
3989 break;
3990
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003991 case 171:
Reid Spencercd42c582006-12-05 23:29:42 +00003992#line 1621 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003993 { (yyval.BoolVal) = true; ;}
3994 break;
3995
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003996 case 172:
Reid Spencercd42c582006-12-05 23:29:42 +00003997#line 1631 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003998 {
3999 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004000 CurModule.ModuleDone();
Reid Spencerf63697d2006-10-09 17:36:59 +00004001 CHECK_FOR_ERROR;
Reid Spencer3822ff52006-11-08 06:47:33 +00004002;}
4003 break;
4004
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004005 case 173:
Reid Spencercd42c582006-12-05 23:29:42 +00004006#line 1639 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004007 {
4008 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004009 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004010 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004011 ;}
4012 break;
4013
Reid Spencera132e042006-12-03 05:46:11 +00004014 case 174:
Reid Spencercd42c582006-12-05 23:29:42 +00004015#line 1644 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004016 {
4017 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer3ed469c2006-11-02 20:25:50 +00004018 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004019 ;}
4020 break;
4021
Reid Spencera132e042006-12-03 05:46:11 +00004022 case 175:
Reid Spencercd42c582006-12-05 23:29:42 +00004023#line 1648 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004024 {
4025 (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
4026 CHECK_FOR_ERROR
4027 ;}
4028 break;
4029
4030 case 176:
Reid Spencercd42c582006-12-05 23:29:42 +00004031#line 1652 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004032 {
4033 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
4034 CHECK_FOR_ERROR
4035 ;}
4036 break;
4037
4038 case 177:
Reid Spencercd42c582006-12-05 23:29:42 +00004039#line 1656 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004040 {
4041 (yyval.ModuleVal) = CurModule.CurrentModule;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004042 // Emit an error if there are any unresolved types left.
4043 if (!CurModule.LateResolveTypes.empty()) {
4044 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004045 if (DID.Type == ValID::NameVal) {
4046 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4047 } else {
4048 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4049 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004050 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004051 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004052 ;}
4053 break;
4054
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004055 case 178:
Reid Spencercd42c582006-12-05 23:29:42 +00004056#line 1671 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004057 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004058 // Eagerly resolve types. This is not an optimization, this is a
4059 // requirement that is due to the fact that we could have this:
4060 //
4061 // %list = type { %list * }
4062 // %list = type { %list * } ; repeated type decl
4063 //
4064 // If types are not resolved eagerly, then the two types will not be
4065 // determined to be the same type!
4066 //
Reid Spencera132e042006-12-03 05:46:11 +00004067 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004068
Reid Spencera132e042006-12-03 05:46:11 +00004069 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004070 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004071 // If this is a named type that is not a redefinition, add it to the slot
4072 // table.
Reid Spencera132e042006-12-03 05:46:11 +00004073 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004074 }
Reid Spencera132e042006-12-03 05:46:11 +00004075
4076 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004077 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004078 ;}
4079 break;
4080
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004081 case 179:
Reid Spencercd42c582006-12-05 23:29:42 +00004082#line 1693 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004083 { // Function prototypes can be in const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004084 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004085 ;}
4086 break;
4087
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004088 case 180:
Reid Spencercd42c582006-12-05 23:29:42 +00004089#line 1696 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004090 { // Asm blocks can be in the const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004091 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004092 ;}
4093 break;
4094
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004095 case 181:
Reid Spencercd42c582006-12-05 23:29:42 +00004096#line 1699 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004097 {
Reid Spencera132e042006-12-03 05:46:11 +00004098 if ((yyvsp[0].ConstVal) == 0)
Reid Spencer5b7e7532006-09-28 19:28:24 +00004099 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencera132e042006-12-03 05:46:11 +00004100 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), (yyvsp[-2].Linkage), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004101 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004102 ;}
4103 break;
4104
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004105 case 182:
Reid Spencercd42c582006-12-05 23:29:42 +00004106#line 1704 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004107 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004108 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004109 ;}
4110 break;
4111
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004112 case 183:
Reid Spencercd42c582006-12-05 23:29:42 +00004113#line 1707 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004114 {
Reid Spencera132e042006-12-03 05:46:11 +00004115 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004116 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004117 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004118 ;}
4119 break;
4120
Reid Spencera132e042006-12-03 05:46:11 +00004121 case 184:
Reid Spencercd42c582006-12-05 23:29:42 +00004122#line 1711 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004123 {
Reid Spencer3ed469c2006-11-02 20:25:50 +00004124 CurGV = 0;
4125 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004126 ;}
4127 break;
4128
Reid Spencera132e042006-12-03 05:46:11 +00004129 case 185:
Reid Spencercd42c582006-12-05 23:29:42 +00004130#line 1715 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004131 {
4132 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
4133 CHECK_FOR_ERROR
4134 delete (yyvsp[0].TypeVal);
4135 ;}
4136 break;
4137
4138 case 186:
Reid Spencercd42c582006-12-05 23:29:42 +00004139#line 1719 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004140 {
4141 CurGV = 0;
4142 CHECK_FOR_ERROR
4143 ;}
4144 break;
4145
4146 case 187:
Reid Spencercd42c582006-12-05 23:29:42 +00004147#line 1723 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004148 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004149 CurGV =
Reid Spencera132e042006-12-03 05:46:11 +00004150 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004151 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004152 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004153 ;}
4154 break;
4155
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004156 case 188:
Reid Spencercd42c582006-12-05 23:29:42 +00004157#line 1728 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004158 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004159 CurGV = 0;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004160 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004161 ;}
4162 break;
4163
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004164 case 189:
Reid Spencercd42c582006-12-05 23:29:42 +00004165#line 1732 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004166 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004167 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004168 ;}
4169 break;
4170
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004171 case 190:
Reid Spencercd42c582006-12-05 23:29:42 +00004172#line 1735 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004173 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004174 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004175 ;}
4176 break;
4177
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004178 case 191:
Reid Spencercd42c582006-12-05 23:29:42 +00004179#line 1738 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004180 {
4181 ;}
4182 break;
4183
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004184 case 192:
Reid Spencercd42c582006-12-05 23:29:42 +00004185#line 1742 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004186 {
Chris Lattner66316012006-01-24 04:14:29 +00004187 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencer3822ff52006-11-08 06:47:33 +00004188 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4189 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4190 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004191
4192 if (AsmSoFar.empty())
4193 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4194 else
4195 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004196 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004197;}
4198 break;
4199
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004200 case 193:
Reid Spencercd42c582006-12-05 23:29:42 +00004201#line 1755 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004202 { (yyval.Endianness) = Module::BigEndian; ;}
4203 break;
4204
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004205 case 194:
Reid Spencercd42c582006-12-05 23:29:42 +00004206#line 1756 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004207 { (yyval.Endianness) = Module::LittleEndian; ;}
4208 break;
4209
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004210 case 195:
Reid Spencercd42c582006-12-05 23:29:42 +00004211#line 1758 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004212 {
4213 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
Reid Spencer61c83e02006-08-18 08:43:06 +00004214 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004215 ;}
4216 break;
4217
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004218 case 196:
Reid Spencercd42c582006-12-05 23:29:42 +00004219#line 1762 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004220 {
4221 if ((yyvsp[0].UInt64Val) == 32)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004222 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
Reid Spencer3822ff52006-11-08 06:47:33 +00004223 else if ((yyvsp[0].UInt64Val) == 64)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004224 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4225 else
Reid Spencer3822ff52006-11-08 06:47:33 +00004226 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00004227 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004228 ;}
4229 break;
4230
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004231 case 197:
Reid Spencercd42c582006-12-05 23:29:42 +00004232#line 1771 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004233 {
4234 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4235 free((yyvsp[0].StrVal));
4236 ;}
4237 break;
4238
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004239 case 198:
Reid Spencercd42c582006-12-05 23:29:42 +00004240#line 1775 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004241 {
4242 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4243 free((yyvsp[0].StrVal));
4244 ;}
4245 break;
4246
Reid Spencera132e042006-12-03 05:46:11 +00004247 case 200:
Reid Spencercd42c582006-12-05 23:29:42 +00004248#line 1782 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004249 {
4250 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4251 free((yyvsp[0].StrVal));
4252 CHECK_FOR_ERROR
4253 ;}
4254 break;
4255
4256 case 201:
Reid Spencercd42c582006-12-05 23:29:42 +00004257#line 1787 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004258 {
4259 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4260 free((yyvsp[0].StrVal));
4261 CHECK_FOR_ERROR
4262 ;}
4263 break;
4264
4265 case 202:
Reid Spencercd42c582006-12-05 23:29:42 +00004266#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004267 {
Reid Spencer61c83e02006-08-18 08:43:06 +00004268 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004269 ;}
4270 break;
4271
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004272 case 206:
Reid Spencercd42c582006-12-05 23:29:42 +00004273#line 1802 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004274 { (yyval.StrVal) = 0; ;}
4275 break;
4276
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004277 case 207:
Reid Spencercd42c582006-12-05 23:29:42 +00004278#line 1804 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004279 {
Reid Spencera132e042006-12-03 05:46:11 +00004280 if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004281 GEN_ERROR("void typed arguments are invalid!");
Reid Spencera132e042006-12-03 05:46:11 +00004282 (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004283 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004284;}
4285 break;
4286
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004287 case 208:
Reid Spencercd42c582006-12-05 23:29:42 +00004288#line 1811 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004289 {
4290 (yyval.ArgList) = (yyvsp[-2].ArgList);
4291 (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
4292 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004293 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004294 ;}
4295 break;
4296
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004297 case 209:
Reid Spencercd42c582006-12-05 23:29:42 +00004298#line 1817 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004299 {
Reid Spencera132e042006-12-03 05:46:11 +00004300 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
Reid Spencer3822ff52006-11-08 06:47:33 +00004301 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4302 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004303 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004304 ;}
4305 break;
4306
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004307 case 210:
Reid Spencercd42c582006-12-05 23:29:42 +00004308#line 1824 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004309 {
4310 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004311 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004312 ;}
4313 break;
4314
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004315 case 211:
Reid Spencercd42c582006-12-05 23:29:42 +00004316#line 1828 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004317 {
4318 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencera132e042006-12-03 05:46:11 +00004319 (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
4320 char*>(new PATypeHolder(Type::VoidTy), 0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004321 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004322 ;}
4323 break;
4324
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004325 case 212:
Reid Spencercd42c582006-12-05 23:29:42 +00004326#line 1834 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004327 {
Reid Spencera132e042006-12-03 05:46:11 +00004328 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
4329 (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004330 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004331 ;}
4332 break;
4333
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004334 case 213:
Reid Spencercd42c582006-12-05 23:29:42 +00004335#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004336 {
4337 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004338 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004339 ;}
4340 break;
4341
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004342 case 214:
Reid Spencercd42c582006-12-05 23:29:42 +00004343#line 1845 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004344 {
4345 UnEscapeLexed((yyvsp[-5].StrVal));
4346 std::string FunctionName((yyvsp[-5].StrVal));
4347 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004348
Reid Spencera132e042006-12-03 05:46:11 +00004349 if (!(*(yyvsp[-6].TypeVal))->isFirstClassType() && *(yyvsp[-6].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004350 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004351
4352 std::vector<const Type*> ParamTypeList;
Reid Spencer3822ff52006-11-08 06:47:33 +00004353 if ((yyvsp[-3].ArgList)) { // If there are arguments...
Reid Spencera132e042006-12-03 05:46:11 +00004354 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004355 I != (yyvsp[-3].ArgList)->end(); ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004356 ParamTypeList.push_back(I->first->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004357 }
4358
4359 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4360 if (isVarArg) ParamTypeList.pop_back();
4361
Reid Spencera132e042006-12-03 05:46:11 +00004362 const FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeVal), ParamTypeList, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004363 const PointerType *PFT = PointerType::get(FT);
Reid Spencera132e042006-12-03 05:46:11 +00004364 delete (yyvsp[-6].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004365
4366 ValID ID;
4367 if (!FunctionName.empty()) {
4368 ID = ValID::create((char*)FunctionName.c_str());
4369 } else {
4370 ID = ValID::create((int)CurModule.Values[PFT].size());
4371 }
4372
4373 Function *Fn = 0;
4374 // See if this function was forward referenced. If so, recycle the object.
4375 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4376 // Move the function to the end of the list, from whereever it was
4377 // previously inserted.
4378 Fn = cast<Function>(FWRef);
4379 CurModule.CurrentModule->getFunctionList().remove(Fn);
4380 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4381 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4382 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4383 // If this is the case, either we need to be a forward decl, or it needs
4384 // to be.
4385 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004386 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004387
4388 // Make sure to strip off any argument names so we can't get conflicts.
4389 if (Fn->isExternal())
4390 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4391 AI != AE; ++AI)
4392 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004393 } else { // Not already defined?
4394 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4395 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004396
Reid Spencer68a24bd2005-08-27 18:50:39 +00004397 InsertValue(Fn, CurModule.Values);
4398 }
4399
4400 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004401
4402 if (CurFun.isDeclare) {
4403 // If we have declaration, always overwrite linkage. This will allow us to
4404 // correctly handle cases, when pointer to function is passed as argument to
4405 // another function.
4406 Fn->setLinkage(CurFun.Linkage);
4407 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004408 Fn->setCallingConv((yyvsp[-7].UIntVal));
4409 Fn->setAlignment((yyvsp[0].UIntVal));
4410 if ((yyvsp[-1].StrVal)) {
4411 Fn->setSection((yyvsp[-1].StrVal));
4412 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004413 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004414
4415 // Add all of the arguments we parsed to the function...
Reid Spencer3822ff52006-11-08 06:47:33 +00004416 if ((yyvsp[-3].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004417 if (isVarArg) { // Nuke the last entry
Reid Spencera132e042006-12-03 05:46:11 +00004418 assert((yyvsp[-3].ArgList)->back().first->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().second == 0&&
4419 "Not a varargs marker!");
4420 delete (yyvsp[-3].ArgList)->back().first;
Reid Spencer3822ff52006-11-08 06:47:33 +00004421 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004422 }
4423 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencera132e042006-12-03 05:46:11 +00004424 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004425 I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencera132e042006-12-03 05:46:11 +00004426 delete I->first; // Delete the typeholder...
4427
Reid Spencer68a24bd2005-08-27 18:50:39 +00004428 setValueName(ArgIt, I->second); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004429 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004430 InsertValue(ArgIt);
4431 }
Reid Spencera132e042006-12-03 05:46:11 +00004432
Reid Spencer3822ff52006-11-08 06:47:33 +00004433 delete (yyvsp[-3].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004434 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004435 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004436;}
4437 break;
4438
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004439 case 217:
Reid Spencercd42c582006-12-05 23:29:42 +00004440#line 1941 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004441 {
4442 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004443
4444 // Make sure that we keep track of the linkage type even if there was a
4445 // previous "declare".
Reid Spencer3822ff52006-11-08 06:47:33 +00004446 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
4447;}
4448 break;
4449
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004450 case 220:
Reid Spencercd42c582006-12-05 23:29:42 +00004451#line 1951 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004452 {
4453 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004454 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004455;}
4456 break;
4457
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004458 case 222:
Reid Spencercd42c582006-12-05 23:29:42 +00004459#line 1957 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004460 { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
4461 break;
4462
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004463 case 223:
Reid Spencercd42c582006-12-05 23:29:42 +00004464#line 1958 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer481169e2006-12-01 00:33:46 +00004465 { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004466 break;
4467
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004468 case 224:
Reid Spencercd42c582006-12-05 23:29:42 +00004469#line 1960 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004470 { CurFun.isDeclare = true; ;}
4471 break;
4472
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004473 case 225:
Reid Spencercd42c582006-12-05 23:29:42 +00004474#line 1960 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004475 {
4476 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004477 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004478 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004479 ;}
4480 break;
4481
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004482 case 226:
Reid Spencercd42c582006-12-05 23:29:42 +00004483#line 1970 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004484 {
4485 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004486 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004487 ;}
4488 break;
4489
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004490 case 227:
Reid Spencercd42c582006-12-05 23:29:42 +00004491#line 1974 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004492 {
4493 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004494 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004495 ;}
4496 break;
4497
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004498 case 228:
Reid Spencercd42c582006-12-05 23:29:42 +00004499#line 1979 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004500 { // A reference to a direct constant
4501 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004502 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004503 ;}
4504 break;
4505
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004506 case 229:
Reid Spencercd42c582006-12-05 23:29:42 +00004507#line 1983 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004508 {
4509 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004510 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004511 ;}
4512 break;
4513
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004514 case 230:
Reid Spencercd42c582006-12-05 23:29:42 +00004515#line 1987 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004516 { // Perhaps it's an FP constant?
4517 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004518 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004519 ;}
4520 break;
4521
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004522 case 231:
Reid Spencercd42c582006-12-05 23:29:42 +00004523#line 1991 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004524 {
4525 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
Reid Spencer61c83e02006-08-18 08:43:06 +00004526 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004527 ;}
4528 break;
4529
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004530 case 232:
Reid Spencercd42c582006-12-05 23:29:42 +00004531#line 1995 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004532 {
4533 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
Reid Spencer61c83e02006-08-18 08:43:06 +00004534 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004535 ;}
4536 break;
4537
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004538 case 233:
Reid Spencercd42c582006-12-05 23:29:42 +00004539#line 1999 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004540 {
4541 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004542 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004543 ;}
4544 break;
4545
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004546 case 234:
Reid Spencercd42c582006-12-05 23:29:42 +00004547#line 2003 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004548 {
4549 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004550 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004551 ;}
4552 break;
4553
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004554 case 235:
Reid Spencercd42c582006-12-05 23:29:42 +00004555#line 2007 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004556 { // A vector zero constant.
4557 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004558 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004559 ;}
4560 break;
4561
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004562 case 236:
Reid Spencercd42c582006-12-05 23:29:42 +00004563#line 2011 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004564 { // Nonempty unsized packed vector
Reid Spencera132e042006-12-03 05:46:11 +00004565 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
Reid Spencer3822ff52006-11-08 06:47:33 +00004566 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004567
4568 PackedType* pt = PackedType::get(ETy, NumElements);
4569 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004570 HandleUpRefs(
4571 PackedType::get(
4572 ETy,
4573 NumElements)
4574 )
4575 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004576
4577 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00004578 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00004579 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004580 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004581 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004582 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004583 }
4584
Reid Spencera132e042006-12-03 05:46:11 +00004585 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
Reid Spencer3822ff52006-11-08 06:47:33 +00004586 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00004587 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004588 ;}
4589 break;
Reid Spencer21be8652006-10-22 07:03:43 +00004590
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004591 case 237:
Reid Spencercd42c582006-12-05 23:29:42 +00004592#line 2036 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004593 {
Reid Spencera132e042006-12-03 05:46:11 +00004594 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004595 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004596 ;}
4597 break;
4598
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004599 case 238:
Reid Spencercd42c582006-12-05 23:29:42 +00004600#line 2040 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004601 {
4602 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4603 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4604 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4605 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4606 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4607 free((yyvsp[-2].StrVal));
4608 free((yyvsp[0].StrVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004609 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004610 ;}
4611 break;
4612
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004613 case 239:
Reid Spencercd42c582006-12-05 23:29:42 +00004614#line 2054 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004615 { // Is it an integer reference...?
4616 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4617 CHECK_FOR_ERROR
4618 ;}
4619 break;
4620
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004621 case 240:
Reid Spencercd42c582006-12-05 23:29:42 +00004622#line 2058 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004623 { // Is it a named reference...?
4624 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4625 CHECK_FOR_ERROR
4626 ;}
4627 break;
4628
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004629 case 243:
Reid Spencercd42c582006-12-05 23:29:42 +00004630#line 2070 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004631 {
Reid Spencera132e042006-12-03 05:46:11 +00004632 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004633 CHECK_FOR_ERROR
4634 ;}
4635 break;
4636
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004637 case 244:
Reid Spencercd42c582006-12-05 23:29:42 +00004638#line 2075 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004639 {
4640 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4641 CHECK_FOR_ERROR
4642 ;}
4643 break;
4644
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004645 case 245:
Reid Spencercd42c582006-12-05 23:29:42 +00004646#line 2079 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004647 { // Do not allow functions with 0 basic blocks
4648 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4649 CHECK_FOR_ERROR
4650 ;}
4651 break;
4652
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004653 case 246:
Reid Spencercd42c582006-12-05 23:29:42 +00004654#line 2088 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004655 {
4656 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4657 CHECK_FOR_ERROR
4658 InsertValue((yyvsp[0].TermInstVal));
4659
4660 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4661 InsertValue((yyvsp[-2].BasicBlockVal));
4662 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
4663 CHECK_FOR_ERROR
4664 ;}
4665 break;
4666
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004667 case 247:
Reid Spencercd42c582006-12-05 23:29:42 +00004668#line 2099 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004669 {
Reid Spencer3da59db2006-11-27 01:05:10 +00004670 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4671 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4672 if (CI2->getParent() == 0)
4673 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
Reid Spencer3822ff52006-11-08 06:47:33 +00004674 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4675 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4676 CHECK_FOR_ERROR
4677 ;}
4678 break;
4679
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004680 case 248:
Reid Spencercd42c582006-12-05 23:29:42 +00004681#line 2108 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004682 {
Reid Spencercd42c582006-12-05 23:29:42 +00004683 (yyval.BasicBlockVal) = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004684 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004685
4686 // Make sure to move the basic block to the correct location in the
4687 // function, instead of leaving it inserted wherever it was first
4688 // referenced.
4689 Function::BasicBlockListType &BBL =
4690 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004691 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004692 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004693 ;}
4694 break;
4695
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004696 case 249:
Reid Spencercd42c582006-12-05 23:29:42 +00004697#line 2120 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004698 {
Reid Spencercd42c582006-12-05 23:29:42 +00004699 (yyval.BasicBlockVal) = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004700 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004701
4702 // Make sure to move the basic block to the correct location in the
4703 // function, instead of leaving it inserted wherever it was first
4704 // referenced.
4705 Function::BasicBlockListType &BBL =
4706 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004707 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004708 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004709 ;}
4710 break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004711
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004712 case 250:
Reid Spencercd42c582006-12-05 23:29:42 +00004713#line 2133 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004714 { // Return with a result...
Reid Spencera132e042006-12-03 05:46:11 +00004715 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004716 CHECK_FOR_ERROR
4717 ;}
4718 break;
4719
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004720 case 251:
Reid Spencercd42c582006-12-05 23:29:42 +00004721#line 2137 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004722 { // Return with no result...
4723 (yyval.TermInstVal) = new ReturnInst();
4724 CHECK_FOR_ERROR
4725 ;}
4726 break;
4727
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004728 case 252:
Reid Spencercd42c582006-12-05 23:29:42 +00004729#line 2141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004730 { // Unconditional Branch...
4731 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
4732 CHECK_FOR_ERROR
4733 (yyval.TermInstVal) = new BranchInst(tmpBB);
4734 ;}
4735 break;
4736
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004737 case 253:
Reid Spencercd42c582006-12-05 23:29:42 +00004738#line 2146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004739 {
4740 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
4741 CHECK_FOR_ERROR
4742 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
4743 CHECK_FOR_ERROR
4744 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4745 CHECK_FOR_ERROR
4746 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4747 ;}
4748 break;
4749
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004750 case 254:
Reid Spencercd42c582006-12-05 23:29:42 +00004751#line 2155 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004752 {
Reid Spencera132e042006-12-03 05:46:11 +00004753 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004754 CHECK_FOR_ERROR
4755 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4756 CHECK_FOR_ERROR
4757 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4758 (yyval.TermInstVal) = S;
4759
4760 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4761 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004762 for (; I != E; ++I) {
4763 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4764 S->addCase(CI, I->second);
4765 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004766 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004767 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004768 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004769 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004770 ;}
4771 break;
4772
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004773 case 255:
Reid Spencercd42c582006-12-05 23:29:42 +00004774#line 2174 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004775 {
Reid Spencera132e042006-12-03 05:46:11 +00004776 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004777 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004778 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004779 CHECK_FOR_ERROR
4780 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencer3822ff52006-11-08 06:47:33 +00004781 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004782 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004783 ;}
4784 break;
4785
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004786 case 256:
Reid Spencercd42c582006-12-05 23:29:42 +00004787#line 2184 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004788 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004789 const PointerType *PFTy;
4790 const FunctionType *Ty;
4791
Reid Spencera132e042006-12-03 05:46:11 +00004792 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004793 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4794 // Pull out the types of all of the arguments...
4795 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00004796 if ((yyvsp[-7].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00004797 for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004798 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004799 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004800 }
4801
4802 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
4803 if (isVarArg) ParamTypes.pop_back();
4804
Reid Spencera132e042006-12-03 05:46:11 +00004805 Ty = FunctionType::get((yyvsp[-10].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004806 PFTy = PointerType::get(Ty);
4807 }
4808
Reid Spencer3822ff52006-11-08 06:47:33 +00004809 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004810 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004811 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004812 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004813 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004814 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004815
4816 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00004817 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
4818 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004819 } else { // Has arguments?
4820 // Loop through FunctionType's arguments and ensure they are specified
4821 // correctly!
4822 //
4823 FunctionType::param_iterator I = Ty->param_begin();
4824 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00004825 std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004826
Reid Spencera132e042006-12-03 05:46:11 +00004827 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
4828 if ((*ArgI)->getType() != *I)
4829 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
4830 (*I)->getDescription() + "'!");
4831
4832 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
4833 GEN_ERROR("Invalid number of parameters detected!");
4834
4835 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004836 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004837 cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004838
Reid Spencera132e042006-12-03 05:46:11 +00004839 delete (yyvsp[-10].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004840 delete (yyvsp[-7].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004841 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004842 ;}
4843 break;
4844
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004845 case 257:
Reid Spencercd42c582006-12-05 23:29:42 +00004846#line 2239 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004847 {
4848 (yyval.TermInstVal) = new UnwindInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004849 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004850 ;}
4851 break;
4852
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004853 case 258:
Reid Spencercd42c582006-12-05 23:29:42 +00004854#line 2243 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004855 {
4856 (yyval.TermInstVal) = new UnreachableInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004857 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004858 ;}
4859 break;
4860
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004861 case 259:
Reid Spencercd42c582006-12-05 23:29:42 +00004862#line 2250 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004863 {
4864 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
Reid Spencera132e042006-12-03 05:46:11 +00004865 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004866 CHECK_FOR_ERROR
Reid Spencer61c83e02006-08-18 08:43:06 +00004867 if (V == 0)
4868 GEN_ERROR("May only switch on a constant pool value!");
4869
Reid Spencer3822ff52006-11-08 06:47:33 +00004870 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004871 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004872 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
4873 ;}
4874 break;
4875
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004876 case 260:
Reid Spencercd42c582006-12-05 23:29:42 +00004877#line 2261 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004878 {
4879 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00004880 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004881 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004882
4883 if (V == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00004884 GEN_ERROR("May only switch on a constant pool value!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004885
Reid Spencer3822ff52006-11-08 06:47:33 +00004886 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004887 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004888 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
4889 ;}
4890 break;
4891
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004892 case 261:
Reid Spencercd42c582006-12-05 23:29:42 +00004893#line 2274 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004894 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004895 // Is this definition named?? if so, assign the name...
Reid Spencer3822ff52006-11-08 06:47:33 +00004896 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004897 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004898 InsertValue((yyvsp[0].InstVal));
4899 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004900 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004901;}
4902 break;
4903
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004904 case 262:
Reid Spencercd42c582006-12-05 23:29:42 +00004905#line 2283 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004906 { // Used for PHI nodes
4907 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00004908 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004909 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004910 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004911 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004912 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
Reid Spencera132e042006-12-03 05:46:11 +00004913 delete (yyvsp[-5].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004914 ;}
4915 break;
4916
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004917 case 263:
Reid Spencercd42c582006-12-05 23:29:42 +00004918#line 2292 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004919 {
4920 (yyval.PHIList) = (yyvsp[-6].PHIList);
4921 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004922 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004923 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004924 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004925 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
4926 ;}
4927 break;
4928
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004929 case 264:
Reid Spencercd42c582006-12-05 23:29:42 +00004930#line 2302 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004931 { // Used for call statements, and memory insts...
Reid Spencera132e042006-12-03 05:46:11 +00004932 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00004933 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
4934 ;}
4935 break;
4936
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004937 case 265:
Reid Spencercd42c582006-12-05 23:29:42 +00004938#line 2306 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004939 {
4940 (yyval.ValueList) = (yyvsp[-2].ValueList);
4941 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004942 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004943 ;}
4944 break;
4945
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004946 case 267:
Reid Spencercd42c582006-12-05 23:29:42 +00004947#line 2313 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004948 { (yyval.ValueList) = 0; ;}
Reid Spencer861d9d62006-11-28 07:29:44 +00004949 break;
4950
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004951 case 268:
Reid Spencercd42c582006-12-05 23:29:42 +00004952#line 2315 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004953 {
4954 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004955 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004956 ;}
4957 break;
4958
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004959 case 269:
Reid Spencercd42c582006-12-05 23:29:42 +00004960#line 2319 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004961 {
4962 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004963 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004964 ;}
4965 break;
4966
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004967 case 270:
Reid Spencercd42c582006-12-05 23:29:42 +00004968#line 2324 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004969 {
Reid Spencera132e042006-12-03 05:46:11 +00004970 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
4971 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00004972 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00004973 "Arithmetic operator requires integer, FP, or packed operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004974 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
4975 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
4976 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
4977 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Reid Spencer3ed469c2006-11-02 20:25:50 +00004978 GEN_ERROR("U/S/FRem not supported on packed types!");
Reid Spencera132e042006-12-03 05:46:11 +00004979 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004980 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004981 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004982 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004983 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
Reid Spencer3822ff52006-11-08 06:47:33 +00004984 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00004985 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00004986 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004987 ;}
4988 break;
4989
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004990 case 271:
Reid Spencercd42c582006-12-05 23:29:42 +00004991#line 2343 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004992 {
Reid Spencera132e042006-12-03 05:46:11 +00004993 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
4994 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
4995 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00004996 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00004997 }
Reid Spencera132e042006-12-03 05:46:11 +00004998 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004999 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005000 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005001 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005002 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005003 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005004 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005005 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005006 ;}
5007 break;
5008
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005009 case 272:
Reid Spencercd42c582006-12-05 23:29:42 +00005010#line 2358 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005011 {
Reid Spencera132e042006-12-03 05:46:11 +00005012 if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
Reid Spencer61c83e02006-08-18 08:43:06 +00005013 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005014 "PackedTypes currently not supported in setcc instructions!");
5015 }
Reid Spencera132e042006-12-03 05:46:11 +00005016 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005017 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005018 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005019 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005020 (yyval.InstVal) = new SetCondInst((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005021 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005022 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005023 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005024 ;}
5025 break;
5026
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005027 case 273:
Reid Spencercd42c582006-12-05 23:29:42 +00005028#line 2372 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005029 {
5030 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5031 GEN_ERROR("Packed types not supported by icmp instruction");
5032 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5033 CHECK_FOR_ERROR
5034 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5035 CHECK_FOR_ERROR
5036 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5037 if ((yyval.InstVal) == 0)
5038 GEN_ERROR("icmp operator returned null!");
5039 ;}
5040 break;
5041
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005042 case 274:
Reid Spencercd42c582006-12-05 23:29:42 +00005043#line 2383 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005044 {
5045 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5046 GEN_ERROR("Packed types not supported by fcmp instruction");
5047 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5048 CHECK_FOR_ERROR
5049 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5050 CHECK_FOR_ERROR
5051 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5052 if ((yyval.InstVal) == 0)
5053 GEN_ERROR("fcmp operator returned null!");
5054 ;}
5055 break;
5056
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005057 case 275:
Reid Spencercd42c582006-12-05 23:29:42 +00005058#line 2394 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005059 {
Reid Spencer481169e2006-12-01 00:33:46 +00005060 llvm_cerr << "WARNING: Use of eliminated 'not' instruction:"
Reid Spencer68a24bd2005-08-27 18:50:39 +00005061 << " Replacing with 'xor'.\n";
5062
Reid Spencera132e042006-12-03 05:46:11 +00005063 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005064 if (Ones == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005065 GEN_ERROR("Expected integral type for not instruction!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005066
Reid Spencera132e042006-12-03 05:46:11 +00005067 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
Reid Spencer3822ff52006-11-08 06:47:33 +00005068 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005069 GEN_ERROR("Could not create a xor instruction!");
5070 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005071 ;}
5072 break;
5073
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005074 case 276:
Reid Spencercd42c582006-12-05 23:29:42 +00005075#line 2407 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005076 {
Reid Spencera132e042006-12-03 05:46:11 +00005077 if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005078 GEN_ERROR("Shift amount must be ubyte!");
Reid Spencera132e042006-12-03 05:46:11 +00005079 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Reid Spencer61c83e02006-08-18 08:43:06 +00005080 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005081 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00005082 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005083 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005084 ;}
5085 break;
5086
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005087 case 277:
Reid Spencercd42c582006-12-05 23:29:42 +00005088#line 2416 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005089 {
Reid Spencera132e042006-12-03 05:46:11 +00005090 Value* Val = (yyvsp[-2].ValueVal);
5091 const Type* Ty = (yyvsp[0].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00005092 if (!Val->getType()->isFirstClassType())
5093 GEN_ERROR("cast from a non-primitive type: '" +
5094 Val->getType()->getDescription() + "'!");
5095 if (!Ty->isFirstClassType())
5096 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencera132e042006-12-03 05:46:11 +00005097 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].TypeVal)->get());
5098 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005099 ;}
5100 break;
5101
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005102 case 278:
Reid Spencercd42c582006-12-05 23:29:42 +00005103#line 2427 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005104 {
Reid Spencera132e042006-12-03 05:46:11 +00005105 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005106 GEN_ERROR("select condition must be boolean!");
Reid Spencera132e042006-12-03 05:46:11 +00005107 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005108 GEN_ERROR("select value types should match!");
Reid Spencera132e042006-12-03 05:46:11 +00005109 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005110 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005111 ;}
5112 break;
5113
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005114 case 279:
Reid Spencercd42c582006-12-05 23:29:42 +00005115#line 2435 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005116 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005117 NewVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005118 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5119 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005120 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005121 ;}
5122 break;
5123
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005124 case 280:
Reid Spencercd42c582006-12-05 23:29:42 +00005125#line 2441 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005126 {
Reid Spencera132e042006-12-03 05:46:11 +00005127 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005128 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005129 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005130 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005131 ;}
5132 break;
5133
Reid Spencercd42c582006-12-05 23:29:42 +00005134 case 281:
5135#line 2447 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005136 {
Reid Spencera132e042006-12-03 05:46:11 +00005137 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005138 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005139 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005140 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005141 ;}
5142 break;
5143
Reid Spencercd42c582006-12-05 23:29:42 +00005144 case 282:
5145#line 2453 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005146 {
Reid Spencera132e042006-12-03 05:46:11 +00005147 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005148 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005149 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005150 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005151 ;}
5152 break;
5153
Reid Spencercd42c582006-12-05 23:29:42 +00005154 case 283:
5155#line 2459 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005156 {
5157 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005158 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005159 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005160 (yyval.InstVal) = new PHINode(Ty);
5161 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5162 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5163 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Reid Spencer61c83e02006-08-18 08:43:06 +00005164 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005165 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5166 (yyvsp[0].PHIList)->pop_front();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005167 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005168 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005169 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005170 ;}
5171 break;
5172
Reid Spencercd42c582006-12-05 23:29:42 +00005173 case 284:
5174#line 2474 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005175 {
Reid Spencer3da59db2006-11-27 01:05:10 +00005176 const PointerType *PFTy = 0;
5177 const FunctionType *Ty = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005178
Reid Spencera132e042006-12-03 05:46:11 +00005179 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005180 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5181 // Pull out the types of all of the arguments...
5182 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00005183 if ((yyvsp[-1].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00005184 for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005185 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00005186 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005187 }
5188
5189 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5190 if (isVarArg) ParamTypes.pop_back();
5191
Reid Spencera132e042006-12-03 05:46:11 +00005192 if (!(*(yyvsp[-4].TypeVal))->isFirstClassType() && *(yyvsp[-4].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005193 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005194
Reid Spencera132e042006-12-03 05:46:11 +00005195 Ty = FunctionType::get((yyvsp[-4].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005196 PFTy = PointerType::get(Ty);
5197 }
5198
Reid Spencer3822ff52006-11-08 06:47:33 +00005199 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005200 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005201
5202 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00005203 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
Reid Spencer68a24bd2005-08-27 18:50:39 +00005204 // Make sure no arguments is a good thing!
5205 if (Ty->getNumParams() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005206 GEN_ERROR("No arguments passed to a function that "
Reid Spencer68a24bd2005-08-27 18:50:39 +00005207 "expects arguments!");
5208
Reid Spencer3822ff52006-11-08 06:47:33 +00005209 (yyval.InstVal) = new CallInst(V, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005210 } else { // Has arguments?
5211 // Loop through FunctionType's arguments and ensure they are specified
5212 // correctly!
5213 //
5214 FunctionType::param_iterator I = Ty->param_begin();
5215 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00005216 std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005217
Reid Spencera132e042006-12-03 05:46:11 +00005218 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5219 if ((*ArgI)->getType() != *I)
5220 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
5221 (*I)->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005222
5223 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005224 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005225
Reid Spencera132e042006-12-03 05:46:11 +00005226 (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005227 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005228 cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
5229 cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
Reid Spencera132e042006-12-03 05:46:11 +00005230 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005231 delete (yyvsp[-1].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005232 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005233 ;}
5234 break;
5235
Reid Spencercd42c582006-12-05 23:29:42 +00005236 case 285:
5237#line 2533 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005238 {
5239 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005240 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005241 ;}
5242 break;
5243
Reid Spencercd42c582006-12-05 23:29:42 +00005244 case 286:
5245#line 2540 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005246 {
5247 (yyval.ValueList) = (yyvsp[0].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005248 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005249 ;}
5250 break;
5251
Reid Spencercd42c582006-12-05 23:29:42 +00005252 case 287:
5253#line 2543 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005254 {
Reid Spencera132e042006-12-03 05:46:11 +00005255 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer61c83e02006-08-18 08:43:06 +00005256 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005257 ;}
5258 break;
5259
Reid Spencercd42c582006-12-05 23:29:42 +00005260 case 288:
5261#line 2548 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005262 {
5263 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005264 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005265 ;}
5266 break;
5267
Reid Spencercd42c582006-12-05 23:29:42 +00005268 case 289:
5269#line 2552 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005270 {
5271 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005272 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005273 ;}
5274 break;
5275
Reid Spencercd42c582006-12-05 23:29:42 +00005276 case 290:
5277#line 2559 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005278 {
Reid Spencera132e042006-12-03 05:46:11 +00005279 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5280 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005281 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005282 ;}
5283 break;
5284
Reid Spencercd42c582006-12-05 23:29:42 +00005285 case 291:
5286#line 2564 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005287 {
Reid Spencera132e042006-12-03 05:46:11 +00005288 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005289 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005290 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5291 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005292 ;}
5293 break;
5294
Reid Spencercd42c582006-12-05 23:29:42 +00005295 case 292:
5296#line 2570 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005297 {
Reid Spencera132e042006-12-03 05:46:11 +00005298 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5299 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005300 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005301 ;}
5302 break;
5303
Reid Spencercd42c582006-12-05 23:29:42 +00005304 case 293:
5305#line 2575 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005306 {
Reid Spencera132e042006-12-03 05:46:11 +00005307 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005308 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005309 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5310 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005311 ;}
5312 break;
5313
Reid Spencercd42c582006-12-05 23:29:42 +00005314 case 294:
5315#line 2581 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005316 {
Reid Spencera132e042006-12-03 05:46:11 +00005317 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005318 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencera132e042006-12-03 05:46:11 +00005319 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5320 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005321 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005322 ;}
5323 break;
5324
Reid Spencercd42c582006-12-05 23:29:42 +00005325 case 295:
5326#line 2589 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005327 {
Reid Spencera132e042006-12-03 05:46:11 +00005328 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005329 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005330 (*(yyvsp[-1].TypeVal))->getDescription());
5331 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005332 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005333 (*(yyvsp[-1].TypeVal))->getDescription());
5334 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005335 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005336 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
Reid Spencera132e042006-12-03 05:46:11 +00005337 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005338 ;}
5339 break;
5340
Reid Spencercd42c582006-12-05 23:29:42 +00005341 case 296:
5342#line 2601 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005343 {
Reid Spencera132e042006-12-03 05:46:11 +00005344 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005345 if (!PT)
Reid Spencer61c83e02006-08-18 08:43:06 +00005346 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005347 (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005348 const Type *ElTy = PT->getElementType();
Reid Spencera132e042006-12-03 05:46:11 +00005349 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5350 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005351 "' into space of type '" + ElTy->getDescription() + "'!");
5352
Reid Spencera132e042006-12-03 05:46:11 +00005353 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005354 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005355 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5356 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005357 ;}
5358 break;
5359
Reid Spencercd42c582006-12-05 23:29:42 +00005360 case 297:
5361#line 2616 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005362 {
Reid Spencera132e042006-12-03 05:46:11 +00005363 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005364 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005365
Reid Spencera132e042006-12-03 05:46:11 +00005366 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005367 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencera132e042006-12-03 05:46:11 +00005368 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5369 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005370 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005371 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5372 delete (yyvsp[-2].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005373 delete (yyvsp[0].ValueList);
5374 ;}
5375 break;
5376
5377
5378 default: break;
5379 }
5380
5381/* Line 1126 of yacc.c. */
Reid Spencercd42c582006-12-05 23:29:42 +00005382#line 5383 "llvmAsmParser.tab.c"
Reid Spencer5b7e7532006-09-28 19:28:24 +00005383
5384 yyvsp -= yylen;
5385 yyssp -= yylen;
5386
Reid Spencer3822ff52006-11-08 06:47:33 +00005387
5388 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005389
5390 *++yyvsp = yyval;
5391
5392
Reid Spencer3822ff52006-11-08 06:47:33 +00005393 /* Now `shift' the result of the reduction. Determine what state
5394 that goes to, based on the state we popped back to and the rule
5395 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005396
5397 yyn = yyr1[yyn];
5398
Reid Spencer3822ff52006-11-08 06:47:33 +00005399 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5400 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005401 yystate = yytable[yystate];
5402 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005403 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005404
5405 goto yynewstate;
5406
5407
Reid Spencer3822ff52006-11-08 06:47:33 +00005408/*------------------------------------.
5409| yyerrlab -- here on detecting error |
5410`------------------------------------*/
5411yyerrlab:
5412 /* If not already recovering from an error, report this error. */
5413 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005414 {
5415 ++yynerrs;
Reid Spencer3822ff52006-11-08 06:47:33 +00005416#if YYERROR_VERBOSE
Reid Spencer5b7e7532006-09-28 19:28:24 +00005417 yyn = yypact[yystate];
Chris Lattner224f84f2006-08-18 17:34:45 +00005418
Reid Spencer3822ff52006-11-08 06:47:33 +00005419 if (YYPACT_NINF < yyn && yyn < YYLAST)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005420 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005421 int yytype = YYTRANSLATE (yychar);
5422 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5423 YYSIZE_T yysize = yysize0;
5424 YYSIZE_T yysize1;
5425 int yysize_overflow = 0;
5426 char *yymsg = 0;
5427# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5428 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5429 int yyx;
Reid Spencer5b7e7532006-09-28 19:28:24 +00005430
Reid Spencer3822ff52006-11-08 06:47:33 +00005431#if 0
5432 /* This is so xgettext sees the translatable formats that are
5433 constructed on the fly. */
5434 YY_("syntax error, unexpected %s");
5435 YY_("syntax error, unexpected %s, expecting %s");
5436 YY_("syntax error, unexpected %s, expecting %s or %s");
5437 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5438 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5439#endif
5440 char *yyfmt;
5441 char const *yyf;
5442 static char const yyunexpected[] = "syntax error, unexpected %s";
5443 static char const yyexpecting[] = ", expecting %s";
5444 static char const yyor[] = " or %s";
5445 char yyformat[sizeof yyunexpected
5446 + sizeof yyexpecting - 1
5447 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5448 * (sizeof yyor - 1))];
5449 char const *yyprefix = yyexpecting;
5450
5451 /* Start YYX at -YYN if negative to avoid negative indexes in
5452 YYCHECK. */
5453 int yyxbegin = yyn < 0 ? -yyn : 0;
5454
5455 /* Stay within bounds of both yycheck and yytname. */
5456 int yychecklim = YYLAST - yyn;
5457 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5458 int yycount = 1;
5459
5460 yyarg[0] = yytname[yytype];
5461 yyfmt = yystpcpy (yyformat, yyunexpected);
5462
5463 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5464 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5465 {
5466 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5467 {
5468 yycount = 1;
5469 yysize = yysize0;
5470 yyformat[sizeof yyunexpected - 1] = '\0';
5471 break;
5472 }
5473 yyarg[yycount++] = yytname[yyx];
5474 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5475 yysize_overflow |= yysize1 < yysize;
5476 yysize = yysize1;
5477 yyfmt = yystpcpy (yyfmt, yyprefix);
5478 yyprefix = yyor;
5479 }
5480
5481 yyf = YY_(yyformat);
5482 yysize1 = yysize + yystrlen (yyf);
5483 yysize_overflow |= yysize1 < yysize;
5484 yysize = yysize1;
5485
5486 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5487 yymsg = (char *) YYSTACK_ALLOC (yysize);
5488 if (yymsg)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005489 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005490 /* Avoid sprintf, as that infringes on the user's name space.
5491 Don't have undefined behavior even if the translation
5492 produced a string with the wrong number of "%s"s. */
5493 char *yyp = yymsg;
5494 int yyi = 0;
5495 while ((*yyp = *yyf))
Reid Spencer5b7e7532006-09-28 19:28:24 +00005496 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005497 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5498 {
5499 yyp += yytnamerr (yyp, yyarg[yyi++]);
5500 yyf += 2;
5501 }
5502 else
5503 {
5504 yyp++;
5505 yyf++;
5506 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005507 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005508 yyerror (yymsg);
5509 YYSTACK_FREE (yymsg);
Reid Spencer5b7e7532006-09-28 19:28:24 +00005510 }
5511 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005512 {
5513 yyerror (YY_("syntax error"));
5514 goto yyexhaustedlab;
5515 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005516 }
5517 else
5518#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00005519 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005520 }
5521
Reid Spencer3822ff52006-11-08 06:47:33 +00005522
Reid Spencer68a24bd2005-08-27 18:50:39 +00005523
5524 if (yyerrstatus == 3)
5525 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005526 /* If just tried and failed to reuse look-ahead token after an
5527 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005528
Reid Spencer3822ff52006-11-08 06:47:33 +00005529 if (yychar <= YYEOF)
5530 {
5531 /* Return failure if at end of input. */
5532 if (yychar == YYEOF)
5533 YYABORT;
5534 }
5535 else
5536 {
5537 yydestruct ("Error: discarding", yytoken, &yylval);
5538 yychar = YYEMPTY;
5539 }
5540 }
5541
5542 /* Else will try to reuse look-ahead token after shifting the error
5543 token. */
5544 goto yyerrlab1;
5545
5546
5547/*---------------------------------------------------.
5548| yyerrorlab -- error raised explicitly by YYERROR. |
5549`---------------------------------------------------*/
5550yyerrorlab:
5551
5552 /* Pacify compilers like GCC when the user code never invokes
5553 YYERROR and the label yyerrorlab therefore never appears in user
5554 code. */
5555 if (0)
5556 goto yyerrorlab;
5557
5558yyvsp -= yylen;
5559 yyssp -= yylen;
5560 yystate = *yyssp;
5561 goto yyerrlab1;
5562
5563
5564/*-------------------------------------------------------------.
5565| yyerrlab1 -- common code for both syntax error and YYERROR. |
5566`-------------------------------------------------------------*/
5567yyerrlab1:
5568 yyerrstatus = 3; /* Each real token shifted decrements this. */
5569
5570 for (;;)
5571 {
5572 yyn = yypact[yystate];
5573 if (yyn != YYPACT_NINF)
5574 {
5575 yyn += YYTERROR;
5576 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5577 {
5578 yyn = yytable[yyn];
5579 if (0 < yyn)
5580 break;
5581 }
5582 }
5583
5584 /* Pop the current state because it cannot handle the error token. */
5585 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005586 YYABORT;
5587
Chris Lattner8335e842006-01-23 23:05:42 +00005588
Reid Spencer3822ff52006-11-08 06:47:33 +00005589 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5590 YYPOPSTACK;
5591 yystate = *yyssp;
5592 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005593 }
5594
5595 if (yyn == YYFINAL)
5596 YYACCEPT;
5597
Reid Spencer68a24bd2005-08-27 18:50:39 +00005598 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005599
5600
5601 /* Shift the error token. */
5602 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005603
5604 yystate = yyn;
5605 goto yynewstate;
5606
Chris Lattnerf49c1762006-11-08 05:58:47 +00005607
Reid Spencer3822ff52006-11-08 06:47:33 +00005608/*-------------------------------------.
5609| yyacceptlab -- YYACCEPT comes here. |
5610`-------------------------------------*/
5611yyacceptlab:
5612 yyresult = 0;
5613 goto yyreturn;
5614
5615/*-----------------------------------.
5616| yyabortlab -- YYABORT comes here. |
5617`-----------------------------------*/
5618yyabortlab:
5619 yyresult = 1;
5620 goto yyreturn;
5621
5622#ifndef yyoverflow
5623/*-------------------------------------------------.
5624| yyexhaustedlab -- memory exhaustion comes here. |
5625`-------------------------------------------------*/
5626yyexhaustedlab:
5627 yyerror (YY_("memory exhausted"));
5628 yyresult = 2;
5629 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005630#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005631
5632yyreturn:
5633 if (yychar != YYEOF && yychar != YYEMPTY)
5634 yydestruct ("Cleanup: discarding lookahead",
5635 yytoken, &yylval);
5636 while (yyssp != yyss)
5637 {
5638 yydestruct ("Cleanup: popping",
5639 yystos[*yyssp], yyvsp);
5640 YYPOPSTACK;
Chris Lattnerf49c1762006-11-08 05:58:47 +00005641 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005642#ifndef yyoverflow
5643 if (yyss != yyssa)
5644 YYSTACK_FREE (yyss);
5645#endif
5646 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005647}
Reid Spencer3822ff52006-11-08 06:47:33 +00005648
5649
Reid Spencercd42c582006-12-05 23:29:42 +00005650#line 2631 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005651
5652
5653void llvm::GenerateError(const std::string &message, int LineNo) {
5654 if (LineNo == -1) LineNo = llvmAsmlineno;
5655 // TODO: column number in exception
5656 if (TheParseError)
5657 TheParseError->setError(CurFilename, message, LineNo);
5658 TriggerError = 1;
5659}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005660
5661int yyerror(const char *ErrorMsg) {
5662 std::string where
5663 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5664 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5665 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5666 if (yychar == YYEMPTY || yychar == 0)
5667 errMsg += "end-of-file.";
5668 else
5669 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005670 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005671 return 0;
5672}
Reid Spencer3822ff52006-11-08 06:47:33 +00005673