blob: dca6ac7f49cbd57eb2e95880cb192eaa3a662e0f [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,
208 SHUFFLEVECTOR = 399,
209 VAARG_old = 400,
210 VANEXT_old = 401
Reid Spencer3822ff52006-11-08 06:47:33 +0000211 };
212#endif
213/* Tokens. */
214#define ESINT64VAL 258
215#define EUINT64VAL 259
216#define SINTVAL 260
217#define UINTVAL 261
218#define FPVAL 262
219#define VOID 263
220#define BOOL 264
221#define SBYTE 265
222#define UBYTE 266
223#define SHORT 267
224#define USHORT 268
225#define INT 269
226#define UINT 270
227#define LONG 271
228#define ULONG 272
229#define FLOAT 273
230#define DOUBLE 274
231#define TYPE 275
232#define LABEL 276
233#define VAR_ID 277
234#define LABELSTR 278
235#define STRINGCONSTANT 279
236#define IMPLEMENTATION 280
237#define ZEROINITIALIZER 281
238#define TRUETOK 282
239#define FALSETOK 283
240#define BEGINTOK 284
241#define ENDTOK 285
242#define DECLARE 286
243#define GLOBAL 287
244#define CONSTANT 288
245#define SECTION 289
246#define VOLATILE 290
247#define TO 291
248#define DOTDOTDOT 292
249#define NULL_TOK 293
250#define UNDEF 294
251#define CONST 295
252#define INTERNAL 296
253#define LINKONCE 297
254#define WEAK 298
255#define APPENDING 299
256#define DLLIMPORT 300
257#define DLLEXPORT 301
258#define EXTERN_WEAK 302
259#define OPAQUE 303
260#define NOT 304
261#define EXTERNAL 305
262#define TARGET 306
263#define TRIPLE 307
264#define ENDIAN 308
265#define POINTERSIZE 309
266#define LITTLE 310
267#define BIG 311
268#define ALIGN 312
269#define DEPLIBS 313
270#define CALL 314
271#define TAIL 315
272#define ASM_TOK 316
273#define MODULE 317
274#define SIDEEFFECT 318
275#define CC_TOK 319
276#define CCC_TOK 320
277#define CSRETCC_TOK 321
278#define FASTCC_TOK 322
279#define COLDCC_TOK 323
280#define X86_STDCALLCC_TOK 324
281#define X86_FASTCALLCC_TOK 325
282#define DATALAYOUT 326
283#define RET 327
284#define BR 328
285#define SWITCH 329
286#define INVOKE 330
287#define UNWIND 331
288#define UNREACHABLE 332
289#define ADD 333
290#define SUB 334
291#define MUL 335
292#define UDIV 336
293#define SDIV 337
294#define FDIV 338
295#define UREM 339
296#define SREM 340
297#define FREM 341
298#define AND 342
299#define OR 343
300#define XOR 344
301#define SETLE 345
302#define SETGE 346
303#define SETLT 347
304#define SETGT 348
305#define SETEQ 349
306#define SETNE 350
Reid Spencera132e042006-12-03 05:46:11 +0000307#define ICMP 351
308#define FCMP 352
309#define EQ 353
310#define NE 354
311#define SLT 355
312#define SGT 356
313#define SLE 357
314#define SGE 358
315#define ULT 359
316#define UGT 360
317#define ULE 361
318#define UGE 362
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000319#define OEQ 363
320#define ONE 364
321#define OLT 365
322#define OGT 366
323#define OLE 367
324#define OGE 368
Reid Spencera132e042006-12-03 05:46:11 +0000325#define ORD 369
326#define UNO 370
Reid Spencer6e18b7d2006-12-03 06:59:29 +0000327#define UEQ 371
328#define UNE 372
329#define MALLOC 373
330#define ALLOCA 374
331#define FREE 375
332#define LOAD 376
333#define STORE 377
334#define GETELEMENTPTR 378
335#define TRUNC 379
336#define ZEXT 380
337#define SEXT 381
338#define FPTRUNC 382
339#define FPEXT 383
340#define BITCAST 384
341#define UITOFP 385
342#define SITOFP 386
343#define FPTOUI 387
344#define FPTOSI 388
345#define INTTOPTR 389
346#define PTRTOINT 390
347#define PHI_TOK 391
348#define SELECT 392
349#define SHL 393
350#define LSHR 394
351#define ASHR 395
352#define VAARG 396
353#define EXTRACTELEMENT 397
354#define INSERTELEMENT 398
355#define SHUFFLEVECTOR 399
356#define VAARG_old 400
357#define VANEXT_old 401
Reid Spencer3822ff52006-11-08 06:47:33 +0000358
359
360
361
362/* Copy the first part of user declarations. */
Reid Spencer4012e832006-12-04 05:24:24 +0000363#line 14 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000364
365#include "ParserInternals.h"
366#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000367#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000368#include "llvm/Instructions.h"
369#include "llvm/Module.h"
370#include "llvm/SymbolTable.h"
371#include "llvm/Support/GetElementPtrTypeIterator.h"
372#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000373#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000374#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000375#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000376#include <list>
377#include <utility>
378
Reid Spencere4f47592006-08-18 17:32:55 +0000379// The following is a gross hack. In order to rid the libAsmParser library of
380// exceptions, we have to have a way of getting the yyparse function to go into
381// an error situation. So, whenever we want an error to occur, the GenerateError
382// function (see bottom of file) sets TriggerError. Then, at the end of each
383// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
384// (a goto) to put YACC in error state. Furthermore, several calls to
385// GenerateError are made from inside productions and they must simulate the
386// previous exception behavior by exiting the production immediately. We have
387// replaced these with the GEN_ERROR macro which calls GeneratError and then
388// immediately invokes YYERROR. This would be so much cleaner if it was a
389// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000390static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000391#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000392#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
393
Reid Spencer68a24bd2005-08-27 18:50:39 +0000394int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
395int yylex(); // declaration" of xxx warnings.
396int yyparse();
397
398namespace llvm {
399 std::string CurFilename;
400}
401using namespace llvm;
402
403static Module *ParserResult;
404
405// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
406// relating to upreferences in the input stream.
407//
408//#define DEBUG_UPREFS 1
409#ifdef DEBUG_UPREFS
Reid Spencer481169e2006-12-01 00:33:46 +0000410#define UR_OUT(X) llvm_cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000411#else
412#define UR_OUT(X)
413#endif
414
415#define YYERROR_VERBOSE 1
416
417static bool ObsoleteVarArgs;
418static bool NewVarArgs;
Chris Lattnerb475c422005-11-12 18:22:38 +0000419static BasicBlock *CurBB;
420static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000421
422
423// This contains info used when building the body of a function. It is
424// destroyed when the function is completed.
425//
426typedef std::vector<Value *> ValueList; // Numbered defs
427static void
428ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
429 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
430
431static struct PerModuleInfo {
432 Module *CurrentModule;
433 std::map<const Type *, ValueList> Values; // Module level numbered definitions
434 std::map<const Type *,ValueList> LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000435 std::vector<PATypeHolder> Types;
436 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000437
438 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000439 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000440 /// that we can resolve them later and print error messages as appropriate.
441 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
442
443 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
444 // references to global values. Global values may be referenced before they
445 // are defined, and if so, the temporary object that they represent is held
446 // here. This is used for forward references of GlobalValues.
447 //
448 typedef std::map<std::pair<const PointerType *,
449 ValID>, GlobalValue*> GlobalRefsType;
450 GlobalRefsType GlobalRefs;
451
452 void ModuleDone() {
453 // If we could not resolve some functions at function compilation time
454 // (calls to functions before they are defined), resolve them now... Types
455 // are resolved when the constant pool has been completely parsed.
456 //
457 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000458 if (TriggerError)
459 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000460
461 // Check to make sure that all global value forward references have been
462 // resolved!
463 //
464 if (!GlobalRefs.empty()) {
465 std::string UndefinedReferences = "Unresolved global references exist:\n";
466
467 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
468 I != E; ++I) {
469 UndefinedReferences += " " + I->first.first->getDescription() + " " +
470 I->first.second.getName() + "\n";
471 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000472 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000473 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000474 }
475
476 Values.clear(); // Clear out function local definitions
477 Types.clear();
478 CurrentModule = 0;
479 }
480
Reid Spencer68a24bd2005-08-27 18:50:39 +0000481 // GetForwardRefForGlobal - Check to see if there is a forward reference
482 // for this global. If so, remove it from the GlobalRefs map and return it.
483 // If not, just return null.
484 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
485 // Check to see if there is a forward reference to this global variable...
486 // if there is, eliminate it and patch the reference to use the new def'n.
487 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
488 GlobalValue *Ret = 0;
489 if (I != GlobalRefs.end()) {
490 Ret = I->second;
491 GlobalRefs.erase(I);
492 }
493 return Ret;
494 }
495} CurModule;
496
497static struct PerFunctionInfo {
498 Function *CurrentFunction; // Pointer to current function being created
499
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000500 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
Reid Spencer68a24bd2005-08-27 18:50:39 +0000501 std::map<const Type*, ValueList> LateResolveValues;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000502 bool isDeclare; // Is this function a forward declararation?
503 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Reid Spencer68a24bd2005-08-27 18:50:39 +0000504
505 /// BBForwardRefs - When we see forward references to basic blocks, keep
506 /// track of them here.
507 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
508 std::vector<BasicBlock*> NumberedBlocks;
509 unsigned NextBBNum;
510
511 inline PerFunctionInfo() {
512 CurrentFunction = 0;
513 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000514 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000515 }
516
517 inline void FunctionStart(Function *M) {
518 CurrentFunction = M;
519 NextBBNum = 0;
520 }
521
522 void FunctionDone() {
523 NumberedBlocks.clear();
524
525 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000526 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000527 GenerateError("Undefined reference to label " +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000528 BBForwardRefs.begin()->first->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000529 return;
530 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000531
532 // Resolve all forward references now.
533 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
534
535 Values.clear(); // Clear out function local definitions
536 CurrentFunction = 0;
537 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000538 Linkage = GlobalValue::ExternalLinkage;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000539 }
540} CurFun; // Info for the current function...
541
542static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
543
544
545//===----------------------------------------------------------------------===//
546// Code to handle definitions of all the types
547//===----------------------------------------------------------------------===//
548
549static int InsertValue(Value *V,
550 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
551 if (V->hasName()) return -1; // Is this a numbered definition?
552
553 // Yes, insert the value into the value table...
554 ValueList &List = ValueTab[V->getType()];
555 List.push_back(V);
556 return List.size()-1;
557}
558
559static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
560 switch (D.Type) {
561 case ValID::NumberVal: // Is it a numbered definition?
562 // Module constants occupy the lowest numbered slots...
563 if ((unsigned)D.Num < CurModule.Types.size())
Reid Spencer861d9d62006-11-28 07:29:44 +0000564 return CurModule.Types[(unsigned)D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000565 break;
566 case ValID::NameVal: // Is it a named definition?
567 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
568 D.destroy(); // Free old strdup'd memory...
569 return N;
570 }
571 break;
572 default:
Reid Spencer61c83e02006-08-18 08:43:06 +0000573 GenerateError("Internal parser error: Invalid symbol type reference!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000574 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000575 }
576
577 // If we reached here, we referenced either a symbol that we don't know about
578 // or an id number that hasn't been read yet. We may be referencing something
579 // forward, so just create an entry to be resolved later and get to it...
580 //
581 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
582
583
584 if (inFunctionScope()) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000585 if (D.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000586 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000587 return 0;
588 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000589 GenerateError("Reference to an undefined type: #" + itostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000590 return 0;
591 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000592 }
593
Reid Spencer861d9d62006-11-28 07:29:44 +0000594 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000595 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000596 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000597
Reid Spencer861d9d62006-11-28 07:29:44 +0000598 Type *Typ = OpaqueType::get();
599 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
600 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000601 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000602
603static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) {
604 SymbolTable &SymTab =
605 inFunctionScope() ? CurFun.CurrentFunction->getSymbolTable() :
606 CurModule.CurrentModule->getSymbolTable();
607 return SymTab.lookup(Ty, Name);
608}
609
610// getValNonImprovising - Look up the value specified by the provided type and
611// the provided ValID. If the value exists and has already been defined, return
612// it. Otherwise return null.
613//
614static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000615 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000616 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000617 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000618 return 0;
619 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000620
621 switch (D.Type) {
622 case ValID::NumberVal: { // Is it a numbered definition?
623 unsigned Num = (unsigned)D.Num;
624
625 // Module constants occupy the lowest numbered slots...
626 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
627 if (VI != CurModule.Values.end()) {
628 if (Num < VI->second.size())
629 return VI->second[Num];
630 Num -= VI->second.size();
631 }
632
633 // Make sure that our type is within bounds
634 VI = CurFun.Values.find(Ty);
635 if (VI == CurFun.Values.end()) return 0;
636
637 // Check that the number is within bounds...
638 if (VI->second.size() <= Num) return 0;
639
640 return VI->second[Num];
641 }
642
643 case ValID::NameVal: { // Is it a named definition?
644 Value *N = lookupInSymbolTable(Ty, std::string(D.Name));
645 if (N == 0) return 0;
646
647 D.destroy(); // Free old strdup'd memory...
648 return N;
649 }
650
651 // Check to make sure that "Ty" is an integral type, and that our
652 // value will fit into the specified type...
653 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000654 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000655 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000656 itostr(D.ConstPool64) + "' is invalid for type '" +
657 Ty->getDescription() + "'!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000658 return 0;
659 }
Reid Spencerb83eb642006-10-20 07:07:24 +0000660 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000661
662 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000663 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
664 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000665 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000666 "' is invalid or out of range!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000667 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000668 } else { // This is really a signed reference. Transmogrify.
Reid Spencerb83eb642006-10-20 07:07:24 +0000669 return ConstantInt::get(Ty, D.ConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000670 }
671 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000672 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000673 }
674
675 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000676 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000677 GenerateError("FP constant invalid for type!!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000678 return 0;
679 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000680 return ConstantFP::get(Ty, D.ConstPoolFP);
681
682 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000683 if (!isa<PointerType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000684 GenerateError("Cannot create a a non pointer null!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000685 return 0;
686 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000687 return ConstantPointerNull::get(cast<PointerType>(Ty));
688
689 case ValID::ConstUndefVal: // Is it an undef value?
690 return UndefValue::get(Ty);
691
Chris Lattner7aa61892005-12-21 17:53:23 +0000692 case ValID::ConstZeroVal: // Is it a zero value?
693 return Constant::getNullValue(Ty);
694
Reid Spencer68a24bd2005-08-27 18:50:39 +0000695 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000696 if (D.ConstantValue->getType() != Ty) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000697 GenerateError("Constant expression type different from required type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000698 return 0;
699 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000700 return D.ConstantValue;
701
Chris Lattner0e9c3762006-01-25 22:27:16 +0000702 case ValID::InlineAsmVal: { // Inline asm expression
703 const PointerType *PTy = dyn_cast<PointerType>(Ty);
704 const FunctionType *FTy =
705 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000706 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000707 GenerateError("Invalid type for asm constraint string!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000708 return 0;
709 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000710 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
711 D.IAD->HasSideEffects);
712 D.destroy(); // Free InlineAsmDescriptor.
713 return IA;
714 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000715 default:
716 assert(0 && "Unhandled case!");
717 return 0;
718 } // End of switch
719
720 assert(0 && "Unhandled case!");
721 return 0;
722}
723
724// getVal - This function is identical to getValNonImprovising, except that if a
725// value is not already defined, it "improvises" by creating a placeholder var
726// that looks and acts just like the requested variable. When the value is
727// defined later, all uses of the placeholder variable are replaced with the
728// real thing.
729//
730static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000731 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000732 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000733 return 0;
734 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735
736 // See if the value has already been defined.
737 Value *V = getValNonImprovising(Ty, ID);
738 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000739 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000740
Reid Spencer5b7e7532006-09-28 19:28:24 +0000741 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000742 GenerateError("Invalid use of a composite type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 return 0;
744 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000745
746 // If we reached here, we referenced either a symbol that we don't know about
747 // or an id number that hasn't been read yet. We may be referencing something
748 // forward, so just create an entry to be resolved later and get to it...
749 //
750 V = new Argument(Ty);
751
752 // Remember where this forward reference came from. FIXME, shouldn't we try
753 // to recycle these things??
754 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
755 llvmAsmlineno)));
756
757 if (inFunctionScope())
758 InsertValue(V, CurFun.LateResolveValues);
759 else
760 InsertValue(V, CurModule.LateResolveValues);
761 return V;
762}
763
764/// getBBVal - This is used for two purposes:
765/// * If isDefinition is true, a new basic block with the specified ID is being
766/// defined.
767/// * If isDefinition is true, this is a reference to a basic block, which may
768/// or may not be a forward reference.
769///
770static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
771 assert(inFunctionScope() && "Can't get basic block at global scope!");
772
773 std::string Name;
774 BasicBlock *BB = 0;
775 switch (ID.Type) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000776 default:
777 GenerateError("Illegal label reference " + ID.getName());
778 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000779 case ValID::NumberVal: // Is it a numbered definition?
780 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
781 CurFun.NumberedBlocks.resize(ID.Num+1);
782 BB = CurFun.NumberedBlocks[ID.Num];
783 break;
784 case ValID::NameVal: // Is it a named definition?
785 Name = ID.Name;
786 if (Value *N = CurFun.CurrentFunction->
787 getSymbolTable().lookup(Type::LabelTy, Name))
788 BB = cast<BasicBlock>(N);
789 break;
790 }
791
792 // See if the block has already been defined.
793 if (BB) {
794 // If this is the definition of the block, make sure the existing value was
795 // just a forward reference. If it was a forward reference, there will be
796 // an entry for it in the PlaceHolderInfo map.
Reid Spencer5b7e7532006-09-28 19:28:24 +0000797 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000798 // The existing value was a definition, not a forward reference.
Reid Spencer61c83e02006-08-18 08:43:06 +0000799 GenerateError("Redefinition of label " + ID.getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000800 return 0;
801 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000802
803 ID.destroy(); // Free strdup'd memory.
804 return BB;
805 }
806
807 // Otherwise this block has not been seen before.
808 BB = new BasicBlock("", CurFun.CurrentFunction);
809 if (ID.Type == ValID::NameVal) {
810 BB->setName(ID.Name);
811 } else {
812 CurFun.NumberedBlocks[ID.Num] = BB;
813 }
814
815 // If this is not a definition, keep track of it so we can use it as a forward
816 // reference.
817 if (!isDefinition) {
818 // Remember where this forward reference came from.
819 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
820 } else {
821 // The forward declaration could have been inserted anywhere in the
822 // function: insert it into the correct place now.
823 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
824 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
825 }
826 ID.destroy();
827 return BB;
828}
829
830
831//===----------------------------------------------------------------------===//
832// Code to handle forward references in instructions
833//===----------------------------------------------------------------------===//
834//
835// This code handles the late binding needed with statements that reference
836// values not defined yet... for example, a forward branch, or the PHI node for
837// a loop body.
838//
839// This keeps a table (CurFun.LateResolveValues) of all such forward references
840// and back patchs after we are done.
841//
842
843// ResolveDefinitions - If we could not resolve some defs at parsing
844// time (forward branches, phi functions for loops, etc...) resolve the
845// defs now...
846//
847static void
848ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
849 std::map<const Type*,ValueList> *FutureLateResolvers) {
850 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
851 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
852 E = LateResolvers.end(); LRI != E; ++LRI) {
853 ValueList &List = LRI->second;
854 while (!List.empty()) {
855 Value *V = List.back();
856 List.pop_back();
857
858 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
859 CurModule.PlaceHolderInfo.find(V);
860 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
861
862 ValID &DID = PHI->second.first;
863
864 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000865 if (TriggerError)
866 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000867 if (TheRealValue) {
868 V->replaceAllUsesWith(TheRealValue);
869 delete V;
870 CurModule.PlaceHolderInfo.erase(PHI);
871 } else if (FutureLateResolvers) {
872 // Functions have their unresolved items forwarded to the module late
873 // resolver table
874 InsertValue(V, *FutureLateResolvers);
875 } else {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000876 if (DID.Type == ValID::NameVal) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000877 GenerateError("Reference to an invalid definition: '" +DID.getName()+
Reid Spencer68a24bd2005-08-27 18:50:39 +0000878 "' of type '" + V->getType()->getDescription() + "'",
879 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000880 return;
881 } else {
Reid Spencer61c83e02006-08-18 08:43:06 +0000882 GenerateError("Reference to an invalid definition: #" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000883 itostr(DID.Num) + " of type '" +
884 V->getType()->getDescription() + "'",
885 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000886 return;
887 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000888 }
889 }
890 }
891
892 LateResolvers.clear();
893}
894
895// ResolveTypeTo - A brand new type was just declared. This means that (if
896// name is not null) things referencing Name can be resolved. Otherwise, things
897// refering to the number can be resolved. Do this now.
898//
899static void ResolveTypeTo(char *Name, const Type *ToTy) {
900 ValID D;
901 if (Name) D = ValID::create(Name);
902 else D = ValID::create((int)CurModule.Types.size());
903
Reid Spencer861d9d62006-11-28 07:29:44 +0000904 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +0000905 CurModule.LateResolveTypes.find(D);
906 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +0000907 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000908 CurModule.LateResolveTypes.erase(I);
909 }
910}
911
912// setValueName - Set the specified value to the name given. The name may be
913// null potentially, in which case this is a noop. The string passed in is
914// assumed to be a malloc'd string buffer, and is free'd by this function.
915//
916static void setValueName(Value *V, char *NameStr) {
917 if (NameStr) {
918 std::string Name(NameStr); // Copy string
919 free(NameStr); // Free old string
920
Reid Spencer5b7e7532006-09-28 19:28:24 +0000921 if (V->getType() == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000922 GenerateError("Can't assign name '" + Name+"' to value with void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000923 return;
924 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000925
926 assert(inFunctionScope() && "Must be in function scope!");
927 SymbolTable &ST = CurFun.CurrentFunction->getSymbolTable();
Reid Spencer5b7e7532006-09-28 19:28:24 +0000928 if (ST.lookup(V->getType(), Name)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000929 GenerateError("Redefinition of value named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000930 V->getType()->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000931 return;
932 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000933
934 // Set the name.
935 V->setName(Name);
936 }
937}
938
939/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
940/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +0000941static GlobalVariable *
942ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
943 bool isConstantGlobal, const Type *Ty,
944 Constant *Initializer) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000945 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000946 GenerateError("Cannot declare global vars of function type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000947 return 0;
948 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000949
950 const PointerType *PTy = PointerType::get(Ty);
951
952 std::string Name;
953 if (NameStr) {
954 Name = NameStr; // Copy string
955 free(NameStr); // Free old string
956 }
957
958 // See if this global value was forward referenced. If so, recycle the
959 // object.
960 ValID ID;
961 if (!Name.empty()) {
962 ID = ValID::create((char*)Name.c_str());
963 } else {
964 ID = ValID::create((int)CurModule.Values[PTy].size());
965 }
966
967 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
968 // Move the global to the end of the list, from whereever it was
969 // previously inserted.
970 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
971 CurModule.CurrentModule->getGlobalList().remove(GV);
972 CurModule.CurrentModule->getGlobalList().push_back(GV);
973 GV->setInitializer(Initializer);
974 GV->setLinkage(Linkage);
975 GV->setConstant(isConstantGlobal);
976 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +0000977 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000978 }
979
980 // If this global has a name, check to see if there is already a definition
981 // of this global in the module. If so, merge as appropriate. Note that
982 // this is really just a hack around problems in the CFE. :(
983 if (!Name.empty()) {
984 // We are a simple redefinition of a value, check to see if it is defined
985 // the same as the old one.
986 if (GlobalVariable *EGV =
987 CurModule.CurrentModule->getGlobalVariable(Name, Ty)) {
988 // We are allowed to redefine a global variable in two circumstances:
989 // 1. If at least one of the globals is uninitialized or
990 // 2. If both initializers have the same value.
991 //
992 if (!EGV->hasInitializer() || !Initializer ||
993 EGV->getInitializer() == Initializer) {
994
995 // Make sure the existing global version gets the initializer! Make
996 // sure that it also gets marked const if the new version is.
997 if (Initializer && !EGV->hasInitializer())
998 EGV->setInitializer(Initializer);
999 if (isConstantGlobal)
1000 EGV->setConstant(true);
1001 EGV->setLinkage(Linkage);
Chris Lattnerb475c422005-11-12 18:22:38 +00001002 return EGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001003 }
1004
Reid Spencer61c83e02006-08-18 08:43:06 +00001005 GenerateError("Redefinition of global variable named '" + Name +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001006 "' in the '" + Ty->getDescription() + "' type plane!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001007 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001008 }
1009 }
1010
1011 // Otherwise there is no existing GV to use, create one now.
1012 GlobalVariable *GV =
1013 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
1014 CurModule.CurrentModule);
1015 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001016 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001017}
1018
1019// setTypeName - Set the specified type to the name given. The name may be
1020// null potentially, in which case this is a noop. The string passed in is
1021// assumed to be a malloc'd string buffer, and is freed by this function.
1022//
1023// This function returns true if the type has already been defined, but is
1024// allowed to be redefined in the specified context. If the name is a new name
1025// for the type plane, it is inserted and false is returned.
1026static bool setTypeName(const Type *T, char *NameStr) {
1027 assert(!inFunctionScope() && "Can't give types function-local names!");
1028 if (NameStr == 0) return false;
1029
1030 std::string Name(NameStr); // Copy string
1031 free(NameStr); // Free old string
1032
1033 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001034 if (T == Type::VoidTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001035 GenerateError("Can't assign name '" + Name + "' to the void type!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001036 return false;
1037 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001038
1039 // Set the type name, checking for conflicts as we do so.
1040 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1041
1042 if (AlreadyExists) { // Inserting a name that is already defined???
1043 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1044 assert(Existing && "Conflict but no matching type?");
1045
1046 // There is only one case where this is allowed: when we are refining an
1047 // opaque type. In this case, Existing will be an opaque type.
1048 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1049 // We ARE replacing an opaque type!
1050 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1051 return true;
1052 }
1053
1054 // Otherwise, this is an attempt to redefine a type. That's okay if
1055 // the redefinition is identical to the original. This will be so if
1056 // Existing and T point to the same Type object. In this one case we
1057 // allow the equivalent redefinition.
1058 if (Existing == T) return true; // Yes, it's equal.
1059
1060 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer61c83e02006-08-18 08:43:06 +00001061 GenerateError("Redefinition of type named '" + Name + "' in the '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00001062 T->getDescription() + "' type plane!");
1063 }
1064
1065 return false;
1066}
1067
1068//===----------------------------------------------------------------------===//
1069// Code for handling upreferences in type names...
1070//
1071
1072// TypeContains - Returns true if Ty directly contains E in it.
1073//
1074static bool TypeContains(const Type *Ty, const Type *E) {
1075 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1076 E) != Ty->subtype_end();
1077}
1078
1079namespace {
1080 struct UpRefRecord {
1081 // NestingLevel - The number of nesting levels that need to be popped before
1082 // this type is resolved.
1083 unsigned NestingLevel;
1084
1085 // LastContainedTy - This is the type at the current binding level for the
1086 // type. Every time we reduce the nesting level, this gets updated.
1087 const Type *LastContainedTy;
1088
1089 // UpRefTy - This is the actual opaque type that the upreference is
1090 // represented with.
1091 OpaqueType *UpRefTy;
1092
1093 UpRefRecord(unsigned NL, OpaqueType *URTy)
1094 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1095 };
1096}
1097
1098// UpRefs - A list of the outstanding upreferences that need to be resolved.
1099static std::vector<UpRefRecord> UpRefs;
1100
1101/// HandleUpRefs - Every time we finish a new layer of types, this function is
1102/// called. It loops through the UpRefs vector, which is a list of the
1103/// currently active types. For each type, if the up reference is contained in
1104/// the newly completed type, we decrement the level count. When the level
1105/// count reaches zero, the upreferenced type is the type that is passed in:
1106/// thus we can complete the cycle.
1107///
1108static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001109 // If Ty isn't abstract, or if there are no up-references in it, then there is
1110 // nothing to resolve here.
1111 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1112
Reid Spencer68a24bd2005-08-27 18:50:39 +00001113 PATypeHolder Ty(ty);
1114 UR_OUT("Type '" << Ty->getDescription() <<
1115 "' newly formed. Resolving upreferences.\n" <<
1116 UpRefs.size() << " upreferences active!\n");
1117
1118 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1119 // to zero), we resolve them all together before we resolve them to Ty. At
1120 // the end of the loop, if there is anything to resolve to Ty, it will be in
1121 // this variable.
1122 OpaqueType *TypeToResolve = 0;
1123
1124 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1125 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1126 << UpRefs[i].second->getDescription() << ") = "
1127 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1128 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1129 // Decrement level of upreference
1130 unsigned Level = --UpRefs[i].NestingLevel;
1131 UpRefs[i].LastContainedTy = Ty;
1132 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1133 if (Level == 0) { // Upreference should be resolved!
1134 if (!TypeToResolve) {
1135 TypeToResolve = UpRefs[i].UpRefTy;
1136 } else {
1137 UR_OUT(" * Resolving upreference for "
1138 << UpRefs[i].second->getDescription() << "\n";
1139 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1140 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1141 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1142 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1143 }
1144 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1145 --i; // Do not skip the next element...
1146 }
1147 }
1148 }
1149
1150 if (TypeToResolve) {
1151 UR_OUT(" * Resolving upreference for "
1152 << UpRefs[i].second->getDescription() << "\n";
1153 std::string OldName = TypeToResolve->getDescription());
1154 TypeToResolve->refineAbstractTypeTo(Ty);
1155 }
1156
1157 return Ty;
1158}
1159
Reid Spencer68a24bd2005-08-27 18:50:39 +00001160// common code from the two 'RunVMAsmParser' functions
Reid Spencer5b7e7532006-09-28 19:28:24 +00001161static Module* RunParser(Module * M) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001162
1163 llvmAsmlineno = 1; // Reset the current line number...
1164 ObsoleteVarArgs = false;
1165 NewVarArgs = false;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001166 CurModule.CurrentModule = M;
Reid Spencerf63697d2006-10-09 17:36:59 +00001167
1168 // Check to make sure the parser succeeded
1169 if (yyparse()) {
1170 if (ParserResult)
1171 delete ParserResult;
1172 return 0;
1173 }
1174
1175 // Check to make sure that parsing produced a result
Reid Spencer61c83e02006-08-18 08:43:06 +00001176 if (!ParserResult)
1177 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001178
Reid Spencerf63697d2006-10-09 17:36:59 +00001179 // Reset ParserResult variable while saving its value for the result.
Reid Spencer68a24bd2005-08-27 18:50:39 +00001180 Module *Result = ParserResult;
1181 ParserResult = 0;
1182
1183 //Not all functions use vaarg, so make a second check for ObsoleteVarArgs
1184 {
1185 Function* F;
1186 if ((F = Result->getNamedFunction("llvm.va_start"))
1187 && F->getFunctionType()->getNumParams() == 0)
1188 ObsoleteVarArgs = true;
1189 if((F = Result->getNamedFunction("llvm.va_copy"))
1190 && F->getFunctionType()->getNumParams() == 1)
1191 ObsoleteVarArgs = true;
1192 }
1193
Reid Spencer5b7e7532006-09-28 19:28:24 +00001194 if (ObsoleteVarArgs && NewVarArgs) {
1195 GenerateError(
1196 "This file is corrupt: it uses both new and old style varargs");
1197 return 0;
1198 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001199
1200 if(ObsoleteVarArgs) {
1201 if(Function* F = Result->getNamedFunction("llvm.va_start")) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001202 if (F->arg_size() != 0) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001203 GenerateError("Obsolete va_start takes 0 argument!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001204 return 0;
1205 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001206
1207 //foo = va_start()
1208 // ->
1209 //bar = alloca typeof(foo)
1210 //va_start(bar)
1211 //foo = load bar
1212
1213 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1214 const Type* ArgTy = F->getFunctionType()->getReturnType();
1215 const Type* ArgTyPtr = PointerType::get(ArgTy);
1216 Function* NF = Result->getOrInsertFunction("llvm.va_start",
Jeff Cohen66c5fd62005-10-23 04:37:20 +00001217 RetTy, ArgTyPtr, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001218
1219 while (!F->use_empty()) {
1220 CallInst* CI = cast<CallInst>(F->use_back());
1221 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vastart.fix.1", CI);
1222 new CallInst(NF, bar, "", CI);
1223 Value* foo = new LoadInst(bar, "vastart.fix.2", CI);
1224 CI->replaceAllUsesWith(foo);
1225 CI->getParent()->getInstList().erase(CI);
1226 }
1227 Result->getFunctionList().erase(F);
1228 }
1229
1230 if(Function* F = Result->getNamedFunction("llvm.va_end")) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001231 if(F->arg_size() != 1) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001232 GenerateError("Obsolete va_end takes 1 argument!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001233 return 0;
1234 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001235
1236 //vaend foo
1237 // ->
1238 //bar = alloca 1 of typeof(foo)
1239 //vaend bar
1240 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1241 const Type* ArgTy = F->getFunctionType()->getParamType(0);
1242 const Type* ArgTyPtr = PointerType::get(ArgTy);
1243 Function* NF = Result->getOrInsertFunction("llvm.va_end",
Jeff Cohen66c5fd62005-10-23 04:37:20 +00001244 RetTy, ArgTyPtr, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001245
1246 while (!F->use_empty()) {
1247 CallInst* CI = cast<CallInst>(F->use_back());
1248 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vaend.fix.1", CI);
1249 new StoreInst(CI->getOperand(1), bar, CI);
1250 new CallInst(NF, bar, "", CI);
1251 CI->getParent()->getInstList().erase(CI);
1252 }
1253 Result->getFunctionList().erase(F);
1254 }
1255
1256 if(Function* F = Result->getNamedFunction("llvm.va_copy")) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001257 if(F->arg_size() != 1) {
Reid Spencer61c83e02006-08-18 08:43:06 +00001258 GenerateError("Obsolete va_copy takes 1 argument!");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001259 return 0;
1260 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001261 //foo = vacopy(bar)
1262 // ->
1263 //a = alloca 1 of typeof(foo)
1264 //b = alloca 1 of typeof(foo)
1265 //store bar -> b
1266 //vacopy(a, b)
1267 //foo = load a
1268
1269 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1270 const Type* ArgTy = F->getFunctionType()->getReturnType();
1271 const Type* ArgTyPtr = PointerType::get(ArgTy);
1272 Function* NF = Result->getOrInsertFunction("llvm.va_copy",
Jeff Cohen66c5fd62005-10-23 04:37:20 +00001273 RetTy, ArgTyPtr, ArgTyPtr,
1274 (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001275
1276 while (!F->use_empty()) {
1277 CallInst* CI = cast<CallInst>(F->use_back());
1278 AllocaInst* a = new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI);
1279 AllocaInst* b = new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI);
1280 new StoreInst(CI->getOperand(1), b, CI);
1281 new CallInst(NF, a, b, "", CI);
1282 Value* foo = new LoadInst(a, "vacopy.fix.3", CI);
1283 CI->replaceAllUsesWith(foo);
1284 CI->getParent()->getInstList().erase(CI);
1285 }
1286 Result->getFunctionList().erase(F);
1287 }
1288 }
1289
1290 return Result;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001291}
Reid Spencer68a24bd2005-08-27 18:50:39 +00001292
1293//===----------------------------------------------------------------------===//
1294// RunVMAsmParser - Define an interface to this parser
1295//===----------------------------------------------------------------------===//
1296//
1297Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1298 set_scan_file(F);
1299
1300 CurFilename = Filename;
1301 return RunParser(new Module(CurFilename));
1302}
1303
1304Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1305 set_scan_string(AsmString);
1306
1307 CurFilename = "from_memory";
1308 if (M == NULL) {
1309 return RunParser(new Module (CurFilename));
1310 } else {
1311 return RunParser(M);
1312 }
1313}
1314
1315
Reid Spencer3822ff52006-11-08 06:47:33 +00001316
1317/* Enabling traces. */
1318#ifndef YYDEBUG
1319# define YYDEBUG 0
1320#endif
1321
1322/* Enabling verbose error messages. */
1323#ifdef YYERROR_VERBOSE
1324# undef YYERROR_VERBOSE
1325# define YYERROR_VERBOSE 1
1326#else
1327# define YYERROR_VERBOSE 0
1328#endif
1329
1330/* Enabling the token table. */
1331#ifndef YYTOKEN_TABLE
1332# define YYTOKEN_TABLE 0
1333#endif
1334
1335#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencer4012e832006-12-04 05:24:24 +00001336#line 967 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00001337typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001338 llvm::Module *ModuleVal;
1339 llvm::Function *FunctionVal;
Reid Spencera132e042006-12-03 05:46:11 +00001340 std::pair<llvm::PATypeHolder*, char*> *ArgVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001341 llvm::BasicBlock *BasicBlockVal;
1342 llvm::TerminatorInst *TermInstVal;
1343 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001344 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001345
Reid Spencera132e042006-12-03 05:46:11 +00001346 const llvm::Type *PrimType;
1347 llvm::PATypeHolder *TypeVal;
1348 llvm::Value *ValueVal;
1349
1350 std::vector<std::pair<llvm::PATypeHolder*,char*> > *ArgList;
1351 std::vector<llvm::Value*> *ValueList;
1352 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001353 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001354 std::list<std::pair<llvm::Value*,
1355 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001356 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001357 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001358
1359 llvm::GlobalValue::LinkageTypes Linkage;
1360 int64_t SInt64Val;
1361 uint64_t UInt64Val;
1362 int SIntVal;
1363 unsigned UIntVal;
1364 double FPVal;
1365 bool BoolVal;
1366
1367 char *StrVal; // This memory is strdup'd!
Reid Spencer1628cec2006-10-26 06:15:43 +00001368 llvm::ValID ValIDVal; // strdup'd memory maybe!
Reid Spencer68a24bd2005-08-27 18:50:39 +00001369
Reid Spencera132e042006-12-03 05:46:11 +00001370 llvm::Instruction::BinaryOps BinaryOpVal;
1371 llvm::Instruction::TermOps TermOpVal;
1372 llvm::Instruction::MemoryOps MemOpVal;
1373 llvm::Instruction::CastOps CastOpVal;
1374 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencer1628cec2006-10-26 06:15:43 +00001375 llvm::Module::Endianness Endianness;
Reid Spencera132e042006-12-03 05:46:11 +00001376 llvm::ICmpInst::Predicate IPredicate;
1377 llvm::FCmpInst::Predicate FPredicate;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001378} YYSTYPE;
Reid Spencer3822ff52006-11-08 06:47:33 +00001379/* Line 196 of yacc.c. */
Reid Spencer13cf7b62006-12-03 16:20:14 +00001380#line 1381 "llvmAsmParser.tab.c"
Reid Spencer3822ff52006-11-08 06:47:33 +00001381# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1382# define YYSTYPE_IS_DECLARED 1
1383# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001384#endif
1385
1386
1387
Reid Spencer3822ff52006-11-08 06:47:33 +00001388/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001389
1390
Reid Spencer3822ff52006-11-08 06:47:33 +00001391/* Line 219 of yacc.c. */
Reid Spencer13cf7b62006-12-03 16:20:14 +00001392#line 1393 "llvmAsmParser.tab.c"
Reid Spencer68a24bd2005-08-27 18:50:39 +00001393
Reid Spencer3822ff52006-11-08 06:47:33 +00001394#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1395# define YYSIZE_T __SIZE_TYPE__
1396#endif
1397#if ! defined (YYSIZE_T) && defined (size_t)
1398# define YYSIZE_T size_t
1399#endif
1400#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1401# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1402# define YYSIZE_T size_t
1403#endif
1404#if ! defined (YYSIZE_T)
1405# define YYSIZE_T unsigned int
1406#endif
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001407
Reid Spencer3822ff52006-11-08 06:47:33 +00001408#ifndef YY_
1409# if YYENABLE_NLS
1410# if ENABLE_NLS
1411# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1412# define YY_(msgid) dgettext ("bison-runtime", msgid)
1413# endif
1414# endif
1415# ifndef YY_
1416# define YY_(msgid) msgid
1417# endif
1418#endif
1419
1420#if ! defined (yyoverflow) || YYERROR_VERBOSE
1421
1422/* The parser invokes alloca or malloc; define the necessary symbols. */
1423
1424# ifdef YYSTACK_USE_ALLOCA
1425# if YYSTACK_USE_ALLOCA
1426# ifdef __GNUC__
1427# define YYSTACK_ALLOC __builtin_alloca
1428# else
1429# define YYSTACK_ALLOC alloca
1430# if defined (__STDC__) || defined (__cplusplus)
1431# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1432# define YYINCLUDED_STDLIB_H
1433# endif
1434# endif
1435# endif
1436# endif
1437
1438# ifdef YYSTACK_ALLOC
1439 /* Pacify GCC's `empty if-body' warning. */
1440# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1441# ifndef YYSTACK_ALLOC_MAXIMUM
1442 /* The OS might guarantee only one guard page at the bottom of the stack,
1443 and a page size can be as small as 4096 bytes. So we cannot safely
1444 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1445 to allow for a few compiler-allocated temporary stack slots. */
1446# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1447# endif
1448# else
1449# define YYSTACK_ALLOC YYMALLOC
1450# define YYSTACK_FREE YYFREE
1451# ifndef YYSTACK_ALLOC_MAXIMUM
1452# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1453# endif
1454# ifdef __cplusplus
1455extern "C" {
1456# endif
1457# ifndef YYMALLOC
1458# define YYMALLOC malloc
1459# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1460 && (defined (__STDC__) || defined (__cplusplus)))
1461void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1462# endif
1463# endif
1464# ifndef YYFREE
1465# define YYFREE free
1466# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1467 && (defined (__STDC__) || defined (__cplusplus)))
1468void free (void *); /* INFRINGES ON USER NAME SPACE */
1469# endif
1470# endif
1471# ifdef __cplusplus
1472}
1473# endif
1474# endif
1475#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1476
1477
1478#if (! defined (yyoverflow) \
1479 && (! defined (__cplusplus) \
1480 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1481
1482/* A type that is properly aligned for any stack member. */
1483union yyalloc
1484{
1485 short int yyss;
1486 YYSTYPE yyvs;
1487 };
1488
1489/* The size of the maximum gap between one aligned stack and the next. */
1490# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1491
1492/* The size of an array large to enough to hold all stacks, each with
1493 N elements. */
1494# define YYSTACK_BYTES(N) \
1495 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1496 + YYSTACK_GAP_MAXIMUM)
1497
1498/* Copy COUNT objects from FROM to TO. The source and destination do
1499 not overlap. */
1500# ifndef YYCOPY
1501# if defined (__GNUC__) && 1 < __GNUC__
1502# define YYCOPY(To, From, Count) \
1503 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1504# else
1505# define YYCOPY(To, From, Count) \
1506 do \
1507 { \
1508 YYSIZE_T yyi; \
1509 for (yyi = 0; yyi < (Count); yyi++) \
1510 (To)[yyi] = (From)[yyi]; \
1511 } \
1512 while (0)
1513# endif
1514# endif
1515
1516/* Relocate STACK from its old location to the new one. The
1517 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1518 elements in the stack, and YYPTR gives the new location of the
1519 stack. Advance YYPTR to a properly aligned location for the next
1520 stack. */
1521# define YYSTACK_RELOCATE(Stack) \
1522 do \
1523 { \
1524 YYSIZE_T yynewbytes; \
1525 YYCOPY (&yyptr->Stack, Stack, yysize); \
1526 Stack = &yyptr->Stack; \
1527 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1528 yyptr += yynewbytes / sizeof (*yyptr); \
1529 } \
1530 while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00001531
1532#endif
1533
Reid Spencer3822ff52006-11-08 06:47:33 +00001534#if defined (__STDC__) || defined (__cplusplus)
1535 typedef signed char yysigned_char;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001536#else
Reid Spencer3822ff52006-11-08 06:47:33 +00001537 typedef short int yysigned_char;
Reid Spencer5b7e7532006-09-28 19:28:24 +00001538#endif
1539
Reid Spencer3822ff52006-11-08 06:47:33 +00001540/* YYFINAL -- State number of the termination state. */
1541#define YYFINAL 4
1542/* YYLAST -- Last index in YYTABLE. */
Reid Spencer4012e832006-12-04 05:24:24 +00001543#define YYLAST 1556
Reid Spencer3822ff52006-11-08 06:47:33 +00001544
1545/* YYNTOKENS -- Number of terminals. */
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001546#define YYNTOKENS 161
Reid Spencer3822ff52006-11-08 06:47:33 +00001547/* YYNNTS -- Number of nonterminals. */
Reid Spencera132e042006-12-03 05:46:11 +00001548#define YYNNTS 78
Reid Spencer3822ff52006-11-08 06:47:33 +00001549/* YYNRULES -- Number of rules. */
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001550#define YYNRULES 299
Reid Spencer3822ff52006-11-08 06:47:33 +00001551/* YYNRULES -- Number of states. */
Reid Spencer4012e832006-12-04 05:24:24 +00001552#define YYNSTATES 586
Reid Spencer3822ff52006-11-08 06:47:33 +00001553
1554/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1555#define YYUNDEFTOK 2
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001556#define YYMAXUTOK 401
Reid Spencer3822ff52006-11-08 06:47:33 +00001557
1558#define YYTRANSLATE(YYX) \
1559 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1560
1561/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1562static const unsigned char yytranslate[] =
1563{
1564 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1565 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1566 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1567 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001568 150, 151, 159, 2, 148, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001569 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001570 155, 147, 156, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001571 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1572 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001573 2, 152, 149, 154, 2, 2, 2, 2, 2, 160,
Reid Spencer3822ff52006-11-08 06:47:33 +00001574 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1575 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001576 153, 2, 2, 157, 2, 158, 2, 2, 2, 2,
Reid Spencer3822ff52006-11-08 06:47:33 +00001577 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1578 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1579 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1580 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1581 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1582 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1583 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1584 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1585 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1586 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1587 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1588 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1589 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1590 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1591 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1592 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1593 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1594 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1595 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1596 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1597 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1598 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1599 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
Reid Spencer3da59db2006-11-27 01:05:10 +00001600 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
Reid Spencera132e042006-12-03 05:46:11 +00001601 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1602 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1603 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001604 145, 146
Reid Spencer3822ff52006-11-08 06:47:33 +00001605};
1606
1607#if YYDEBUG
1608/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1609 YYRHS. */
1610static const unsigned short int yyprhs[] =
1611{
1612 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1613 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1614 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1615 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
Reid Spencer3da59db2006-11-27 01:05:10 +00001616 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
Reid Spencera132e042006-12-03 05:46:11 +00001617 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1618 119, 121, 123, 125, 127, 129, 131, 133, 135, 137,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001619 139, 141, 143, 145, 147, 149, 151, 153, 156, 157,
1620 159, 161, 163, 165, 167, 169, 171, 172, 173, 175,
1621 177, 179, 181, 183, 185, 188, 189, 192, 193, 197,
1622 200, 201, 203, 204, 208, 210, 213, 215, 217, 219,
Reid Spencera132e042006-12-03 05:46:11 +00001623 221, 223, 225, 227, 229, 231, 233, 235, 237, 239,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001624 241, 243, 245, 247, 249, 251, 253, 255, 258, 263,
1625 269, 275, 279, 282, 285, 287, 291, 293, 297, 299,
1626 300, 305, 309, 313, 318, 323, 327, 330, 333, 336,
1627 339, 342, 345, 348, 351, 354, 357, 364, 370, 379,
Reid Spencer4012e832006-12-04 05:24:24 +00001628 386, 393, 400, 408, 416, 423, 430, 439, 448, 452,
1629 454, 456, 458, 460, 463, 466, 471, 474, 476, 481,
1630 484, 489, 490, 498, 499, 507, 508, 516, 517, 525,
1631 529, 534, 535, 537, 539, 541, 545, 549, 553, 557,
1632 561, 565, 567, 568, 570, 572, 574, 575, 578, 582,
1633 584, 586, 590, 592, 593, 602, 604, 606, 610, 612,
1634 614, 617, 618, 620, 622, 623, 628, 629, 631, 633,
1635 635, 637, 639, 641, 643, 645, 647, 651, 653, 659,
1636 661, 663, 665, 667, 670, 673, 676, 680, 683, 684,
1637 686, 689, 692, 696, 706, 716, 725, 739, 741, 743,
1638 750, 756, 759, 766, 774, 776, 780, 782, 783, 786,
1639 788, 794, 800, 806, 813, 820, 823, 828, 833, 840,
1640 845, 850, 855, 860, 867, 874, 877, 885, 887, 890,
1641 891, 893, 894, 898, 905, 909, 916, 919, 924, 931
Reid Spencer3822ff52006-11-08 06:47:33 +00001642};
1643
1644/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1645static const short int yyrhs[] =
1646{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001647 195, 0, -1, 5, -1, 6, -1, 3, -1, 4,
Reid Spencer3822ff52006-11-08 06:47:33 +00001648 -1, 78, -1, 79, -1, 80, -1, 81, -1, 82,
1649 -1, 83, -1, 84, -1, 85, -1, 86, -1, 87,
1650 -1, 88, -1, 89, -1, 90, -1, 91, -1, 92,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001651 -1, 93, -1, 94, -1, 95, -1, 124, -1, 125,
1652 -1, 126, -1, 127, -1, 128, -1, 129, -1, 130,
1653 -1, 131, -1, 132, -1, 133, -1, 134, -1, 135,
1654 -1, 138, -1, 139, -1, 140, -1, 98, -1, 99,
Reid Spencera132e042006-12-03 05:46:11 +00001655 -1, 100, -1, 101, -1, 102, -1, 103, -1, 104,
1656 -1, 105, -1, 106, -1, 107, -1, 108, -1, 109,
1657 -1, 110, -1, 111, -1, 112, -1, 113, -1, 114,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001658 -1, 115, -1, 116, -1, 117, -1, 104, -1, 105,
1659 -1, 106, -1, 107, -1, 27, -1, 28, -1, 16,
1660 -1, 14, -1, 12, -1, 10, -1, 17, -1, 15,
1661 -1, 13, -1, 11, -1, 171, -1, 172, -1, 18,
1662 -1, 19, -1, 207, 147, -1, -1, 41, -1, 42,
1663 -1, 43, -1, 44, -1, 45, -1, 46, -1, 47,
1664 -1, -1, -1, 65, -1, 66, -1, 67, -1, 68,
1665 -1, 69, -1, 70, -1, 64, 4, -1, -1, 57,
1666 4, -1, -1, 148, 57, 4, -1, 34, 24, -1,
1667 -1, 180, -1, -1, 148, 183, 182, -1, 180, -1,
1668 57, 4, -1, 186, -1, 8, -1, 188, -1, 8,
1669 -1, 188, -1, 9, -1, 10, -1, 11, -1, 12,
1670 -1, 13, -1, 14, -1, 15, -1, 16, -1, 17,
1671 -1, 18, -1, 19, -1, 20, -1, 21, -1, 48,
1672 -1, 187, -1, 222, -1, 149, 4, -1, 185, 150,
1673 190, 151, -1, 152, 4, 153, 188, 154, -1, 155,
1674 4, 153, 188, 156, -1, 157, 189, 158, -1, 157,
1675 158, -1, 188, 159, -1, 188, -1, 189, 148, 188,
1676 -1, 189, -1, 189, 148, 37, -1, 37, -1, -1,
1677 186, 152, 193, 154, -1, 186, 152, 154, -1, 186,
1678 160, 24, -1, 186, 155, 193, 156, -1, 186, 157,
1679 193, 158, -1, 186, 157, 158, -1, 186, 38, -1,
1680 186, 39, -1, 186, 222, -1, 186, 192, -1, 186,
1681 26, -1, 171, 163, -1, 172, 4, -1, 9, 27,
1682 -1, 9, 28, -1, 174, 7, -1, 167, 150, 191,
1683 36, 186, 151, -1, 123, 150, 191, 236, 151, -1,
1684 137, 150, 191, 148, 191, 148, 191, 151, -1, 164,
1685 150, 191, 148, 191, 151, -1, 165, 150, 191, 148,
1686 191, 151, -1, 166, 150, 191, 148, 191, 151, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00001687 96, 169, 150, 191, 148, 191, 151, -1, 97, 170,
1688 150, 191, 148, 191, 151, -1, 168, 150, 191, 148,
1689 191, 151, -1, 142, 150, 191, 148, 191, 151, -1,
1690 143, 150, 191, 148, 191, 148, 191, 151, -1, 144,
1691 150, 191, 148, 191, 148, 191, 151, -1, 193, 148,
1692 191, -1, 191, -1, 32, -1, 33, -1, 196, -1,
1693 196, 216, -1, 196, 218, -1, 196, 62, 61, 202,
1694 -1, 196, 25, -1, 197, -1, 197, 175, 20, 184,
1695 -1, 197, 218, -1, 197, 62, 61, 202, -1, -1,
1696 197, 175, 176, 194, 191, 198, 182, -1, -1, 197,
1697 175, 50, 194, 186, 199, 182, -1, -1, 197, 175,
1698 45, 194, 186, 200, 182, -1, -1, 197, 175, 47,
1699 194, 186, 201, 182, -1, 197, 51, 204, -1, 197,
1700 58, 147, 205, -1, -1, 24, -1, 56, -1, 55,
1701 -1, 53, 147, 203, -1, 54, 147, 4, -1, 52,
1702 147, 24, -1, 71, 147, 24, -1, 152, 206, 154,
1703 -1, 206, 148, 24, -1, 24, -1, -1, 22, -1,
1704 24, -1, 207, -1, -1, 186, 208, -1, 210, 148,
1705 209, -1, 209, -1, 210, -1, 210, 148, 37, -1,
1706 37, -1, -1, 177, 184, 207, 150, 211, 151, 181,
1707 178, -1, 29, -1, 157, -1, 176, 212, 213, -1,
1708 30, -1, 158, -1, 225, 215, -1, -1, 45, -1,
1709 47, -1, -1, 31, 219, 217, 212, -1, -1, 63,
1710 -1, 3, -1, 4, -1, 7, -1, 27, -1, 28,
1711 -1, 38, -1, 39, -1, 26, -1, 155, 193, 156,
1712 -1, 192, -1, 61, 220, 24, 148, 24, -1, 162,
1713 -1, 207, -1, 222, -1, 221, -1, 186, 223, -1,
1714 225, 226, -1, 214, 226, -1, 227, 175, 228, -1,
1715 227, 230, -1, -1, 23, -1, 72, 224, -1, 72,
1716 8, -1, 73, 21, 223, -1, 73, 9, 223, 148,
1717 21, 223, 148, 21, 223, -1, 74, 173, 223, 148,
1718 21, 223, 152, 229, 154, -1, 74, 173, 223, 148,
1719 21, 223, 152, 154, -1, 75, 177, 184, 223, 150,
1720 233, 151, 36, 21, 223, 76, 21, 223, -1, 76,
1721 -1, 77, -1, 229, 173, 221, 148, 21, 223, -1,
1722 173, 221, 148, 21, 223, -1, 175, 235, -1, 186,
1723 152, 223, 148, 223, 154, -1, 231, 148, 152, 223,
1724 148, 223, 154, -1, 224, -1, 232, 148, 224, -1,
1725 232, -1, -1, 60, 59, -1, 59, -1, 164, 186,
1726 223, 148, 223, -1, 165, 186, 223, 148, 223, -1,
1727 166, 186, 223, 148, 223, -1, 96, 169, 186, 223,
1728 148, 223, -1, 97, 170, 186, 223, 148, 223, -1,
1729 49, 224, -1, 168, 224, 148, 224, -1, 167, 224,
1730 36, 186, -1, 137, 224, 148, 224, 148, 224, -1,
1731 141, 224, 148, 186, -1, 145, 224, 148, 186, -1,
1732 146, 224, 148, 186, -1, 142, 224, 148, 224, -1,
1733 143, 224, 148, 224, 148, 224, -1, 144, 224, 148,
1734 224, 148, 224, -1, 136, 231, -1, 234, 177, 184,
1735 223, 150, 233, 151, -1, 238, -1, 148, 232, -1,
1736 -1, 35, -1, -1, 118, 186, 179, -1, 118, 186,
1737 148, 15, 223, 179, -1, 119, 186, 179, -1, 119,
1738 186, 148, 15, 223, 179, -1, 120, 224, -1, 237,
1739 121, 186, 223, -1, 237, 122, 224, 148, 186, 223,
1740 -1, 123, 186, 223, 236, -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001741};
1742
1743/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1744static const unsigned short int yyrline[] =
1745{
Reid Spencer13cf7b62006-12-03 16:20:14 +00001746 0, 1103, 1103, 1104, 1112, 1113, 1123, 1123, 1123, 1123,
1747 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, 1125, 1125,
1748 1125, 1125, 1125, 1125, 1126, 1126, 1126, 1126, 1126, 1126,
1749 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1128, 1130,
1750 1130, 1131, 1131, 1132, 1132, 1133, 1133, 1134, 1134, 1138,
1751 1138, 1139, 1139, 1140, 1140, 1141, 1141, 1142, 1142, 1143,
1752 1143, 1144, 1144, 1145, 1146, 1151, 1151, 1151, 1151, 1152,
1753 1152, 1152, 1152, 1153, 1153, 1154, 1154, 1157, 1161, 1166,
1754 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1175, 1176, 1177,
1755 1178, 1179, 1180, 1181, 1182, 1191, 1192, 1198, 1199, 1207,
1756 1215, 1216, 1221, 1222, 1223, 1228, 1242, 1242, 1243, 1243,
1757 1245, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1256, 1256,
1758 1256, 1256, 1256, 1256, 1257, 1261, 1265, 1273, 1281, 1294,
1759 1299, 1311, 1321, 1325, 1336, 1341, 1347, 1348, 1352, 1356,
1760 1367, 1393, 1407, 1437, 1463, 1484, 1497, 1507, 1512, 1573,
1761 1580, 1588, 1594, 1600, 1604, 1608, 1616, 1628, 1660, 1668,
1762 1692, 1703, 1709, 1714, 1719, 1728, 1734, 1740, 1749, 1753,
1763 1761, 1761, 1771, 1779, 1784, 1788, 1792, 1796, 1811, 1833,
1764 1836, 1839, 1839, 1847, 1847, 1855, 1855, 1863, 1863, 1872,
1765 1875, 1878, 1882, 1895, 1896, 1898, 1902, 1911, 1915, 1920,
1766 1922, 1927, 1932, 1941, 1941, 1942, 1942, 1944, 1951, 1957,
1767 1964, 1968, 1974, 1979, 1984, 2079, 2079, 2081, 2089, 2089,
1768 2091, 2096, 2097, 2098, 2100, 2100, 2110, 2114, 2119, 2123,
1769 2127, 2131, 2135, 2139, 2143, 2147, 2151, 2176, 2180, 2194,
1770 2198, 2204, 2204, 2210, 2215, 2219, 2228, 2239, 2248, 2260,
1771 2273, 2277, 2281, 2286, 2295, 2314, 2323, 2379, 2383, 2390,
1772 2401, 2414, 2423, 2432, 2442, 2446, 2453, 2453, 2455, 2459,
1773 2464, 2483, 2498, 2512, 2523, 2534, 2547, 2556, 2567, 2575,
1774 2581, 2601, 2624, 2630, 2636, 2642, 2657, 2716, 2723, 2726,
1775 2731, 2735, 2742, 2747, 2753, 2758, 2764, 2772, 2784, 2799
Reid Spencer3822ff52006-11-08 06:47:33 +00001776};
1777#endif
1778
1779#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1780/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1781 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1782static const char *const yytname[] =
1783{
1784 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
1785 "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
1786 "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
1787 "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
1788 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1789 "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1790 "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
1791 "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1792 "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
1793 "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
1794 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
1795 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1796 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1797 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
Reid Spencera132e042006-12-03 05:46:11 +00001798 "XOR", "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "ICMP",
1799 "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE",
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001800 "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ",
1801 "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR",
1802 "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP",
1803 "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK",
1804 "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
1805 "INSERTELEMENT", "SHUFFLEVECTOR", "VAARG_old", "VANEXT_old", "'='",
1806 "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'",
1807 "'}'", "'*'", "'c'", "$accept", "INTVAL", "EINT64VAL", "ArithmeticOps",
1808 "LogicalOps", "SetCondOps", "CastOps", "ShiftOps", "IPredicates",
1809 "FPredicates", "SIntType", "UIntType", "IntType", "FPType", "OptAssign",
1810 "OptLinkage", "OptCallingConv", "OptAlign", "OptCAlign", "SectionString",
1811 "OptSection", "GlobalVarAttributes", "GlobalVarAttribute", "TypesV",
1812 "UpRTypesV", "Types", "PrimType", "UpRTypes", "TypeListI",
1813 "ArgTypeListI", "ConstVal", "ConstExpr", "ConstVector", "GlobalType",
1814 "Module", "FunctionList", "ConstPool", "@1", "@2", "@3", "@4",
1815 "AsmBlock", "BigOrLittle", "TargetDefinition", "LibrariesDefinition",
1816 "LibList", "Name", "OptName", "ArgVal", "ArgListH", "ArgList",
1817 "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", "Function",
1818 "FnDeclareLinkage", "FunctionProto", "@5", "OptSideEffect",
1819 "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
1820 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
1821 "JumpTable", "Inst", "PHIList", "ValueRefList", "ValueRefListE",
1822 "OptTailCall", "InstVal", "IndexList", "OptVolatile", "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001823};
1824#endif
1825
1826# ifdef YYPRINT
1827/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1828 token YYLEX-NUM. */
1829static const unsigned short int yytoknum[] =
1830{
1831 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1832 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1833 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1834 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1835 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1836 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1837 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1838 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1839 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1840 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1841 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001842 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001843 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1844 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001845 395, 396, 397, 398, 399, 400, 401, 61, 44, 92,
1846 40, 41, 91, 120, 93, 60, 62, 123, 125, 42,
1847 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001848};
1849# endif
1850
1851/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1852static const unsigned char yyr1[] =
1853{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001854 0, 161, 162, 162, 163, 163, 164, 164, 164, 164,
1855 164, 164, 164, 164, 164, 165, 165, 165, 166, 166,
1856 166, 166, 166, 166, 167, 167, 167, 167, 167, 167,
1857 167, 167, 167, 167, 167, 167, 168, 168, 168, 169,
1858 169, 169, 169, 169, 169, 169, 169, 169, 169, 170,
1859 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
1860 170, 170, 170, 170, 170, 171, 171, 171, 171, 172,
1861 172, 172, 172, 173, 173, 174, 174, 175, 175, 176,
1862 176, 176, 176, 176, 176, 176, 176, 177, 177, 177,
1863 177, 177, 177, 177, 177, 178, 178, 179, 179, 180,
1864 181, 181, 182, 182, 183, 183, 184, 184, 185, 185,
1865 186, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1866 187, 187, 187, 187, 188, 188, 188, 188, 188, 188,
1867 188, 188, 188, 188, 189, 189, 190, 190, 190, 190,
Reid Spencera132e042006-12-03 05:46:11 +00001868 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001869 191, 191, 191, 191, 191, 191, 192, 192, 192, 192,
1870 192, 192, 192, 192, 192, 192, 192, 192, 193, 193,
1871 194, 194, 195, 196, 196, 196, 196, 196, 197, 197,
1872 197, 198, 197, 199, 197, 200, 197, 201, 197, 197,
1873 197, 197, 202, 203, 203, 204, 204, 204, 204, 205,
1874 206, 206, 206, 207, 207, 208, 208, 209, 210, 210,
1875 211, 211, 211, 211, 212, 213, 213, 214, 215, 215,
1876 216, 217, 217, 217, 219, 218, 220, 220, 221, 221,
1877 221, 221, 221, 221, 221, 221, 221, 221, 221, 222,
1878 222, 223, 223, 224, 225, 225, 226, 227, 227, 227,
1879 228, 228, 228, 228, 228, 228, 228, 228, 228, 229,
1880 229, 230, 231, 231, 232, 232, 233, 233, 234, 234,
1881 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1882 235, 235, 235, 235, 235, 235, 235, 235, 236, 236,
1883 237, 237, 238, 238, 238, 238, 238, 238, 238, 238
Reid Spencer3822ff52006-11-08 06:47:33 +00001884};
1885
1886/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1887static const unsigned char yyr2[] =
1888{
1889 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1890 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1891 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001892 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001893 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001894 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1895 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001896 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1897 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1898 1, 1, 1, 1, 2, 0, 2, 0, 3, 2,
1899 0, 1, 0, 3, 1, 2, 1, 1, 1, 1,
Reid Spencera132e042006-12-03 05:46:11 +00001900 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001901 1, 1, 1, 1, 1, 1, 1, 2, 4, 5,
1902 5, 3, 2, 2, 1, 3, 1, 3, 1, 0,
1903 4, 3, 3, 4, 4, 3, 2, 2, 2, 2,
1904 2, 2, 2, 2, 2, 2, 6, 5, 8, 6,
Reid Spencer4012e832006-12-04 05:24:24 +00001905 6, 6, 7, 7, 6, 6, 8, 8, 3, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001906 1, 1, 1, 2, 2, 4, 2, 1, 4, 2,
1907 4, 0, 7, 0, 7, 0, 7, 0, 7, 3,
1908 4, 0, 1, 1, 1, 3, 3, 3, 3, 3,
1909 3, 1, 0, 1, 1, 1, 0, 2, 3, 1,
1910 1, 3, 1, 0, 8, 1, 1, 3, 1, 1,
1911 2, 0, 1, 1, 0, 4, 0, 1, 1, 1,
1912 1, 1, 1, 1, 1, 1, 3, 1, 5, 1,
1913 1, 1, 1, 2, 2, 2, 3, 2, 0, 1,
1914 2, 2, 3, 9, 9, 8, 13, 1, 1, 6,
1915 5, 2, 6, 7, 1, 3, 1, 0, 2, 1,
1916 5, 5, 5, 6, 6, 2, 4, 4, 6, 4,
1917 4, 4, 4, 6, 6, 2, 7, 1, 2, 0,
1918 1, 0, 3, 6, 3, 6, 2, 4, 6, 4
Reid Spencer3822ff52006-11-08 06:47:33 +00001919};
1920
1921/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1922 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1923 means the default is an error. */
1924static const unsigned short int yydefact[] =
1925{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001926 191, 0, 86, 177, 1, 176, 224, 79, 80, 81,
1927 82, 83, 84, 85, 0, 87, 248, 173, 174, 248,
1928 203, 204, 0, 0, 0, 86, 0, 179, 221, 0,
1929 0, 88, 89, 90, 91, 92, 93, 0, 0, 249,
1930 245, 78, 218, 219, 220, 244, 0, 0, 0, 0,
1931 189, 0, 0, 0, 0, 0, 0, 0, 77, 222,
1932 223, 87, 192, 175, 94, 2, 3, 107, 111, 112,
1933 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
1934 123, 124, 0, 0, 0, 0, 239, 0, 0, 106,
1935 125, 110, 240, 126, 215, 216, 217, 291, 247, 0,
1936 0, 0, 0, 202, 190, 180, 178, 170, 171, 0,
1937 0, 0, 0, 225, 127, 0, 0, 109, 132, 134,
1938 0, 0, 139, 133, 290, 0, 269, 0, 0, 0,
1939 0, 87, 257, 258, 6, 7, 8, 9, 10, 11,
Reid Spencer3822ff52006-11-08 06:47:33 +00001940 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
Reid Spencera132e042006-12-03 05:46:11 +00001941 22, 23, 0, 0, 0, 0, 0, 0, 24, 25,
1942 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1943 0, 0, 36, 37, 38, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001944 0, 0, 0, 0, 0, 0, 246, 87, 261, 0,
1945 287, 197, 194, 193, 195, 196, 198, 201, 0, 185,
1946 187, 183, 111, 112, 113, 114, 115, 116, 117, 118,
1947 119, 120, 121, 0, 0, 0, 0, 181, 0, 0,
1948 0, 131, 213, 138, 136, 0, 0, 275, 268, 251,
1949 250, 0, 0, 68, 72, 67, 71, 66, 70, 65,
1950 69, 73, 74, 0, 0, 39, 40, 41, 42, 43,
1951 44, 45, 46, 47, 48, 0, 63, 64, 59, 60,
1952 61, 62, 49, 50, 51, 52, 53, 54, 55, 56,
1953 57, 58, 0, 97, 97, 296, 0, 0, 285, 0,
Reid Spencer3822ff52006-11-08 06:47:33 +00001954 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001955 0, 0, 0, 0, 0, 199, 102, 102, 102, 153,
1956 154, 4, 5, 151, 152, 155, 150, 146, 147, 0,
Reid Spencer3822ff52006-11-08 06:47:33 +00001957 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001958 0, 0, 0, 0, 0, 149, 148, 102, 108, 108,
1959 135, 212, 206, 209, 210, 0, 0, 128, 228, 229,
1960 230, 235, 231, 232, 233, 234, 226, 0, 237, 242,
1961 241, 243, 0, 252, 0, 0, 0, 0, 0, 292,
1962 0, 294, 289, 0, 0, 0, 0, 0, 0, 0,
1963 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1964 200, 0, 186, 188, 184, 0, 0, 0, 0, 0,
1965 0, 0, 141, 169, 0, 0, 145, 0, 142, 0,
1966 0, 0, 0, 0, 182, 129, 130, 205, 207, 0,
1967 100, 137, 227, 0, 0, 0, 0, 0, 0, 0,
1968 0, 0, 0, 0, 299, 0, 0, 0, 279, 282,
1969 0, 0, 280, 281, 0, 0, 0, 277, 276, 0,
1970 297, 0, 0, 0, 104, 102, 0, 0, 289, 0,
1971 0, 0, 0, 0, 140, 143, 144, 0, 0, 0,
1972 0, 0, 211, 208, 101, 95, 0, 236, 0, 0,
1973 267, 0, 0, 97, 98, 97, 264, 288, 0, 0,
1974 0, 0, 0, 270, 271, 272, 267, 0, 99, 105,
1975 103, 0, 0, 0, 0, 0, 0, 0, 168, 0,
1976 0, 0, 0, 0, 0, 214, 0, 0, 0, 266,
1977 0, 273, 274, 0, 293, 295, 0, 0, 0, 278,
1978 283, 284, 0, 298, 0, 0, 157, 0, 0, 0,
1979 0, 0, 0, 0, 0, 0, 96, 238, 0, 0,
1980 0, 265, 262, 0, 286, 0, 0, 0, 165, 0,
1981 0, 159, 160, 161, 156, 164, 0, 255, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00001982 0, 263, 162, 163, 0, 0, 0, 253, 0, 254,
1983 0, 0, 158, 166, 167, 0, 0, 0, 0, 0,
1984 0, 260, 0, 0, 259, 256
Reid Spencer3822ff52006-11-08 06:47:33 +00001985};
1986
1987/* YYDEFGOTO[NTERM-NUM]. */
1988static const short int yydefgoto[] =
1989{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001990 -1, 86, 303, 320, 321, 322, 323, 324, 255, 272,
1991 213, 214, 243, 215, 25, 15, 37, 505, 359, 444,
1992 465, 382, 445, 87, 88, 216, 90, 91, 120, 225,
1993 393, 348, 394, 109, 1, 2, 3, 327, 298, 296,
1994 297, 63, 194, 50, 104, 198, 92, 408, 333, 334,
1995 335, 38, 96, 16, 44, 17, 61, 18, 28, 413,
1996 349, 93, 351, 476, 19, 40, 41, 186, 559, 98,
1997 278, 509, 510, 187, 188, 424, 189, 190
Reid Spencer3822ff52006-11-08 06:47:33 +00001998};
1999
2000/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
2001 STATE-NUM. */
Reid Spencer4012e832006-12-04 05:24:24 +00002002#define YYPACT_NINF -536
Reid Spencer3822ff52006-11-08 06:47:33 +00002003static const short int yypact[] =
2004{
Reid Spencer4012e832006-12-04 05:24:24 +00002005 -536, 28, 149, 426, -536, -536, -536, -536, -536, -536,
2006 -536, -536, -536, -536, -16, 158, 41, -536, -536, -1,
2007 -536, -536, 14, -67, 25, 80, -31, -536, 30, 130,
2008 155, -536, -536, -536, -536, -536, -536, 1242, -4, -536,
2009 -536, 65, -536, -536, -536, -536, 32, 36, 37, 39,
2010 -536, 35, 130, 1242, 69, 69, 69, 69, -536, -536,
2011 -536, 158, -536, -536, -536, -536, -536, 38, -536, -536,
2012 -536, -536, -536, -536, -536, -536, -536, -536, -536, -536,
2013 -536, -536, 185, 193, 194, 659, -536, 65, 50, -536,
2014 -536, -113, -536, -536, -536, -536, -536, 1410, -536, 177,
2015 59, 198, 179, 180, -536, -536, -536, -536, -536, 1262,
2016 1262, 1262, 1303, -536, -536, 52, 57, -536, -536, -113,
2017 -118, 62, 1047, -536, -536, 1262, -536, 150, 1323, 15,
2018 151, 158, -536, -536, -536, -536, -536, -536, -536, -536,
2019 -536, -536, -536, -536, -536, -536, -536, -536, -536, -536,
2020 -536, -536, 399, 210, 1262, 1262, 1262, 1262, -536, -536,
2021 -536, -536, -536, -536, -536, -536, -536, -536, -536, -536,
2022 1262, 1262, -536, -536, -536, 1262, 1262, 1262, 1262, 1262,
2023 1262, 1262, 1262, 1262, 1262, 1262, -536, 158, -536, 7,
2024 -536, -536, -536, -536, -536, -536, -536, -536, -85, -536,
2025 -536, -536, 104, 152, 209, 167, 212, 172, 215, 174,
2026 216, 207, 225, 178, 229, 227, 566, -536, 1262, 1262,
2027 1262, -536, 1088, -536, 91, 89, 757, -536, -536, 38,
2028 -536, 757, 757, -536, -536, -536, -536, -536, -536, -536,
2029 -536, -536, -536, 757, 1242, -536, -536, -536, -536, -536,
2030 -536, -536, -536, -536, -536, 1262, -536, -536, -536, -536,
2031 -536, -536, -536, -536, -536, -536, -536, -536, -536, -536,
2032 -536, -536, 1262, 94, 100, -536, 757, 97, 102, 103,
2033 109, 110, 111, 112, 113, 114, 757, 757, 757, 232,
2034 117, 1242, 1262, 1262, 245, -536, 122, 122, 122, -536,
2035 -536, -536, -536, -536, -536, -536, -536, -536, -536, 399,
2036 210, 121, 124, 125, 126, 127, 992, 1303, 719, 248,
2037 128, 129, 131, 133, 134, -536, -536, 122, -111, -80,
2038 -113, -536, 65, -536, 132, 135, 1145, -536, -536, -536,
2039 -536, -536, -536, -536, -536, -536, 222, 1303, -536, -536,
2040 -536, -536, 139, -536, 140, 757, 757, 757, 0, -536,
2041 2, -536, 141, 757, 138, 1262, 1262, 1262, 1262, 1262,
2042 1262, 1262, 153, 154, 156, 1262, 1262, 757, 757, 162,
2043 -536, -24, -536, -536, -536, 148, 161, 1303, 1303, 1303,
2044 1303, 1303, -536, -536, -70, -98, -536, -117, -536, 1303,
2045 1303, 1303, 1303, 1303, -536, -536, -536, -536, -536, 1201,
2046 265, -536, -536, 276, -86, 291, 316, 190, 195, 196,
2047 757, 337, 757, 1262, -536, 197, 757, 201, -536, -536,
2048 202, 206, -536, -536, 757, 757, 757, -536, -536, 192,
2049 -536, 1262, 331, 356, -536, 122, 1303, 1303, 141, 213,
2050 214, 217, 219, 1303, -536, -536, -536, 220, 221, 223,
2051 327, 226, -536, -536, -536, 307, 228, -536, 757, 757,
2052 1262, 757, 757, 231, -536, 231, -536, 233, 757, 234,
2053 1262, 1262, 1262, -536, -536, -536, 1262, 757, -536, -536,
2054 -536, 235, 236, 224, 1303, 1303, 1303, 1303, -536, 1303,
2055 1303, 1303, 1262, 1303, 366, -536, 361, 239, 237, 233,
2056 240, -536, -536, 323, -536, -536, 1262, 241, 757, -536,
2057 -536, -536, 242, -536, 1303, 1303, -536, 246, 247, 249,
2058 251, 257, 259, 260, 262, 267, -536, -536, 367, 82,
2059 354, -536, -536, 266, -536, 268, 270, 1303, -536, 1303,
2060 1303, -536, -536, -536, -536, -536, 757, -536, 899, 93,
2061 375, -536, -536, -536, 271, 273, 274, -536, 278, -536,
2062 899, 757, -536, -536, -536, 406, 280, 353, 757, 414,
2063 415, -536, 757, 757, -536, -536
Reid Spencer3822ff52006-11-08 06:47:33 +00002064};
2065
2066/* YYPGOTO[NTERM-NUM]. */
2067static const short int yypgoto[] =
2068{
Reid Spencer4012e832006-12-04 05:24:24 +00002069 -536, -536, -536, 342, 343, 344, 345, 350, 142, 144,
2070 -127, -125, -525, -536, 411, 435, -122, -536, -267, 51,
2071 -536, -285, -536, -45, -536, -37, -536, -83, 340, -536,
2072 -94, 250, -298, 56, -536, -536, -536, -536, -536, -536,
2073 -536, 412, -536, -536, -536, -536, 3, -536, 54, -536,
2074 -536, 413, -536, -536, -536, -536, -536, 472, -536, -536,
2075 -535, -205, 60, -124, -536, 459, -536, -536, -536, -536,
2076 -536, 58, -3, -536, -536, 42, -536, -536
Reid Spencer3822ff52006-11-08 06:47:33 +00002077};
2078
2079/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2080 positive, shift that token. If negative, reduce the rule which
2081 number is the opposite. If zero, do what YYDEFACT says.
2082 If YYTABLE_NINF, syntax error. */
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002083#define YYTABLE_NINF -173
Reid Spencer3822ff52006-11-08 06:47:33 +00002084static const short int yytable[] =
2085{
Reid Spencer4012e832006-12-04 05:24:24 +00002086 89, 227, 119, 241, 230, 242, 26, 361, 106, 244,
2087 442, 326, 383, 384, 558, 420, 89, 422, 217, 395,
2088 397, 350, 39, 568, 231, 94, 350, 350, 4, 42,
2089 220, 453, 275, 443, 570, 576, 232, -108, 350, 119,
2090 221, 456, 404, 405, 26, 29, 123, 279, 123, 414,
2091 453, 280, 281, 282, 283, 284, 285, 421, 455, 421,
2092 289, 290, 453, 294, 39, 291, 46, 47, 48, 295,
2093 467, 350, 199, 200, 201, 59, 406, 60, 453, 123,
2094 51, 350, 350, 350, 454, 49, 52, 20, 226, 21,
2095 121, 226, 233, 234, 235, 236, 237, 238, 239, 240,
2096 53, 107, 108, 233, 234, 235, 236, 237, 238, 239,
2097 240, 110, 111, 112, 192, 193, 58, 273, 274, 226,
2098 276, 7, 8, 9, 10, 54, 12, 55, 292, 293,
2099 56, 299, 300, 277, 226, 328, 329, 330, 226, 226,
2100 226, 226, 226, 226, 286, 287, 288, 226, 226, -172,
2101 350, 350, 350, 95, 62, -68, -68, 43, 350, 64,
2102 490, 233, 234, 235, 236, 237, 238, 239, 240, 379,
2103 -67, -67, 350, 350, 5, -66, -66, -65, -65, 99,
2104 6, 301, 302, 100, 101, 332, 102, 103, -109, 114,
2105 7, 8, 9, 10, 11, 12, 13, 115, 116, 355,
2106 122, 191, 195, 196, 197, 218, 514, 89, 515, 228,
2107 219, 14, 222, -72, -75, 350, -71, 350, 356, -70,
2108 -69, 350, 30, 31, 32, 33, 34, 35, 36, 350,
2109 350, 350, -76, 304, 305, 357, 557, 256, 257, 336,
2110 337, 427, 358, 429, 430, 431, 377, 569, 360, 363,
2111 364, 365, 438, 330, 89, 378, 226, 366, 367, 368,
2112 369, 370, 371, 350, 350, 376, 350, 350, 375, 380,
2113 381, 387, 398, 350, 388, 389, 390, 391, 399, 400,
2114 409, 401, 350, 402, 403, 412, 410, 415, 416, 423,
2115 426, 352, 353, 448, 449, 450, 451, 452, 446, 442,
2116 466, 434, 435, 354, 436, 457, 458, 459, 460, 461,
2117 441, 447, 468, 350, 258, 259, 260, 261, 262, 263,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002118 264, 265, 266, 267, 268, 269, 270, 271, 226, 428,
Reid Spencer4012e832006-12-04 05:24:24 +00002119 226, 226, 226, 432, 433, 407, 362, 469, 437, 226,
2120 470, 474, 486, 471, 472, 478, 372, 373, 374, 480,
2121 481, 350, 491, 492, 482, 488, 519, 520, 521, 498,
2122 489, 494, 495, 502, 504, 496, 350, 497, 499, 500,
2123 536, 501, 332, 350, 503, 526, 506, 350, 350, 513,
2124 421, 516, 518, 524, 525, 537, 226, 538, 556, 539,
2125 560, 540, 541, 544, 547, 542, 571, 549, 548, 550,
2126 527, 528, 529, 530, 487, 531, 532, 533, 551, 535,
2127 552, 553, 241, 554, 242, 417, 418, 419, 555, 562,
2128 561, 563, 572, 425, 573, 574, 575, 578, 579, 580,
2129 545, 546, 241, 226, 242, 582, 583, 439, 440, 181,
2130 182, 183, 184, 226, 226, 226, -78, 185, 20, 226,
2131 21, 385, 97, 564, 386, 565, 566, 6, -78, -78,
2132 57, 464, 224, 463, 105, 534, 325, -78, -78, -78,
2133 -78, -78, -78, -78, 113, 27, -78, 22, 45, 226,
2134 473, 477, 475, 522, 23, 0, 479, 0, 24, 0,
2135 493, 0, 0, 0, 483, 484, 485, 245, 246, 247,
2136 248, 249, 250, 251, 252, 253, 254, 0, 0, 0,
2137 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2138 0, 0, 0, 0, 0, 0, 0, 0, 507, 508,
2139 0, 511, 512, 0, 0, 0, 0, 0, 517, 0,
2140 0, 0, 0, 0, 0, 0, 0, 523, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002141 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002143 0, 65, 66, 0, 0, 0, 0, 0, 543, 0,
2144 0, 0, 0, 0, 0, 0, 0, 0, 20, 0,
2145 21, 0, 306, 0, 0, 0, 0, 0, 0, 0,
2146 0, 0, 0, 0, 307, 308, 0, 0, 0, 0,
2147 0, 0, 0, 0, 0, 0, 567, 0, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002148 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002149 0, 577, 0, 0, 0, 0, 0, 0, 581, 0,
2150 0, 0, 584, 585, 134, 135, 136, 137, 138, 139,
2151 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
2152 150, 151, 309, 310, 65, 66, 0, 117, 68, 69,
2153 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2154 80, 20, 0, 21, 0, 0, 0, 0, 0, 311,
2155 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
2156 168, 169, 0, 312, 172, 173, 174, 81, 313, 314,
2157 315, 0, 0, 0, 0, 0, 0, 0, 316, 0,
2158 0, 317, 0, 318, 65, 66, 319, 117, 202, 203,
2159 204, 205, 206, 207, 208, 209, 210, 211, 212, 79,
2160 80, 20, 0, 21, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002162 338, 339, 65, 66, 340, 0, 0, 81, 0, 0,
2163 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,
2164 0, 21, 0, 341, 342, 343, 0, 0, 0, 0,
2165 0, 0, 0, 0, 0, 344, 345, 0, 0, 0,
2166 0, 0, 0, 0, 0, 0, 0, 0, 82, 0,
2167 0, 83, 0, 0, 84, 0, 85, 118, 346, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002169 0, 0, 0, 0, 0, 134, 135, 136, 137, 138,
2170 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
2171 149, 150, 151, 309, 310, 0, 0, 0, 0, 0,
2172 0, 0, 0, 0, 0, 0, 0, 0, 82, 0,
2173 0, 83, 0, 0, 84, 0, 85, 396, 0, 0,
2174 311, 158, 159, 160, 161, 162, 163, 164, 165, 166,
2175 167, 168, 169, 0, 312, 172, 173, 174, 0, 313,
2176 314, 315, 338, 339, 0, 0, 340, 0, 0, 0,
2177 0, 0, 347, 0, 0, 0, 0, 0, 0, 0,
2178 0, 0, 0, 0, 0, 341, 342, 343, 0, 0,
2179 0, 0, 0, 0, 0, 0, 0, 344, 345, 0,
2180 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2181 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2182 346, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2183 0, 0, 0, 0, 0, 0, 0, 134, 135, 136,
2184 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
2185 147, 148, 149, 150, 151, 309, 310, 65, 66, 0,
2186 117, 202, 203, 204, 205, 206, 207, 208, 209, 210,
2187 211, 212, 79, 80, 20, 0, 21, 0, 0, 0,
2188 0, 0, 311, 158, 159, 160, 161, 162, 163, 164,
2189 165, 166, 167, 168, 169, 0, 312, 172, 173, 174,
2190 81, 313, 314, 315, 0, 0, 0, 0, 0, 0,
2191 0, 0, 65, 66, 347, 117, 68, 69, 70, 71,
2192 72, 73, 74, 75, 76, 77, 78, 79, 80, 20,
2193 0, 21, 0, 0, 0, 0, 0, 0, 0, 0,
2194 0, 0, 0, 0, 223, 0, 0, 0, 0, 0,
2195 0, 0, 0, 65, 66, 81, 117, 68, 69, 70,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002196 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2197 20, 0, 21, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002198 0, 0, 0, 0, 0, 331, 0, 0, 0, 0,
2199 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
2200 0, 82, 0, 0, 83, 0, 392, 84, 0, 85,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002201 65, 66, 0, 117, 68, 69, 70, 71, 72, 73,
2202 74, 75, 76, 77, 78, 79, 80, 20, 0, 21,
Reid Spencer3da59db2006-11-27 01:05:10 +00002203 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002204 0, 0, 411, 0, 0, 0, 0, 0, 0, 0,
2205 0, 0, 0, 81, 0, 0, 82, 0, 0, 83,
2206 0, 0, 84, 0, 85, 0, 65, 66, 0, 117,
2207 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2208 78, 79, 80, 20, 0, 21, 0, 0, 0, 0,
2209 0, 0, 0, 0, 0, 0, 0, 82, 462, 0,
2210 83, 0, 0, 84, 0, 85, 0, 65, 66, 81,
2211 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2212 77, 78, 79, 80, 20, 0, 21, 65, 66, 0,
2213 117, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2214 77, 78, 79, 80, 20, 0, 21, 0, 0, 0,
2215 81, 0, 0, 0, 82, 0, 0, 83, 0, 0,
2216 84, 0, 85, 0, 0, 0, 0, 0, 65, 66,
2217 81, 117, 202, 203, 204, 205, 206, 207, 208, 209,
2218 210, 211, 212, 79, 80, 20, 0, 21, 65, 66,
2219 0, 229, 68, 69, 70, 71, 72, 73, 74, 75,
2220 76, 77, 78, 79, 80, 20, 0, 21, 0, 0,
2221 82, 81, 0, 83, 0, 0, 84, 0, 85, 0,
2222 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2223 0, 81, 0, 0, 0, 0, 0, 0, 0, 0,
2224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2225 0, 82, 0, 0, 83, 0, 0, 84, 0, 85,
2226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2227 0, 82, 0, 0, 83, 0, 0, 84, 0, 85,
Reid Spencera132e042006-12-03 05:46:11 +00002228 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer4012e832006-12-04 05:24:24 +00002230 0, 0, 0, 0, 0, 124, 0, 0, 0, 0,
2231 0, 0, 82, 0, 0, 83, 0, 0, 84, 125,
2232 85, 0, 0, 0, 0, 0, 0, 0, 0, 126,
2233 127, 0, 82, 0, 0, 83, 0, 0, 84, 0,
2234 85, 0, 128, 129, 130, 131, 132, 133, 134, 135,
2235 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
2236 146, 147, 148, 149, 150, 151, 152, 153, 0, 0,
2237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2238 0, 0, 0, 0, 0, 0, 0, 0, 154, 155,
2239 156, 0, 0, 157, 158, 159, 160, 161, 162, 163,
2240 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
2241 174, 175, 176, 177, 178, 179, 180
Reid Spencer3822ff52006-11-08 06:47:33 +00002242};
2243
2244static const short int yycheck[] =
2245{
Reid Spencer4012e832006-12-04 05:24:24 +00002246 37, 125, 85, 130, 128, 130, 3, 274, 53, 131,
2247 34, 216, 297, 298, 539, 15, 53, 15, 112, 317,
2248 318, 226, 23, 558, 9, 29, 231, 232, 0, 30,
2249 148, 148, 156, 57, 559, 570, 21, 150, 243, 122,
2250 158, 158, 327, 154, 41, 61, 159, 171, 159, 347,
2251 148, 175, 176, 177, 178, 179, 180, 57, 156, 57,
2252 184, 185, 148, 148, 23, 187, 52, 53, 54, 154,
2253 156, 276, 109, 110, 111, 45, 156, 47, 148, 159,
2254 147, 286, 287, 288, 154, 71, 61, 22, 125, 24,
2255 87, 128, 10, 11, 12, 13, 14, 15, 16, 17,
2256 20, 32, 33, 10, 11, 12, 13, 14, 15, 16,
2257 17, 55, 56, 57, 55, 56, 147, 154, 155, 156,
2258 157, 41, 42, 43, 44, 45, 46, 47, 121, 122,
2259 50, 27, 28, 170, 171, 218, 219, 220, 175, 176,
2260 177, 178, 179, 180, 181, 182, 183, 184, 185, 0,
2261 355, 356, 357, 157, 24, 3, 4, 158, 363, 4,
2262 445, 10, 11, 12, 13, 14, 15, 16, 17, 293,
2263 3, 4, 377, 378, 25, 3, 4, 3, 4, 147,
2264 31, 3, 4, 147, 147, 222, 147, 152, 150, 4,
2265 41, 42, 43, 44, 45, 46, 47, 4, 4, 244,
2266 150, 24, 4, 24, 24, 153, 473, 244, 475, 59,
2267 153, 62, 150, 4, 7, 420, 4, 422, 255, 4,
2268 4, 426, 64, 65, 66, 67, 68, 69, 70, 434,
2269 435, 436, 7, 4, 7, 272, 154, 27, 28, 148,
2270 151, 365, 148, 367, 368, 369, 291, 154, 148, 152,
2271 148, 148, 376, 336, 291, 292, 293, 148, 148, 148,
2272 148, 148, 148, 468, 469, 148, 471, 472, 36, 24,
2273 148, 150, 24, 478, 150, 150, 150, 150, 150, 150,
2274 148, 150, 487, 150, 150, 63, 151, 148, 148, 148,
2275 152, 231, 232, 387, 388, 389, 390, 391, 150, 34,
2276 24, 148, 148, 243, 148, 399, 400, 401, 402, 403,
2277 148, 150, 21, 518, 104, 105, 106, 107, 108, 109,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002278 110, 111, 112, 113, 114, 115, 116, 117, 365, 366,
Reid Spencer4012e832006-12-04 05:24:24 +00002279 367, 368, 369, 370, 371, 332, 276, 21, 375, 376,
2280 150, 4, 150, 148, 148, 148, 286, 287, 288, 148,
2281 148, 556, 446, 447, 148, 24, 480, 481, 482, 453,
2282 4, 148, 148, 36, 57, 148, 571, 148, 148, 148,
2283 4, 148, 409, 578, 148, 151, 148, 582, 583, 148,
2284 57, 148, 148, 148, 148, 24, 423, 148, 21, 152,
2285 36, 151, 516, 151, 148, 154, 21, 148, 151, 148,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002286 494, 495, 496, 497, 441, 499, 500, 501, 151, 503,
Reid Spencer4012e832006-12-04 05:24:24 +00002287 151, 151, 539, 151, 539, 355, 356, 357, 151, 151,
2288 154, 151, 151, 363, 151, 151, 148, 21, 148, 76,
2289 524, 525, 559, 470, 559, 21, 21, 377, 378, 97,
2290 97, 97, 97, 480, 481, 482, 20, 97, 22, 486,
2291 24, 309, 41, 547, 310, 549, 550, 31, 32, 33,
2292 25, 410, 122, 409, 52, 502, 216, 41, 42, 43,
2293 44, 45, 46, 47, 61, 3, 50, 51, 19, 516,
2294 420, 423, 422, 486, 58, -1, 426, -1, 62, -1,
2295 448, -1, -1, -1, 434, 435, 436, 98, 99, 100,
2296 101, 102, 103, 104, 105, 106, 107, -1, -1, -1,
2297 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2298 -1, -1, -1, -1, -1, -1, -1, -1, 468, 469,
2299 -1, 471, 472, -1, -1, -1, -1, -1, 478, -1,
2300 -1, -1, -1, -1, -1, -1, -1, 487, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002303 -1, 5, 6, -1, -1, -1, -1, -1, 518, -1,
2304 -1, -1, -1, -1, -1, -1, -1, -1, 22, -1,
2305 24, -1, 26, -1, -1, -1, -1, -1, -1, -1,
2306 -1, -1, -1, -1, 38, 39, -1, -1, -1, -1,
2307 -1, -1, -1, -1, -1, -1, 556, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002308 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002309 -1, 571, -1, -1, -1, -1, -1, -1, 578, -1,
2310 -1, -1, 582, 583, 78, 79, 80, 81, 82, 83,
2311 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
2312 94, 95, 96, 97, 5, 6, -1, 8, 9, 10,
2313 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
2314 21, 22, -1, 24, -1, -1, -1, -1, -1, 123,
2315 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2316 134, 135, -1, 137, 138, 139, 140, 48, 142, 143,
2317 144, -1, -1, -1, -1, -1, -1, -1, 152, -1,
2318 -1, 155, -1, 157, 5, 6, 160, 8, 9, 10,
2319 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
2320 21, 22, -1, 24, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002321 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002322 3, 4, 5, 6, 7, -1, -1, 48, -1, -1,
2323 -1, -1, -1, -1, -1, -1, -1, -1, -1, 22,
2324 -1, 24, -1, 26, 27, 28, -1, -1, -1, -1,
2325 -1, -1, -1, -1, -1, 38, 39, -1, -1, -1,
2326 -1, -1, -1, -1, -1, -1, -1, -1, 149, -1,
2327 -1, 152, -1, -1, 155, -1, 157, 158, 61, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002328 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002329 -1, -1, -1, -1, -1, 78, 79, 80, 81, 82,
2330 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
2331 93, 94, 95, 96, 97, -1, -1, -1, -1, -1,
2332 -1, -1, -1, -1, -1, -1, -1, -1, 149, -1,
2333 -1, 152, -1, -1, 155, -1, 157, 158, -1, -1,
2334 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
2335 133, 134, 135, -1, 137, 138, 139, 140, -1, 142,
2336 143, 144, 3, 4, -1, -1, 7, -1, -1, -1,
2337 -1, -1, 155, -1, -1, -1, -1, -1, -1, -1,
2338 -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
2339 -1, -1, -1, -1, -1, -1, -1, 38, 39, -1,
2340 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2341 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2342 61, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2343 -1, -1, -1, -1, -1, -1, -1, 78, 79, 80,
2344 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
2345 91, 92, 93, 94, 95, 96, 97, 5, 6, -1,
2346 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
2347 18, 19, 20, 21, 22, -1, 24, -1, -1, -1,
2348 -1, -1, 123, 124, 125, 126, 127, 128, 129, 130,
2349 131, 132, 133, 134, 135, -1, 137, 138, 139, 140,
2350 48, 142, 143, 144, -1, -1, -1, -1, -1, -1,
2351 -1, -1, 5, 6, 155, 8, 9, 10, 11, 12,
2352 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
2353 -1, 24, -1, -1, -1, -1, -1, -1, -1, -1,
2354 -1, -1, -1, -1, 37, -1, -1, -1, -1, -1,
2355 -1, -1, -1, 5, 6, 48, 8, 9, 10, 11,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002356 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2357 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
2358 -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002359 -1, -1, -1, -1, -1, -1, 48, -1, -1, -1,
2360 -1, 149, -1, -1, 152, -1, 154, 155, -1, 157,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002361 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
2362 15, 16, 17, 18, 19, 20, 21, 22, -1, 24,
Reid Spencer3da59db2006-11-27 01:05:10 +00002363 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002364 -1, -1, 37, -1, -1, -1, -1, -1, -1, -1,
2365 -1, -1, -1, 48, -1, -1, 149, -1, -1, 152,
2366 -1, -1, 155, -1, 157, -1, 5, 6, -1, 8,
2367 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2368 19, 20, 21, 22, -1, 24, -1, -1, -1, -1,
2369 -1, -1, -1, -1, -1, -1, -1, 149, 37, -1,
2370 152, -1, -1, 155, -1, 157, -1, 5, 6, 48,
2371 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
2372 18, 19, 20, 21, 22, -1, 24, 5, 6, -1,
2373 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
2374 18, 19, 20, 21, 22, -1, 24, -1, -1, -1,
2375 48, -1, -1, -1, 149, -1, -1, 152, -1, -1,
2376 155, -1, 157, -1, -1, -1, -1, -1, 5, 6,
2377 48, 8, 9, 10, 11, 12, 13, 14, 15, 16,
2378 17, 18, 19, 20, 21, 22, -1, 24, 5, 6,
2379 -1, 8, 9, 10, 11, 12, 13, 14, 15, 16,
2380 17, 18, 19, 20, 21, 22, -1, 24, -1, -1,
2381 149, 48, -1, 152, -1, -1, 155, -1, 157, -1,
2382 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2383 -1, 48, -1, -1, -1, -1, -1, -1, -1, -1,
2384 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2385 -1, 149, -1, -1, 152, -1, -1, 155, -1, 157,
2386 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2387 -1, 149, -1, -1, 152, -1, -1, 155, -1, 157,
Reid Spencer3da59db2006-11-27 01:05:10 +00002388 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2389 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer4012e832006-12-04 05:24:24 +00002390 -1, -1, -1, -1, -1, 35, -1, -1, -1, -1,
2391 -1, -1, 149, -1, -1, 152, -1, -1, 155, 49,
2392 157, -1, -1, -1, -1, -1, -1, -1, -1, 59,
2393 60, -1, 149, -1, -1, 152, -1, -1, 155, -1,
2394 157, -1, 72, 73, 74, 75, 76, 77, 78, 79,
2395 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2396 90, 91, 92, 93, 94, 95, 96, 97, -1, -1,
2397 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2398 -1, -1, -1, -1, -1, -1, -1, -1, 118, 119,
2399 120, -1, -1, 123, 124, 125, 126, 127, 128, 129,
2400 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
2401 140, 141, 142, 143, 144, 145, 146
Reid Spencer3822ff52006-11-08 06:47:33 +00002402};
2403
2404/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2405 symbol of state STATE-NUM. */
2406static const unsigned char yystos[] =
2407{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002408 0, 195, 196, 197, 0, 25, 31, 41, 42, 43,
2409 44, 45, 46, 47, 62, 176, 214, 216, 218, 225,
2410 22, 24, 51, 58, 62, 175, 207, 218, 219, 61,
2411 64, 65, 66, 67, 68, 69, 70, 177, 212, 23,
2412 226, 227, 30, 158, 215, 226, 52, 53, 54, 71,
2413 204, 147, 61, 20, 45, 47, 50, 176, 147, 45,
2414 47, 217, 24, 202, 4, 5, 6, 8, 9, 10,
Reid Spencer3822ff52006-11-08 06:47:33 +00002415 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002416 21, 48, 149, 152, 155, 157, 162, 184, 185, 186,
2417 187, 188, 207, 222, 29, 157, 213, 175, 230, 147,
2418 147, 147, 147, 152, 205, 202, 184, 32, 33, 194,
2419 194, 194, 194, 212, 4, 4, 4, 8, 158, 188,
2420 189, 207, 150, 159, 35, 49, 59, 60, 72, 73,
Reid Spencer3822ff52006-11-08 06:47:33 +00002421 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2422 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002423 94, 95, 96, 97, 118, 119, 120, 123, 124, 125,
2424 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2425 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
2426 146, 164, 165, 166, 167, 168, 228, 234, 235, 237,
2427 238, 24, 55, 56, 203, 4, 24, 24, 206, 186,
2428 186, 186, 9, 10, 11, 12, 13, 14, 15, 16,
2429 17, 18, 19, 171, 172, 174, 186, 191, 153, 153,
2430 148, 158, 150, 37, 189, 190, 186, 224, 59, 8,
2431 224, 9, 21, 10, 11, 12, 13, 14, 15, 16,
2432 17, 171, 172, 173, 177, 98, 99, 100, 101, 102,
2433 103, 104, 105, 106, 107, 169, 27, 28, 104, 105,
2434 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
2435 116, 117, 170, 186, 186, 224, 186, 186, 231, 224,
2436 224, 224, 224, 224, 224, 224, 186, 186, 186, 224,
2437 224, 177, 121, 122, 148, 154, 200, 201, 199, 27,
2438 28, 3, 4, 163, 4, 7, 26, 38, 39, 96,
2439 97, 123, 137, 142, 143, 144, 152, 155, 157, 160,
2440 164, 165, 166, 167, 168, 192, 222, 198, 188, 188,
2441 188, 37, 186, 209, 210, 211, 148, 151, 3, 4,
2442 7, 26, 27, 28, 38, 39, 61, 155, 192, 221,
2443 222, 223, 223, 223, 223, 184, 186, 186, 148, 179,
2444 148, 179, 223, 152, 148, 148, 148, 148, 148, 148,
2445 148, 148, 223, 223, 223, 36, 148, 184, 186, 224,
Reid Spencer4012e832006-12-04 05:24:24 +00002446 24, 148, 182, 182, 182, 169, 170, 150, 150, 150,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002447 150, 150, 154, 191, 193, 193, 158, 193, 24, 150,
2448 150, 150, 150, 150, 182, 154, 156, 207, 208, 148,
2449 151, 37, 63, 220, 193, 148, 148, 223, 223, 223,
2450 15, 57, 15, 148, 236, 223, 152, 224, 186, 224,
2451 224, 224, 186, 186, 148, 148, 148, 186, 224, 223,
Reid Spencer4012e832006-12-04 05:24:24 +00002452 223, 148, 34, 57, 180, 183, 150, 150, 191, 191,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002453 191, 191, 191, 148, 154, 156, 158, 191, 191, 191,
2454 191, 191, 37, 209, 180, 181, 24, 156, 21, 21,
2455 150, 148, 148, 223, 4, 223, 224, 232, 148, 223,
2456 148, 148, 148, 223, 223, 223, 150, 186, 24, 4,
Reid Spencer4012e832006-12-04 05:24:24 +00002457 182, 191, 191, 236, 148, 148, 148, 148, 191, 148,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002458 148, 148, 36, 148, 57, 178, 148, 223, 223, 232,
2459 233, 223, 223, 148, 179, 179, 148, 223, 148, 224,
Reid Spencer4012e832006-12-04 05:24:24 +00002460 224, 224, 233, 223, 148, 148, 151, 191, 191, 191,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002461 191, 191, 191, 191, 186, 191, 4, 24, 148, 152,
Reid Spencer4012e832006-12-04 05:24:24 +00002462 151, 224, 154, 223, 151, 191, 191, 148, 151, 148,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002463 148, 151, 151, 151, 151, 151, 21, 154, 173, 229,
Reid Spencer4012e832006-12-04 05:24:24 +00002464 36, 154, 151, 151, 191, 191, 191, 223, 221, 154,
2465 173, 21, 151, 151, 151, 148, 221, 223, 21, 148,
2466 76, 223, 21, 21, 223, 223
Reid Spencer3822ff52006-11-08 06:47:33 +00002467};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002468
2469#define yyerrok (yyerrstatus = 0)
2470#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002471#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002472#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002473
Reid Spencer68a24bd2005-08-27 18:50:39 +00002474#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002475#define YYABORT goto yyabortlab
2476#define YYERROR goto yyerrorlab
2477
2478
2479/* Like YYERROR except do call yyerror. This remains here temporarily
2480 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002481 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002482
Reid Spencer68a24bd2005-08-27 18:50:39 +00002483#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002484
Reid Spencer68a24bd2005-08-27 18:50:39 +00002485#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002486
2487#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002488do \
2489 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002490 { \
2491 yychar = (Token); \
2492 yylval = (Value); \
2493 yytoken = YYTRANSLATE (yychar); \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002494 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002495 goto yybackup; \
2496 } \
2497 else \
Reid Spencer3822ff52006-11-08 06:47:33 +00002498 { \
2499 yyerror (YY_("syntax error: cannot back up")); \
2500 YYERROR; \
2501 } \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002502while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002503
Reid Spencer3822ff52006-11-08 06:47:33 +00002504
Reid Spencer68a24bd2005-08-27 18:50:39 +00002505#define YYTERROR 1
2506#define YYERRCODE 256
2507
Reid Spencer3822ff52006-11-08 06:47:33 +00002508
2509/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2510 If N is 0, then set CURRENT to the empty location which ends
2511 the previous symbol: RHS[0] (always defined). */
2512
2513#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2514#ifndef YYLLOC_DEFAULT
2515# define YYLLOC_DEFAULT(Current, Rhs, N) \
2516 do \
2517 if (N) \
2518 { \
2519 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2520 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2521 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2522 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2523 } \
2524 else \
2525 { \
2526 (Current).first_line = (Current).last_line = \
2527 YYRHSLOC (Rhs, 0).last_line; \
2528 (Current).first_column = (Current).last_column = \
2529 YYRHSLOC (Rhs, 0).last_column; \
2530 } \
2531 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002532#endif
2533
Reid Spencer3822ff52006-11-08 06:47:33 +00002534
2535/* YY_LOCATION_PRINT -- Print the location on the stream.
2536 This macro was not mandated originally: define only if we know
2537 we won't break user code: when these are the locations we know. */
2538
2539#ifndef YY_LOCATION_PRINT
2540# if YYLTYPE_IS_TRIVIAL
2541# define YY_LOCATION_PRINT(File, Loc) \
2542 fprintf (File, "%d.%d-%d.%d", \
2543 (Loc).first_line, (Loc).first_column, \
2544 (Loc).last_line, (Loc).last_column)
2545# else
2546# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2547# endif
2548#endif
2549
2550
2551/* YYLEX -- calling `yylex' with the right arguments. */
2552
Reid Spencer68a24bd2005-08-27 18:50:39 +00002553#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002554# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002555#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002556# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002557#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002558
2559/* Enable debugging if requested. */
2560#if YYDEBUG
2561
2562# ifndef YYFPRINTF
2563# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2564# define YYFPRINTF fprintf
2565# endif
2566
2567# define YYDPRINTF(Args) \
2568do { \
2569 if (yydebug) \
2570 YYFPRINTF Args; \
2571} while (0)
2572
2573# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2574do { \
2575 if (yydebug) \
2576 { \
2577 YYFPRINTF (stderr, "%s ", Title); \
2578 yysymprint (stderr, \
2579 Type, Value); \
2580 YYFPRINTF (stderr, "\n"); \
2581 } \
2582} while (0)
2583
2584/*------------------------------------------------------------------.
2585| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2586| TOP (included). |
2587`------------------------------------------------------------------*/
2588
2589#if defined (__STDC__) || defined (__cplusplus)
2590static void
2591yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002592#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002593static void
2594yy_stack_print (bottom, top)
2595 short int *bottom;
2596 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002597#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002598{
2599 YYFPRINTF (stderr, "Stack now");
2600 for (/* Nothing. */; bottom <= top; ++bottom)
2601 YYFPRINTF (stderr, " %d", *bottom);
2602 YYFPRINTF (stderr, "\n");
2603}
2604
2605# define YY_STACK_PRINT(Bottom, Top) \
2606do { \
2607 if (yydebug) \
2608 yy_stack_print ((Bottom), (Top)); \
2609} while (0)
2610
2611
2612/*------------------------------------------------.
2613| Report that the YYRULE is going to be reduced. |
2614`------------------------------------------------*/
2615
2616#if defined (__STDC__) || defined (__cplusplus)
2617static void
2618yy_reduce_print (int yyrule)
2619#else
2620static void
2621yy_reduce_print (yyrule)
2622 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002623#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002624{
2625 int yyi;
2626 unsigned long int yylno = yyrline[yyrule];
2627 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2628 yyrule - 1, yylno);
2629 /* Print the symbols being reduced, and their result. */
2630 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2631 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2632 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2633}
Reid Spencer21be8652006-10-22 07:03:43 +00002634
Reid Spencer3822ff52006-11-08 06:47:33 +00002635# define YY_REDUCE_PRINT(Rule) \
2636do { \
2637 if (yydebug) \
2638 yy_reduce_print (Rule); \
2639} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002640
Reid Spencer3822ff52006-11-08 06:47:33 +00002641/* Nonzero means print parse trace. It is left uninitialized so that
2642 multiple parsers can coexist. */
2643int yydebug;
2644#else /* !YYDEBUG */
2645# define YYDPRINTF(Args)
2646# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2647# define YY_STACK_PRINT(Bottom, Top)
2648# define YY_REDUCE_PRINT(Rule)
2649#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002650
Reid Spencer21be8652006-10-22 07:03:43 +00002651
Reid Spencer3822ff52006-11-08 06:47:33 +00002652/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002653#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002654# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002655#endif
2656
Reid Spencer3822ff52006-11-08 06:47:33 +00002657/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2658 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002659
Reid Spencer3822ff52006-11-08 06:47:33 +00002660 Do not make this value too large; the results are undefined if
2661 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2662 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002663
2664#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002665# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002666#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002667
Reid Spencer68a24bd2005-08-27 18:50:39 +00002668
2669
Reid Spencer3822ff52006-11-08 06:47:33 +00002670#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002671
Reid Spencer3822ff52006-11-08 06:47:33 +00002672# ifndef yystrlen
2673# if defined (__GLIBC__) && defined (_STRING_H)
2674# define yystrlen strlen
2675# else
2676/* Return the length of YYSTR. */
2677static YYSIZE_T
2678# if defined (__STDC__) || defined (__cplusplus)
2679yystrlen (const char *yystr)
2680# else
2681yystrlen (yystr)
2682 const char *yystr;
2683# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002684{
Reid Spencer3822ff52006-11-08 06:47:33 +00002685 const char *yys = yystr;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002686
Reid Spencer3822ff52006-11-08 06:47:33 +00002687 while (*yys++ != '\0')
2688 continue;
2689
2690 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002691}
Reid Spencer3822ff52006-11-08 06:47:33 +00002692# endif
2693# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002694
Reid Spencer3822ff52006-11-08 06:47:33 +00002695# ifndef yystpcpy
2696# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2697# define yystpcpy stpcpy
2698# else
2699/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2700 YYDEST. */
2701static char *
2702# if defined (__STDC__) || defined (__cplusplus)
2703yystpcpy (char *yydest, const char *yysrc)
2704# else
2705yystpcpy (yydest, yysrc)
2706 char *yydest;
2707 const char *yysrc;
2708# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002709{
Reid Spencer3822ff52006-11-08 06:47:33 +00002710 char *yyd = yydest;
2711 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002712
Reid Spencer3822ff52006-11-08 06:47:33 +00002713 while ((*yyd++ = *yys++) != '\0')
2714 continue;
2715
2716 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002717}
Reid Spencer3822ff52006-11-08 06:47:33 +00002718# endif
2719# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002720
Reid Spencer3822ff52006-11-08 06:47:33 +00002721# ifndef yytnamerr
2722/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2723 quotes and backslashes, so that it's suitable for yyerror. The
2724 heuristic is that double-quoting is unnecessary unless the string
2725 contains an apostrophe, a comma, or backslash (other than
2726 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2727 null, do not copy; instead, return the length of what the result
2728 would have been. */
2729static YYSIZE_T
2730yytnamerr (char *yyres, const char *yystr)
2731{
2732 if (*yystr == '"')
2733 {
2734 size_t yyn = 0;
2735 char const *yyp = yystr;
2736
2737 for (;;)
2738 switch (*++yyp)
2739 {
2740 case '\'':
2741 case ',':
2742 goto do_not_strip_quotes;
2743
2744 case '\\':
2745 if (*++yyp != '\\')
2746 goto do_not_strip_quotes;
2747 /* Fall through. */
2748 default:
2749 if (yyres)
2750 yyres[yyn] = *yyp;
2751 yyn++;
2752 break;
2753
2754 case '"':
2755 if (yyres)
2756 yyres[yyn] = '\0';
2757 return yyn;
2758 }
2759 do_not_strip_quotes: ;
2760 }
2761
2762 if (! yyres)
2763 return yystrlen (yystr);
2764
2765 return yystpcpy (yyres, yystr) - yyres;
2766}
2767# endif
2768
2769#endif /* YYERROR_VERBOSE */
2770
Reid Spencer21be8652006-10-22 07:03:43 +00002771
2772
Reid Spencer3822ff52006-11-08 06:47:33 +00002773#if YYDEBUG
2774/*--------------------------------.
2775| Print this symbol on YYOUTPUT. |
2776`--------------------------------*/
Reid Spencer21be8652006-10-22 07:03:43 +00002777
Reid Spencer3822ff52006-11-08 06:47:33 +00002778#if defined (__STDC__) || defined (__cplusplus)
2779static void
2780yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002781#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002782static void
2783yysymprint (yyoutput, yytype, yyvaluep)
2784 FILE *yyoutput;
2785 int yytype;
2786 YYSTYPE *yyvaluep;
2787#endif
2788{
2789 /* Pacify ``unused variable'' warnings. */
2790 (void) yyvaluep;
2791
2792 if (yytype < YYNTOKENS)
2793 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2794 else
2795 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2796
2797
2798# ifdef YYPRINT
2799 if (yytype < YYNTOKENS)
2800 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2801# endif
2802 switch (yytype)
2803 {
2804 default:
2805 break;
2806 }
2807 YYFPRINTF (yyoutput, ")");
2808}
2809
2810#endif /* ! YYDEBUG */
2811/*-----------------------------------------------.
2812| Release the memory associated to this symbol. |
2813`-----------------------------------------------*/
2814
2815#if defined (__STDC__) || defined (__cplusplus)
2816static void
2817yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2818#else
2819static void
2820yydestruct (yymsg, yytype, yyvaluep)
2821 const char *yymsg;
2822 int yytype;
2823 YYSTYPE *yyvaluep;
2824#endif
2825{
2826 /* Pacify ``unused variable'' warnings. */
2827 (void) yyvaluep;
2828
2829 if (!yymsg)
2830 yymsg = "Deleting";
2831 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2832
2833 switch (yytype)
2834 {
2835
2836 default:
2837 break;
2838 }
2839}
2840
2841
2842/* Prevent warnings from -Wmissing-prototypes. */
2843
2844#ifdef YYPARSE_PARAM
2845# if defined (__STDC__) || defined (__cplusplus)
2846int yyparse (void *YYPARSE_PARAM);
2847# else
2848int yyparse ();
2849# endif
2850#else /* ! YYPARSE_PARAM */
2851#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002852int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002853#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002854int yyparse ();
2855#endif
2856#endif /* ! YYPARSE_PARAM */
2857
2858
2859
2860/* The look-ahead symbol. */
2861int yychar;
2862
2863/* The semantic value of the look-ahead symbol. */
2864YYSTYPE yylval;
2865
2866/* Number of syntax errors so far. */
2867int yynerrs;
2868
2869
2870
2871/*----------.
2872| yyparse. |
2873`----------*/
2874
2875#ifdef YYPARSE_PARAM
2876# if defined (__STDC__) || defined (__cplusplus)
2877int yyparse (void *YYPARSE_PARAM)
2878# else
2879int yyparse (YYPARSE_PARAM)
2880 void *YYPARSE_PARAM;
2881# endif
2882#else /* ! YYPARSE_PARAM */
2883#if defined (__STDC__) || defined (__cplusplus)
2884int
2885yyparse (void)
2886#else
2887int
2888yyparse ()
2889
2890#endif
2891#endif
2892{
2893
2894 int yystate;
2895 int yyn;
2896 int yyresult;
2897 /* Number of tokens to shift before error messages enabled. */
2898 int yyerrstatus;
2899 /* Look-ahead token as an internal (translated) token number. */
2900 int yytoken = 0;
2901
2902 /* Three stacks and their tools:
2903 `yyss': related to states,
2904 `yyvs': related to semantic values,
2905 `yyls': related to locations.
2906
2907 Refer to the stacks thru separate pointers, to allow yyoverflow
2908 to reallocate them elsewhere. */
2909
2910 /* The state stack. */
2911 short int yyssa[YYINITDEPTH];
2912 short int *yyss = yyssa;
2913 short int *yyssp;
2914
2915 /* The semantic value stack. */
2916 YYSTYPE yyvsa[YYINITDEPTH];
2917 YYSTYPE *yyvs = yyvsa;
2918 YYSTYPE *yyvsp;
2919
2920
2921
Reid Spencer5b7e7532006-09-28 19:28:24 +00002922#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002923
Reid Spencer3822ff52006-11-08 06:47:33 +00002924 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002925
Reid Spencer3822ff52006-11-08 06:47:33 +00002926 /* The variables used to return semantic value and location from the
2927 action routines. */
2928 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002929
2930
Reid Spencer3822ff52006-11-08 06:47:33 +00002931 /* When reducing, the number of symbols on the RHS of the reduced
2932 rule. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00002933 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002934
Reid Spencer3822ff52006-11-08 06:47:33 +00002935 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002936
Reid Spencer68a24bd2005-08-27 18:50:39 +00002937 yystate = 0;
2938 yyerrstatus = 0;
2939 yynerrs = 0;
2940 yychar = YYEMPTY; /* Cause a token to be read. */
2941
2942 /* Initialize stack pointers.
2943 Waste one element of value and location stack
2944 so that they stay on the same level as the state stack.
2945 The wasted elements are never initialized. */
2946
Reid Spencer3822ff52006-11-08 06:47:33 +00002947 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002948 yyvsp = yyvs;
2949
Reid Spencer3822ff52006-11-08 06:47:33 +00002950 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002951
Reid Spencer3822ff52006-11-08 06:47:33 +00002952/*------------------------------------------------------------.
2953| yynewstate -- Push a new state, which is found in yystate. |
2954`------------------------------------------------------------*/
2955 yynewstate:
2956 /* In all cases, when you get here, the value and location stacks
2957 have just been pushed. so pushing a state here evens the stacks.
2958 */
2959 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002960
Reid Spencer3822ff52006-11-08 06:47:33 +00002961 yysetstate:
2962 *yyssp = yystate;
2963
2964 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002965 {
2966 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002967 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002968
2969#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002970 {
2971 /* Give user a chance to reallocate the stack. Use copies of
2972 these so that the &'s don't force the real ones into
2973 memory. */
2974 YYSTYPE *yyvs1 = yyvs;
2975 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002976
Reid Spencer3822ff52006-11-08 06:47:33 +00002977
2978 /* Each stack pointer address is followed by the size of the
2979 data in use in that stack, in bytes. This used to be a
2980 conditional around just the two extra args, but that might
2981 be undefined if yyoverflow is a macro. */
2982 yyoverflow (YY_("memory exhausted"),
2983 &yyss1, yysize * sizeof (*yyssp),
2984 &yyvs1, yysize * sizeof (*yyvsp),
2985
2986 &yystacksize);
2987
2988 yyss = yyss1;
2989 yyvs = yyvs1;
2990 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002991#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002992# ifndef YYSTACK_RELOCATE
2993 goto yyexhaustedlab;
2994# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002995 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002996 if (YYMAXDEPTH <= yystacksize)
2997 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002998 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002999 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003000 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00003001
3002 {
3003 short int *yyss1 = yyss;
3004 union yyalloc *yyptr =
3005 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
3006 if (! yyptr)
3007 goto yyexhaustedlab;
3008 YYSTACK_RELOCATE (yyss);
3009 YYSTACK_RELOCATE (yyvs);
3010
3011# undef YYSTACK_RELOCATE
3012 if (yyss1 != yyssa)
3013 YYSTACK_FREE (yyss1);
3014 }
3015# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003016#endif /* no yyoverflow */
3017
Reid Spencer3822ff52006-11-08 06:47:33 +00003018 yyssp = yyss + yysize - 1;
3019 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003020
3021
Reid Spencer3822ff52006-11-08 06:47:33 +00003022 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3023 (unsigned long int) yystacksize));
3024
3025 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003026 YYABORT;
3027 }
3028
Reid Spencer3822ff52006-11-08 06:47:33 +00003029 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003030
3031 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00003032
3033/*-----------.
3034| yybackup. |
3035`-----------*/
3036yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003037
Reid Spencer5b7e7532006-09-28 19:28:24 +00003038/* Do appropriate processing given the current state. */
Reid Spencer3822ff52006-11-08 06:47:33 +00003039/* Read a look-ahead token if we need one and don't already have one. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00003040/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003041
Reid Spencer3822ff52006-11-08 06:47:33 +00003042 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00003043
Reid Spencer68a24bd2005-08-27 18:50:39 +00003044 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00003045 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003046 goto yydefault;
3047
Reid Spencer3822ff52006-11-08 06:47:33 +00003048 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003049
Reid Spencer3822ff52006-11-08 06:47:33 +00003050 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003051 if (yychar == YYEMPTY)
3052 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003053 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003054 yychar = YYLEX;
3055 }
3056
Reid Spencer3822ff52006-11-08 06:47:33 +00003057 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003058 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003059 yychar = yytoken = YYEOF;
3060 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003061 }
3062 else
3063 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003064 yytoken = YYTRANSLATE (yychar);
3065 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003066 }
3067
Reid Spencer3822ff52006-11-08 06:47:33 +00003068 /* If the proper action on seeing token YYTOKEN is to reduce or to
3069 detect an error, take that action. */
3070 yyn += yytoken;
3071 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003072 goto yydefault;
3073 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00003074 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003075 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003076 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003077 goto yyerrlab;
3078 yyn = -yyn;
3079 goto yyreduce;
3080 }
3081
3082 if (yyn == YYFINAL)
3083 YYACCEPT;
3084
Reid Spencer3822ff52006-11-08 06:47:33 +00003085 /* Shift the look-ahead token. */
3086 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Reid Spencer5b7e7532006-09-28 19:28:24 +00003087
3088 /* Discard the token being shifted unless it is eof. */
3089 if (yychar != YYEOF)
3090 yychar = YYEMPTY;
3091
3092 *++yyvsp = yylval;
3093
Reid Spencer3822ff52006-11-08 06:47:33 +00003094
3095 /* Count tokens shifted since error; after three, turn off error
3096 status. */
3097 if (yyerrstatus)
3098 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00003099
Reid Spencer68a24bd2005-08-27 18:50:39 +00003100 yystate = yyn;
3101 goto yynewstate;
3102
Chris Lattnerf49c1762006-11-08 05:58:47 +00003103
Reid Spencer3822ff52006-11-08 06:47:33 +00003104/*-----------------------------------------------------------.
3105| yydefault -- do the default action for the current state. |
3106`-----------------------------------------------------------*/
3107yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003108 yyn = yydefact[yystate];
3109 if (yyn == 0)
3110 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00003111 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003112
Reid Spencer3822ff52006-11-08 06:47:33 +00003113
3114/*-----------------------------.
3115| yyreduce -- Do a reduction. |
3116`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003117yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00003118 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003119 yylen = yyr2[yyn];
3120
Reid Spencer3822ff52006-11-08 06:47:33 +00003121 /* If YYLEN is nonzero, implement the default value of the action:
3122 `$$ = $1'.
3123
3124 Otherwise, the following line sets YYVAL to garbage.
3125 This behavior is undocumented and Bison
3126 users should not rely upon it. Assigning to YYVAL
3127 unconditionally makes the parser a bit smaller, and it avoids a
3128 GCC warning that YYVAL may be used uninitialized. */
3129 yyval = yyvsp[1-yylen];
3130
3131
3132 YY_REDUCE_PRINT (yyn);
3133 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003134 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003135 case 3:
Reid Spencer4012e832006-12-04 05:24:24 +00003136#line 1104 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003137 {
3138 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003139 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003140 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003141 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003142;}
3143 break;
3144
3145 case 5:
Reid Spencer4012e832006-12-04 05:24:24 +00003146#line 1113 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003147 {
3148 if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003149 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003150 (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003151 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003152;}
3153 break;
3154
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003155 case 39:
Reid Spencer4012e832006-12-04 05:24:24 +00003156#line 1130 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003157 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3158 break;
3159
3160 case 40:
Reid Spencer4012e832006-12-04 05:24:24 +00003161#line 1130 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003162 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3163 break;
3164
3165 case 41:
Reid Spencer4012e832006-12-04 05:24:24 +00003166#line 1131 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003167 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3168 break;
3169
3170 case 42:
Reid Spencer4012e832006-12-04 05:24:24 +00003171#line 1131 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003172 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3173 break;
3174
3175 case 43:
Reid Spencer4012e832006-12-04 05:24:24 +00003176#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003177 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3178 break;
3179
3180 case 44:
Reid Spencer4012e832006-12-04 05:24:24 +00003181#line 1132 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003182 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3183 break;
3184
3185 case 45:
Reid Spencer4012e832006-12-04 05:24:24 +00003186#line 1133 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003187 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3188 break;
3189
3190 case 46:
Reid Spencer4012e832006-12-04 05:24:24 +00003191#line 1133 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003192 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3193 break;
3194
3195 case 47:
Reid Spencer4012e832006-12-04 05:24:24 +00003196#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003197 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3198 break;
3199
3200 case 48:
Reid Spencer4012e832006-12-04 05:24:24 +00003201#line 1134 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003202 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3203 break;
3204
3205 case 49:
Reid Spencer4012e832006-12-04 05:24:24 +00003206#line 1138 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003207 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3208 break;
3209
3210 case 50:
Reid Spencer4012e832006-12-04 05:24:24 +00003211#line 1138 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003212 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3213 break;
3214
3215 case 51:
Reid Spencer4012e832006-12-04 05:24:24 +00003216#line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003217 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3218 break;
3219
3220 case 52:
Reid Spencer4012e832006-12-04 05:24:24 +00003221#line 1139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003222 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3223 break;
3224
3225 case 53:
Reid Spencer4012e832006-12-04 05:24:24 +00003226#line 1140 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003227 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3228 break;
3229
3230 case 54:
Reid Spencer4012e832006-12-04 05:24:24 +00003231#line 1140 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003232 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3233 break;
3234
3235 case 55:
Reid Spencer4012e832006-12-04 05:24:24 +00003236#line 1141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003237 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3238 break;
3239
3240 case 56:
Reid Spencer4012e832006-12-04 05:24:24 +00003241#line 1141 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003242 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3243 break;
3244
3245 case 57:
Reid Spencer4012e832006-12-04 05:24:24 +00003246#line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003247 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3248 break;
3249
3250 case 58:
Reid Spencer4012e832006-12-04 05:24:24 +00003251#line 1142 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003252 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3253 break;
3254
3255 case 59:
Reid Spencer4012e832006-12-04 05:24:24 +00003256#line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003257 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3258 break;
3259
3260 case 60:
Reid Spencer4012e832006-12-04 05:24:24 +00003261#line 1143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003262 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3263 break;
3264
3265 case 61:
Reid Spencer4012e832006-12-04 05:24:24 +00003266#line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003267 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3268 break;
3269
3270 case 62:
Reid Spencer4012e832006-12-04 05:24:24 +00003271#line 1144 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003272 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3273 break;
3274
3275 case 63:
Reid Spencer4012e832006-12-04 05:24:24 +00003276#line 1145 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003277 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3278 break;
3279
3280 case 64:
Reid Spencer4012e832006-12-04 05:24:24 +00003281#line 1146 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003282 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3283 break;
3284
3285 case 77:
Reid Spencer4012e832006-12-04 05:24:24 +00003286#line 1157 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003287 {
3288 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003289 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003290 ;}
3291 break;
3292
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003293 case 78:
Reid Spencer4012e832006-12-04 05:24:24 +00003294#line 1161 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003295 {
3296 (yyval.StrVal) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00003297 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003298 ;}
3299 break;
3300
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003301 case 79:
Reid Spencer4012e832006-12-04 05:24:24 +00003302#line 1166 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003303 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3304 break;
3305
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003306 case 80:
Reid Spencer4012e832006-12-04 05:24:24 +00003307#line 1167 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003308 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3309 break;
3310
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003311 case 81:
Reid Spencer4012e832006-12-04 05:24:24 +00003312#line 1168 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003313 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3314 break;
3315
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003316 case 82:
Reid Spencer4012e832006-12-04 05:24:24 +00003317#line 1169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003318 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3319 break;
3320
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003321 case 83:
Reid Spencer4012e832006-12-04 05:24:24 +00003322#line 1170 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003323 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3324 break;
3325
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003326 case 84:
Reid Spencer4012e832006-12-04 05:24:24 +00003327#line 1171 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003328 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3329 break;
3330
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003331 case 85:
Reid Spencer4012e832006-12-04 05:24:24 +00003332#line 1172 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003333 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3334 break;
3335
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003336 case 86:
Reid Spencer4012e832006-12-04 05:24:24 +00003337#line 1173 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003338 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3339 break;
3340
Reid Spencera132e042006-12-03 05:46:11 +00003341 case 87:
Reid Spencer4012e832006-12-04 05:24:24 +00003342#line 1175 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003343 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003344 break;
3345
Reid Spencera132e042006-12-03 05:46:11 +00003346 case 88:
Reid Spencer4012e832006-12-04 05:24:24 +00003347#line 1176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003348 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003349 break;
3350
Reid Spencera132e042006-12-03 05:46:11 +00003351 case 89:
Reid Spencer4012e832006-12-04 05:24:24 +00003352#line 1177 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003353 { (yyval.UIntVal) = CallingConv::CSRet; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003354 break;
3355
Reid Spencera132e042006-12-03 05:46:11 +00003356 case 90:
Reid Spencer4012e832006-12-04 05:24:24 +00003357#line 1178 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003358 { (yyval.UIntVal) = CallingConv::Fast; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003359 break;
3360
Reid Spencera132e042006-12-03 05:46:11 +00003361 case 91:
Reid Spencer4012e832006-12-04 05:24:24 +00003362#line 1179 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003363 { (yyval.UIntVal) = CallingConv::Cold; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003364 break;
3365
Reid Spencera132e042006-12-03 05:46:11 +00003366 case 92:
Reid Spencer4012e832006-12-04 05:24:24 +00003367#line 1180 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003368 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3369 break;
3370
3371 case 93:
Reid Spencer4012e832006-12-04 05:24:24 +00003372#line 1181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003373 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3374 break;
3375
3376 case 94:
Reid Spencer4012e832006-12-04 05:24:24 +00003377#line 1182 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003378 {
3379 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003380 GEN_ERROR("Calling conv too large!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003381 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003382 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003383 ;}
3384 break;
3385
Reid Spencera132e042006-12-03 05:46:11 +00003386 case 95:
Reid Spencer4012e832006-12-04 05:24:24 +00003387#line 1191 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003388 { (yyval.UIntVal) = 0; ;}
3389 break;
3390
Reid Spencera132e042006-12-03 05:46:11 +00003391 case 96:
Reid Spencer4012e832006-12-04 05:24:24 +00003392#line 1192 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003393 {
3394 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3395 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencer3ed469c2006-11-02 20:25:50 +00003396 GEN_ERROR("Alignment must be a power of two!");
3397 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003398;}
3399 break;
3400
Reid Spencera132e042006-12-03 05:46:11 +00003401 case 97:
Reid Spencer4012e832006-12-04 05:24:24 +00003402#line 1198 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003403 { (yyval.UIntVal) = 0; ;}
3404 break;
3405
3406 case 98:
Reid Spencer4012e832006-12-04 05:24:24 +00003407#line 1199 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003408 {
3409 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3410 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3411 GEN_ERROR("Alignment must be a power of two!");
3412 CHECK_FOR_ERROR
3413;}
3414 break;
3415
3416 case 99:
Reid Spencer4012e832006-12-04 05:24:24 +00003417#line 1207 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003418 {
3419 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3420 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
Reid Spencer61c83e02006-08-18 08:43:06 +00003421 GEN_ERROR("Invalid character in section name!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003422 (yyval.StrVal) = (yyvsp[0].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003423 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003424;}
3425 break;
3426
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003427 case 100:
Reid Spencer4012e832006-12-04 05:24:24 +00003428#line 1215 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003429 { (yyval.StrVal) = 0; ;}
3430 break;
3431
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003432 case 101:
Reid Spencer4012e832006-12-04 05:24:24 +00003433#line 1216 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003434 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3435 break;
3436
Reid Spencera132e042006-12-03 05:46:11 +00003437 case 102:
Reid Spencer4012e832006-12-04 05:24:24 +00003438#line 1221 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003439 {;}
3440 break;
3441
3442 case 103:
Reid Spencer4012e832006-12-04 05:24:24 +00003443#line 1222 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003444 {;}
3445 break;
3446
3447 case 104:
Reid Spencer4012e832006-12-04 05:24:24 +00003448#line 1223 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003449 {
3450 CurGV->setSection((yyvsp[0].StrVal));
3451 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003452 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003453 ;}
3454 break;
3455
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003456 case 105:
Reid Spencer4012e832006-12-04 05:24:24 +00003457#line 1228 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003458 {
3459 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003460 GEN_ERROR("Alignment must be a power of two!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003461 CurGV->setAlignment((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003462 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003463 ;}
3464 break;
3465
Reid Spencera132e042006-12-03 05:46:11 +00003466 case 107:
Reid Spencer4012e832006-12-04 05:24:24 +00003467#line 1242 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003468 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003469 break;
3470
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003471 case 109:
Reid Spencer4012e832006-12-04 05:24:24 +00003472#line 1243 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003473 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
3474 break;
3475
3476 case 110:
Reid Spencer4012e832006-12-04 05:24:24 +00003477#line 1245 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003478 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003479 if (!UpRefs.empty())
Reid Spencera132e042006-12-03 05:46:11 +00003480 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer3da59db2006-11-27 01:05:10 +00003481 (yyval.TypeVal) = (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003482 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003483 ;}
3484 break;
3485
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003486 case 124:
Reid Spencer4012e832006-12-04 05:24:24 +00003487#line 1257 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003488 {
3489 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
3490 CHECK_FOR_ERROR
3491 ;}
3492 break;
3493
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003494 case 125:
Reid Spencer4012e832006-12-04 05:24:24 +00003495#line 1261 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003496 {
3497 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
3498 CHECK_FOR_ERROR
3499 ;}
3500 break;
3501
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003502 case 126:
Reid Spencer4012e832006-12-04 05:24:24 +00003503#line 1265 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003504 { // Named types are also simple types...
3505 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3506 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00003507 (yyval.TypeVal) = new PATypeHolder(tmp);
Reid Spencer3da59db2006-11-27 01:05:10 +00003508;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003509 break;
3510
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003511 case 127:
Reid Spencer4012e832006-12-04 05:24:24 +00003512#line 1273 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003513 { // Type UpReference
3514 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
3515 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3516 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
Reid Spencera132e042006-12-03 05:46:11 +00003517 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003518 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003519 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003520 ;}
3521 break;
3522
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003523 case 128:
Reid Spencer4012e832006-12-04 05:24:24 +00003524#line 1281 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003525 { // Function derived type?
3526 std::vector<const Type*> Params;
Reid Spencera132e042006-12-03 05:46:11 +00003527 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003528 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003529 Params.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003530 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3531 if (isVarArg) Params.pop_back();
3532
Reid Spencera132e042006-12-03 05:46:11 +00003533 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FunctionType::get(*(yyvsp[-3].TypeVal),Params,isVarArg)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003534 delete (yyvsp[-1].TypeList); // Delete the argument list
Reid Spencera132e042006-12-03 05:46:11 +00003535 delete (yyvsp[-3].TypeVal); // Delete the return type handle
Reid Spencer3da59db2006-11-27 01:05:10 +00003536 CHECK_FOR_ERROR
3537 ;}
3538 break;
3539
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003540 case 129:
Reid Spencer4012e832006-12-04 05:24:24 +00003541#line 1294 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003542 { // Sized array type?
Reid Spencera132e042006-12-03 05:46:11 +00003543 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3544 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003545 CHECK_FOR_ERROR
3546 ;}
3547 break;
3548
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003549 case 130:
Reid Spencer4012e832006-12-04 05:24:24 +00003550#line 1299 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003551 { // Packed array type?
Reid Spencera132e042006-12-03 05:46:11 +00003552 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3553 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3554 GEN_ERROR("Unsigned result not equal to signed result");
3555 if (!ElemTy->isPrimitiveType())
3556 GEN_ERROR("Elemental type of a PackedType must be primitive");
3557 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3558 GEN_ERROR("Vector length should be a power of 2!");
3559 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3560 delete (yyvsp[-1].TypeVal);
3561 CHECK_FOR_ERROR
Reid Spencer3da59db2006-11-27 01:05:10 +00003562 ;}
3563 break;
3564
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003565 case 131:
Reid Spencer4012e832006-12-04 05:24:24 +00003566#line 1311 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003567 { // Structure type?
3568 std::vector<const Type*> Elements;
Reid Spencera132e042006-12-03 05:46:11 +00003569 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003570 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003571 Elements.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003572
Reid Spencera132e042006-12-03 05:46:11 +00003573 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003574 delete (yyvsp[-1].TypeList);
3575 CHECK_FOR_ERROR
3576 ;}
3577 break;
3578
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003579 case 132:
Reid Spencer4012e832006-12-04 05:24:24 +00003580#line 1321 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003581 { // Empty structure type?
Reid Spencera132e042006-12-03 05:46:11 +00003582 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer3da59db2006-11-27 01:05:10 +00003583 CHECK_FOR_ERROR
3584 ;}
3585 break;
3586
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003587 case 133:
Reid Spencer4012e832006-12-04 05:24:24 +00003588#line 1325 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003589 { // Pointer type?
Reid Spencera132e042006-12-03 05:46:11 +00003590 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Reid Spencer3da59db2006-11-27 01:05:10 +00003591 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencera132e042006-12-03 05:46:11 +00003592 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3593 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003594 CHECK_FOR_ERROR
3595 ;}
3596 break;
3597
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003598 case 134:
Reid Spencer4012e832006-12-04 05:24:24 +00003599#line 1336 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003600 {
Reid Spencera132e042006-12-03 05:46:11 +00003601 (yyval.TypeList) = new std::list<PATypeHolder>();
3602 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003603 CHECK_FOR_ERROR
3604 ;}
3605 break;
3606
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003607 case 135:
Reid Spencer4012e832006-12-04 05:24:24 +00003608#line 1341 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003609 {
Reid Spencera132e042006-12-03 05:46:11 +00003610 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003611 CHECK_FOR_ERROR
3612 ;}
3613 break;
3614
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003615 case 137:
Reid Spencer4012e832006-12-04 05:24:24 +00003616#line 1348 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003617 {
Reid Spencera132e042006-12-03 05:46:11 +00003618 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003619 CHECK_FOR_ERROR
3620 ;}
3621 break;
3622
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003623 case 138:
Reid Spencer4012e832006-12-04 05:24:24 +00003624#line 1352 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003625 {
Reid Spencera132e042006-12-03 05:46:11 +00003626 ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003627 CHECK_FOR_ERROR
3628 ;}
3629 break;
3630
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003631 case 139:
Reid Spencer4012e832006-12-04 05:24:24 +00003632#line 1356 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003633 {
Reid Spencera132e042006-12-03 05:46:11 +00003634 (yyval.TypeList) = new std::list<PATypeHolder>();
Reid Spencer3da59db2006-11-27 01:05:10 +00003635 CHECK_FOR_ERROR
3636 ;}
3637 break;
3638
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003639 case 140:
Reid Spencer4012e832006-12-04 05:24:24 +00003640#line 1367 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003641 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003642 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003643 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003644 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003645 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003646 const Type *ETy = ATy->getElementType();
3647 int NumElements = ATy->getNumElements();
3648
3649 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003650 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003651 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003652 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003653 itostr(NumElements) + "!");
3654
3655 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003656 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003657 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003658 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003659 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003660 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003661 }
3662
Reid Spencera132e042006-12-03 05:46:11 +00003663 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3664 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003665 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003666 ;}
3667 break;
3668
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003669 case 141:
Reid Spencer4012e832006-12-04 05:24:24 +00003670#line 1393 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003671 {
Reid Spencera132e042006-12-03 05:46:11 +00003672 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003673 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003674 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003675 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003676
3677 int NumElements = ATy->getNumElements();
3678 if (NumElements != -1 && NumElements != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003679 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencer68a24bd2005-08-27 18:50:39 +00003680 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencera132e042006-12-03 05:46:11 +00003681 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3682 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003683 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003684 ;}
3685 break;
3686
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003687 case 142:
Reid Spencer4012e832006-12-04 05:24:24 +00003688#line 1407 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003689 {
Reid Spencera132e042006-12-03 05:46:11 +00003690 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003691 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003692 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003693 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003694
3695 int NumElements = ATy->getNumElements();
3696 const Type *ETy = ATy->getElementType();
Reid Spencer3822ff52006-11-08 06:47:33 +00003697 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3698 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003699 GEN_ERROR("Can't build string constant of size " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003700 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003701 " when array has size " + itostr(NumElements) + "!");
3702 std::vector<Constant*> Vals;
3703 if (ETy == Type::SByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003704 for (signed char *C = (signed char *)(yyvsp[0].StrVal); C != (signed char *)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003705 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003706 } else if (ETy == Type::UByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003707 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00003708 C != (unsigned char*)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003709 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003710 } else {
Reid Spencer3822ff52006-11-08 06:47:33 +00003711 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003712 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003713 }
Reid Spencer3822ff52006-11-08 06:47:33 +00003714 free((yyvsp[0].StrVal));
Reid Spencera132e042006-12-03 05:46:11 +00003715 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3716 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003717 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003718 ;}
3719 break;
3720
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003721 case 143:
Reid Spencer4012e832006-12-04 05:24:24 +00003722#line 1437 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003723 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003724 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003725 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003726 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003727 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003728 const Type *ETy = PTy->getElementType();
3729 int NumElements = PTy->getNumElements();
3730
3731 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003732 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003733 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003734 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003735 itostr(NumElements) + "!");
3736
3737 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003738 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003739 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003740 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003741 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003742 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003743 }
3744
Reid Spencera132e042006-12-03 05:46:11 +00003745 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3746 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
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 144:
Reid Spencer4012e832006-12-04 05:24:24 +00003752#line 1463 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003753 {
Reid Spencera132e042006-12-03 05:46:11 +00003754 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Reid Spencer61c83e02006-08-18 08:43:06 +00003755 if (STy == 0)
3756 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003757 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003758
Reid Spencer3822ff52006-11-08 06:47:33 +00003759 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencer61c83e02006-08-18 08:43:06 +00003760 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003761
3762 // Check to ensure that constants are compatible with the type initializer!
Reid Spencer3822ff52006-11-08 06:47:33 +00003763 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
Reid Spencera132e042006-12-03 05:46:11 +00003764 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer61c83e02006-08-18 08:43:06 +00003765 GEN_ERROR("Expected type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003766 STy->getElementType(i)->getDescription() +
3767 "' for element #" + utostr(i) +
3768 " of structure initializer!");
3769
Reid Spencera132e042006-12-03 05:46:11 +00003770 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3771 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003772 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003773 ;}
3774 break;
3775
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003776 case 145:
Reid Spencer4012e832006-12-04 05:24:24 +00003777#line 1484 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003778 {
Reid Spencera132e042006-12-03 05:46:11 +00003779 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003780 if (STy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003781 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003782 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003783
3784 if (STy->getNumContainedTypes() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003785 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003786
Reid Spencera132e042006-12-03 05:46:11 +00003787 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3788 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003789 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003790 ;}
3791 break;
3792
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003793 case 146:
Reid Spencer4012e832006-12-04 05:24:24 +00003794#line 1497 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003795 {
Reid Spencera132e042006-12-03 05:46:11 +00003796 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003797 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003798 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003799 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003800
Reid Spencera132e042006-12-03 05:46:11 +00003801 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3802 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003803 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003804 ;}
3805 break;
3806
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003807 case 147:
Reid Spencer4012e832006-12-04 05:24:24 +00003808#line 1507 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003809 {
Reid Spencera132e042006-12-03 05:46:11 +00003810 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3811 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003812 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003813 ;}
3814 break;
3815
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003816 case 148:
Reid Spencer4012e832006-12-04 05:24:24 +00003817#line 1512 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003818 {
Reid Spencera132e042006-12-03 05:46:11 +00003819 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003820 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003821 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003822
3823 // ConstExprs can exist in the body of a function, thus creating
3824 // GlobalValues whenever they refer to a variable. Because we are in
3825 // the context of a function, getValNonImprovising will search the functions
3826 // symbol table instead of the module symbol table for the global symbol,
3827 // which throws things all off. To get around this, we just tell
3828 // getValNonImprovising that we are at global scope here.
3829 //
3830 Function *SavedCurFn = CurFun.CurrentFunction;
3831 CurFun.CurrentFunction = 0;
3832
Reid Spencer3822ff52006-11-08 06:47:33 +00003833 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003834 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003835
3836 CurFun.CurrentFunction = SavedCurFn;
3837
3838 // If this is an initializer for a constant pointer, which is referencing a
3839 // (currently) undefined variable, create a stub now that shall be replaced
3840 // in the future with the right type of variable.
3841 //
3842 if (V == 0) {
3843 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3844 const PointerType *PT = cast<PointerType>(Ty);
3845
3846 // First check to see if the forward references value is already created!
3847 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencer3822ff52006-11-08 06:47:33 +00003848 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003849
3850 if (I != CurModule.GlobalRefs.end()) {
3851 V = I->second; // Placeholder already exists, use it...
Reid Spencer3822ff52006-11-08 06:47:33 +00003852 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003853 } else {
3854 std::string Name;
Reid Spencer3822ff52006-11-08 06:47:33 +00003855 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003856
3857 // Create the forward referenced global.
3858 GlobalValue *GV;
3859 if (const FunctionType *FTy =
3860 dyn_cast<FunctionType>(PT->getElementType())) {
3861 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3862 CurModule.CurrentModule);
3863 } else {
3864 GV = new GlobalVariable(PT->getElementType(), false,
3865 GlobalValue::ExternalLinkage, 0,
3866 Name, CurModule.CurrentModule);
3867 }
3868
3869 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencer3822ff52006-11-08 06:47:33 +00003870 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003871 V = GV;
3872 }
3873 }
3874
Reid Spencera132e042006-12-03 05:46:11 +00003875 (yyval.ConstVal) = cast<GlobalValue>(V);
3876 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003877 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003878 ;}
3879 break;
3880
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003881 case 149:
Reid Spencer4012e832006-12-04 05:24:24 +00003882#line 1573 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003883 {
Reid Spencera132e042006-12-03 05:46:11 +00003884 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003885 GEN_ERROR("Mismatched types for constant expression!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003886 (yyval.ConstVal) = (yyvsp[0].ConstVal);
Reid Spencera132e042006-12-03 05:46:11 +00003887 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003888 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003889 ;}
3890 break;
3891
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003892 case 150:
Reid Spencer4012e832006-12-04 05:24:24 +00003893#line 1580 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003894 {
Reid Spencera132e042006-12-03 05:46:11 +00003895 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003896 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencer61c83e02006-08-18 08:43:06 +00003897 GEN_ERROR("Cannot create a null initialized value of this type!");
Reid Spencera132e042006-12-03 05:46:11 +00003898 (yyval.ConstVal) = Constant::getNullValue(Ty);
3899 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003900 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003901 ;}
3902 break;
3903
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003904 case 151:
Reid Spencer4012e832006-12-04 05:24:24 +00003905#line 1588 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003906 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003907 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003908 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003909 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003910 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003911 ;}
3912 break;
3913
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003914 case 152:
Reid Spencer4012e832006-12-04 05:24:24 +00003915#line 1594 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003916 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003917 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003918 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003919 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003920 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003921 ;}
3922 break;
3923
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003924 case 153:
Reid Spencer4012e832006-12-04 05:24:24 +00003925#line 1600 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003926 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003927 (yyval.ConstVal) = ConstantBool::getTrue();
Reid Spencer61c83e02006-08-18 08:43:06 +00003928 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003929 ;}
3930 break;
3931
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003932 case 154:
Reid Spencer4012e832006-12-04 05:24:24 +00003933#line 1604 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003934 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003935 (yyval.ConstVal) = ConstantBool::getFalse();
Reid Spencer61c83e02006-08-18 08:43:06 +00003936 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003937 ;}
3938 break;
3939
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003940 case 155:
Reid Spencer4012e832006-12-04 05:24:24 +00003941#line 1608 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003942 { // Float & Double constants
Reid Spencera132e042006-12-03 05:46:11 +00003943 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003944 GEN_ERROR("Floating point constant invalid for type!!");
Reid Spencera132e042006-12-03 05:46:11 +00003945 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003946 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003947 ;}
3948 break;
3949
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003950 case 156:
Reid Spencer4012e832006-12-04 05:24:24 +00003951#line 1616 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003952 {
Reid Spencera132e042006-12-03 05:46:11 +00003953 Constant *Val = (yyvsp[-3].ConstVal);
3954 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00003955 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003956 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003957 Val->getType()->getDescription() + "'!");
3958 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003959 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003960 Ty->getDescription() + "'!");
Reid Spencera132e042006-12-03 05:46:11 +00003961 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
3962 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00003963 ;}
3964 break;
3965
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003966 case 157:
Reid Spencer4012e832006-12-04 05:24:24 +00003967#line 1628 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003968 {
Reid Spencera132e042006-12-03 05:46:11 +00003969 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00003970 GEN_ERROR("GetElementPtr requires a pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003971
Reid Spencera132e042006-12-03 05:46:11 +00003972 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte struct
3973 // indices to uint struct indices for compatibility.
3974 generic_gep_type_iterator<std::vector<Value*>::iterator>
3975 GTI = gep_type_begin((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end()),
3976 GTE = gep_type_end((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end());
3977 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
3978 if (isa<StructType>(*GTI)) // Only change struct indices
3979 if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[-1].ValueList))[i]))
3980 if (CUI->getType() == Type::UByteTy)
3981 (*(yyvsp[-1].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
3982
3983 const Type *IdxTy =
3984 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
3985 if (!IdxTy)
3986 GEN_ERROR("Index list invalid for constant getelementptr!");
3987
3988 std::vector<Constant*> IdxVec;
3989 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
3990 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Reid Spencer68a24bd2005-08-27 18:50:39 +00003991 IdxVec.push_back(C);
3992 else
Reid Spencer61c83e02006-08-18 08:43:06 +00003993 GEN_ERROR("Indices to constant getelementptr must be constants!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003994
Reid Spencer3822ff52006-11-08 06:47:33 +00003995 delete (yyvsp[-1].ValueList);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003996
Reid Spencera132e042006-12-03 05:46:11 +00003997 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
Reid Spencer61c83e02006-08-18 08:43:06 +00003998 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003999 ;}
4000 break;
4001
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004002 case 158:
Reid Spencer4012e832006-12-04 05:24:24 +00004003#line 1660 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004004 {
Reid Spencera132e042006-12-03 05:46:11 +00004005 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004006 GEN_ERROR("Select condition must be of boolean type!");
Reid Spencera132e042006-12-03 05:46:11 +00004007 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004008 GEN_ERROR("Select operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004009 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004010 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004011 ;}
4012 break;
4013
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004014 case 159:
Reid Spencer4012e832006-12-04 05:24:24 +00004015#line 1668 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004016 {
Reid Spencera132e042006-12-03 05:46:11 +00004017 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004018 GEN_ERROR("Binary operator types must match!");
Reid Spencer1628cec2006-10-26 06:15:43 +00004019 CHECK_FOR_ERROR;
4020
Reid Spencer68a24bd2005-08-27 18:50:39 +00004021 // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
4022 // To retain backward compatibility with these early compilers, we emit a
4023 // cast to the appropriate integer type automatically if we are in the
4024 // broken case. See PR424 for more information.
Reid Spencera132e042006-12-03 05:46:11 +00004025 if (!isa<PointerType>((yyvsp[-3].ConstVal)->getType())) {
4026 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004027 } else {
4028 const Type *IntPtrTy = 0;
4029 switch (CurModule.CurrentModule->getPointerSize()) {
4030 case Module::Pointer32: IntPtrTy = Type::IntTy; break;
4031 case Module::Pointer64: IntPtrTy = Type::LongTy; break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004032 default: GEN_ERROR("invalid pointer binary constant expr!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004033 }
Reid Spencera132e042006-12-03 05:46:11 +00004034 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), ConstantExpr::getCast((yyvsp[-3].ConstVal), IntPtrTy),
4035 ConstantExpr::getCast((yyvsp[-1].ConstVal), IntPtrTy));
4036 (yyval.ConstVal) = ConstantExpr::getCast((yyval.ConstVal), (yyvsp[-3].ConstVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004037 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004038 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004039 ;}
4040 break;
4041
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004042 case 160:
Reid Spencer4012e832006-12-04 05:24:24 +00004043#line 1692 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004044 {
Reid Spencera132e042006-12-03 05:46:11 +00004045 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004046 GEN_ERROR("Logical operator types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004047 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4048 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4049 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00004050 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00004051 }
Reid Spencera132e042006-12-03 05:46:11 +00004052 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004053 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004054 ;}
4055 break;
4056
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004057 case 161:
Reid Spencer4012e832006-12-04 05:24:24 +00004058#line 1703 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004059 {
Reid Spencera132e042006-12-03 05:46:11 +00004060 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer1628cec2006-10-26 06:15:43 +00004061 GEN_ERROR("setcc operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004062 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004063 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004064 ;}
4065 break;
4066
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004067 case 162:
Reid Spencer4012e832006-12-04 05:24:24 +00004068#line 1709 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004069 {
Reid Spencera132e042006-12-03 05:46:11 +00004070 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4071 GEN_ERROR("icmp operand types must match!");
4072 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4073 ;}
4074 break;
4075
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004076 case 163:
Reid Spencer4012e832006-12-04 05:24:24 +00004077#line 1714 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004078 {
4079 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4080 GEN_ERROR("fcmp operand types must match!");
4081 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4082 ;}
4083 break;
4084
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004085 case 164:
Reid Spencer4012e832006-12-04 05:24:24 +00004086#line 1719 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004087 {
4088 if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
Reid Spencer1628cec2006-10-26 06:15:43 +00004089 GEN_ERROR("Shift count for shift constant must be unsigned byte!");
Reid Spencera132e042006-12-03 05:46:11 +00004090 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
Reid Spencer1628cec2006-10-26 06:15:43 +00004091 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00004092 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00004093 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004094 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004095 ;}
4096 break;
4097
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004098 case 165:
Reid Spencer4012e832006-12-04 05:24:24 +00004099#line 1728 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004100 {
Reid Spencera132e042006-12-03 05:46:11 +00004101 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004102 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004103 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004104 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004105 ;}
4106 break;
4107
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004108 case 166:
Reid Spencer4012e832006-12-04 05:24:24 +00004109#line 1734 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004110 {
Reid Spencera132e042006-12-03 05:46:11 +00004111 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004112 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004113 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004114 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004115 ;}
4116 break;
4117
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004118 case 167:
Reid Spencer4012e832006-12-04 05:24:24 +00004119#line 1740 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004120 {
Reid Spencera132e042006-12-03 05:46:11 +00004121 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004122 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004123 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004124 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004125 ;}
4126 break;
4127
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004128 case 168:
Reid Spencer4012e832006-12-04 05:24:24 +00004129#line 1749 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004130 {
4131 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004132 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004133 ;}
4134 break;
4135
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004136 case 169:
Reid Spencer4012e832006-12-04 05:24:24 +00004137#line 1753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004138 {
Reid Spencera132e042006-12-03 05:46:11 +00004139 (yyval.ConstVector) = new std::vector<Constant*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00004140 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004141 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004142 ;}
4143 break;
4144
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004145 case 170:
Reid Spencer4012e832006-12-04 05:24:24 +00004146#line 1761 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004147 { (yyval.BoolVal) = false; ;}
4148 break;
4149
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004150 case 171:
Reid Spencer4012e832006-12-04 05:24:24 +00004151#line 1761 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004152 { (yyval.BoolVal) = true; ;}
4153 break;
4154
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004155 case 172:
Reid Spencer4012e832006-12-04 05:24:24 +00004156#line 1771 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004157 {
4158 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004159 CurModule.ModuleDone();
Reid Spencerf63697d2006-10-09 17:36:59 +00004160 CHECK_FOR_ERROR;
Reid Spencer3822ff52006-11-08 06:47:33 +00004161;}
4162 break;
4163
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004164 case 173:
Reid Spencer4012e832006-12-04 05:24:24 +00004165#line 1779 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004166 {
4167 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004168 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004169 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004170 ;}
4171 break;
4172
Reid Spencera132e042006-12-03 05:46:11 +00004173 case 174:
Reid Spencer4012e832006-12-04 05:24:24 +00004174#line 1784 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004175 {
4176 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer3ed469c2006-11-02 20:25:50 +00004177 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004178 ;}
4179 break;
4180
Reid Spencera132e042006-12-03 05:46:11 +00004181 case 175:
Reid Spencer4012e832006-12-04 05:24:24 +00004182#line 1788 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004183 {
4184 (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
4185 CHECK_FOR_ERROR
4186 ;}
4187 break;
4188
4189 case 176:
Reid Spencer4012e832006-12-04 05:24:24 +00004190#line 1792 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004191 {
4192 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
4193 CHECK_FOR_ERROR
4194 ;}
4195 break;
4196
4197 case 177:
Reid Spencer4012e832006-12-04 05:24:24 +00004198#line 1796 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004199 {
4200 (yyval.ModuleVal) = CurModule.CurrentModule;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004201 // Emit an error if there are any unresolved types left.
4202 if (!CurModule.LateResolveTypes.empty()) {
4203 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004204 if (DID.Type == ValID::NameVal) {
4205 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4206 } else {
4207 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4208 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004209 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004210 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004211 ;}
4212 break;
4213
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004214 case 178:
Reid Spencer4012e832006-12-04 05:24:24 +00004215#line 1811 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004216 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004217 // Eagerly resolve types. This is not an optimization, this is a
4218 // requirement that is due to the fact that we could have this:
4219 //
4220 // %list = type { %list * }
4221 // %list = type { %list * } ; repeated type decl
4222 //
4223 // If types are not resolved eagerly, then the two types will not be
4224 // determined to be the same type!
4225 //
Reid Spencera132e042006-12-03 05:46:11 +00004226 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004227
Reid Spencera132e042006-12-03 05:46:11 +00004228 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004229 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004230 // If this is a named type that is not a redefinition, add it to the slot
4231 // table.
Reid Spencera132e042006-12-03 05:46:11 +00004232 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004233 }
Reid Spencera132e042006-12-03 05:46:11 +00004234
4235 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004236 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004237 ;}
4238 break;
4239
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004240 case 179:
Reid Spencer4012e832006-12-04 05:24:24 +00004241#line 1833 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004242 { // Function prototypes can be in const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004243 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004244 ;}
4245 break;
4246
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004247 case 180:
Reid Spencer4012e832006-12-04 05:24:24 +00004248#line 1836 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004249 { // Asm blocks can be in the const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004250 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004251 ;}
4252 break;
4253
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004254 case 181:
Reid Spencer4012e832006-12-04 05:24:24 +00004255#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004256 {
Reid Spencera132e042006-12-03 05:46:11 +00004257 if ((yyvsp[0].ConstVal) == 0)
Reid Spencer5b7e7532006-09-28 19:28:24 +00004258 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencera132e042006-12-03 05:46:11 +00004259 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 +00004260 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004261 ;}
4262 break;
4263
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004264 case 182:
Reid Spencer4012e832006-12-04 05:24:24 +00004265#line 1844 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004266 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004267 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004268 ;}
4269 break;
4270
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004271 case 183:
Reid Spencer4012e832006-12-04 05:24:24 +00004272#line 1847 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004273 {
Reid Spencera132e042006-12-03 05:46:11 +00004274 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004275 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004276 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004277 ;}
4278 break;
4279
Reid Spencera132e042006-12-03 05:46:11 +00004280 case 184:
Reid Spencer4012e832006-12-04 05:24:24 +00004281#line 1851 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004282 {
Reid Spencer3ed469c2006-11-02 20:25:50 +00004283 CurGV = 0;
4284 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004285 ;}
4286 break;
4287
Reid Spencera132e042006-12-03 05:46:11 +00004288 case 185:
Reid Spencer4012e832006-12-04 05:24:24 +00004289#line 1855 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004290 {
4291 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
4292 CHECK_FOR_ERROR
4293 delete (yyvsp[0].TypeVal);
4294 ;}
4295 break;
4296
4297 case 186:
Reid Spencer4012e832006-12-04 05:24:24 +00004298#line 1859 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004299 {
4300 CurGV = 0;
4301 CHECK_FOR_ERROR
4302 ;}
4303 break;
4304
4305 case 187:
Reid Spencer4012e832006-12-04 05:24:24 +00004306#line 1863 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004307 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004308 CurGV =
Reid Spencera132e042006-12-03 05:46:11 +00004309 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004310 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004311 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004312 ;}
4313 break;
4314
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004315 case 188:
Reid Spencer4012e832006-12-04 05:24:24 +00004316#line 1868 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004317 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004318 CurGV = 0;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004319 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004320 ;}
4321 break;
4322
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004323 case 189:
Reid Spencer4012e832006-12-04 05:24:24 +00004324#line 1872 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004325 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004326 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004327 ;}
4328 break;
4329
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004330 case 190:
Reid Spencer4012e832006-12-04 05:24:24 +00004331#line 1875 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004332 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004333 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004334 ;}
4335 break;
4336
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004337 case 191:
Reid Spencer4012e832006-12-04 05:24:24 +00004338#line 1878 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004339 {
4340 ;}
4341 break;
4342
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004343 case 192:
Reid Spencer4012e832006-12-04 05:24:24 +00004344#line 1882 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004345 {
Chris Lattner66316012006-01-24 04:14:29 +00004346 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencer3822ff52006-11-08 06:47:33 +00004347 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4348 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4349 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004350
4351 if (AsmSoFar.empty())
4352 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4353 else
4354 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004355 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004356;}
4357 break;
4358
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004359 case 193:
Reid Spencer4012e832006-12-04 05:24:24 +00004360#line 1895 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004361 { (yyval.Endianness) = Module::BigEndian; ;}
4362 break;
4363
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004364 case 194:
Reid Spencer4012e832006-12-04 05:24:24 +00004365#line 1896 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004366 { (yyval.Endianness) = Module::LittleEndian; ;}
4367 break;
4368
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004369 case 195:
Reid Spencer4012e832006-12-04 05:24:24 +00004370#line 1898 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004371 {
4372 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
Reid Spencer61c83e02006-08-18 08:43:06 +00004373 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004374 ;}
4375 break;
4376
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004377 case 196:
Reid Spencer4012e832006-12-04 05:24:24 +00004378#line 1902 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004379 {
4380 if ((yyvsp[0].UInt64Val) == 32)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004381 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
Reid Spencer3822ff52006-11-08 06:47:33 +00004382 else if ((yyvsp[0].UInt64Val) == 64)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004383 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4384 else
Reid Spencer3822ff52006-11-08 06:47:33 +00004385 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00004386 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004387 ;}
4388 break;
4389
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004390 case 197:
Reid Spencer4012e832006-12-04 05:24:24 +00004391#line 1911 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004392 {
4393 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4394 free((yyvsp[0].StrVal));
4395 ;}
4396 break;
4397
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004398 case 198:
Reid Spencer4012e832006-12-04 05:24:24 +00004399#line 1915 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004400 {
4401 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4402 free((yyvsp[0].StrVal));
4403 ;}
4404 break;
4405
Reid Spencera132e042006-12-03 05:46:11 +00004406 case 200:
Reid Spencer4012e832006-12-04 05:24:24 +00004407#line 1922 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004408 {
4409 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4410 free((yyvsp[0].StrVal));
4411 CHECK_FOR_ERROR
4412 ;}
4413 break;
4414
4415 case 201:
Reid Spencer4012e832006-12-04 05:24:24 +00004416#line 1927 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004417 {
4418 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4419 free((yyvsp[0].StrVal));
4420 CHECK_FOR_ERROR
4421 ;}
4422 break;
4423
4424 case 202:
Reid Spencer4012e832006-12-04 05:24:24 +00004425#line 1932 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004426 {
Reid Spencer61c83e02006-08-18 08:43:06 +00004427 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004428 ;}
4429 break;
4430
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004431 case 206:
Reid Spencer4012e832006-12-04 05:24:24 +00004432#line 1942 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004433 { (yyval.StrVal) = 0; ;}
4434 break;
4435
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004436 case 207:
Reid Spencer4012e832006-12-04 05:24:24 +00004437#line 1944 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004438 {
Reid Spencera132e042006-12-03 05:46:11 +00004439 if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004440 GEN_ERROR("void typed arguments are invalid!");
Reid Spencera132e042006-12-03 05:46:11 +00004441 (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004442 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004443;}
4444 break;
4445
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004446 case 208:
Reid Spencer4012e832006-12-04 05:24:24 +00004447#line 1951 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004448 {
4449 (yyval.ArgList) = (yyvsp[-2].ArgList);
4450 (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
4451 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004452 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004453 ;}
4454 break;
4455
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004456 case 209:
Reid Spencer4012e832006-12-04 05:24:24 +00004457#line 1957 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004458 {
Reid Spencera132e042006-12-03 05:46:11 +00004459 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
Reid Spencer3822ff52006-11-08 06:47:33 +00004460 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4461 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004462 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004463 ;}
4464 break;
4465
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004466 case 210:
Reid Spencer4012e832006-12-04 05:24:24 +00004467#line 1964 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004468 {
4469 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004470 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004471 ;}
4472 break;
4473
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004474 case 211:
Reid Spencer4012e832006-12-04 05:24:24 +00004475#line 1968 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004476 {
4477 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencera132e042006-12-03 05:46:11 +00004478 (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
4479 char*>(new PATypeHolder(Type::VoidTy), 0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004480 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004481 ;}
4482 break;
4483
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004484 case 212:
Reid Spencer4012e832006-12-04 05:24:24 +00004485#line 1974 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004486 {
Reid Spencera132e042006-12-03 05:46:11 +00004487 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
4488 (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004489 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004490 ;}
4491 break;
4492
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004493 case 213:
Reid Spencer4012e832006-12-04 05:24:24 +00004494#line 1979 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004495 {
4496 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004497 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004498 ;}
4499 break;
4500
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004501 case 214:
Reid Spencer4012e832006-12-04 05:24:24 +00004502#line 1985 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004503 {
4504 UnEscapeLexed((yyvsp[-5].StrVal));
4505 std::string FunctionName((yyvsp[-5].StrVal));
4506 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004507
Reid Spencera132e042006-12-03 05:46:11 +00004508 if (!(*(yyvsp[-6].TypeVal))->isFirstClassType() && *(yyvsp[-6].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004509 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004510
4511 std::vector<const Type*> ParamTypeList;
Reid Spencer3822ff52006-11-08 06:47:33 +00004512 if ((yyvsp[-3].ArgList)) { // If there are arguments...
Reid Spencera132e042006-12-03 05:46:11 +00004513 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004514 I != (yyvsp[-3].ArgList)->end(); ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004515 ParamTypeList.push_back(I->first->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004516 }
4517
4518 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4519 if (isVarArg) ParamTypeList.pop_back();
4520
Reid Spencera132e042006-12-03 05:46:11 +00004521 const FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeVal), ParamTypeList, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004522 const PointerType *PFT = PointerType::get(FT);
Reid Spencera132e042006-12-03 05:46:11 +00004523 delete (yyvsp[-6].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004524
4525 ValID ID;
4526 if (!FunctionName.empty()) {
4527 ID = ValID::create((char*)FunctionName.c_str());
4528 } else {
4529 ID = ValID::create((int)CurModule.Values[PFT].size());
4530 }
4531
4532 Function *Fn = 0;
4533 // See if this function was forward referenced. If so, recycle the object.
4534 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4535 // Move the function to the end of the list, from whereever it was
4536 // previously inserted.
4537 Fn = cast<Function>(FWRef);
4538 CurModule.CurrentModule->getFunctionList().remove(Fn);
4539 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4540 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4541 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4542 // If this is the case, either we need to be a forward decl, or it needs
4543 // to be.
4544 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004545 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004546
4547 // Make sure to strip off any argument names so we can't get conflicts.
4548 if (Fn->isExternal())
4549 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4550 AI != AE; ++AI)
4551 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004552 } else { // Not already defined?
4553 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4554 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004555
Reid Spencer68a24bd2005-08-27 18:50:39 +00004556 InsertValue(Fn, CurModule.Values);
4557 }
4558
4559 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004560
4561 if (CurFun.isDeclare) {
4562 // If we have declaration, always overwrite linkage. This will allow us to
4563 // correctly handle cases, when pointer to function is passed as argument to
4564 // another function.
4565 Fn->setLinkage(CurFun.Linkage);
4566 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004567 Fn->setCallingConv((yyvsp[-7].UIntVal));
4568 Fn->setAlignment((yyvsp[0].UIntVal));
4569 if ((yyvsp[-1].StrVal)) {
4570 Fn->setSection((yyvsp[-1].StrVal));
4571 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004572 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004573
4574 // Add all of the arguments we parsed to the function...
Reid Spencer3822ff52006-11-08 06:47:33 +00004575 if ((yyvsp[-3].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004576 if (isVarArg) { // Nuke the last entry
Reid Spencera132e042006-12-03 05:46:11 +00004577 assert((yyvsp[-3].ArgList)->back().first->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().second == 0&&
4578 "Not a varargs marker!");
4579 delete (yyvsp[-3].ArgList)->back().first;
Reid Spencer3822ff52006-11-08 06:47:33 +00004580 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004581 }
4582 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencera132e042006-12-03 05:46:11 +00004583 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004584 I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencera132e042006-12-03 05:46:11 +00004585 delete I->first; // Delete the typeholder...
4586
Reid Spencer68a24bd2005-08-27 18:50:39 +00004587 setValueName(ArgIt, I->second); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004588 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004589 InsertValue(ArgIt);
4590 }
Reid Spencera132e042006-12-03 05:46:11 +00004591
Reid Spencer3822ff52006-11-08 06:47:33 +00004592 delete (yyvsp[-3].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004593 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004594 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004595;}
4596 break;
4597
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004598 case 217:
Reid Spencer4012e832006-12-04 05:24:24 +00004599#line 2081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004600 {
4601 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004602
4603 // Make sure that we keep track of the linkage type even if there was a
4604 // previous "declare".
Reid Spencer3822ff52006-11-08 06:47:33 +00004605 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
4606;}
4607 break;
4608
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004609 case 220:
Reid Spencer4012e832006-12-04 05:24:24 +00004610#line 2091 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004611 {
4612 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004613 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004614;}
4615 break;
4616
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004617 case 222:
Reid Spencer4012e832006-12-04 05:24:24 +00004618#line 2097 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004619 { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
4620 break;
4621
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004622 case 223:
Reid Spencer4012e832006-12-04 05:24:24 +00004623#line 2098 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer481169e2006-12-01 00:33:46 +00004624 { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004625 break;
4626
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004627 case 224:
Reid Spencer4012e832006-12-04 05:24:24 +00004628#line 2100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004629 { CurFun.isDeclare = true; ;}
4630 break;
4631
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004632 case 225:
Reid Spencer4012e832006-12-04 05:24:24 +00004633#line 2100 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004634 {
4635 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004636 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004637 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004638 ;}
4639 break;
4640
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004641 case 226:
Reid Spencer4012e832006-12-04 05:24:24 +00004642#line 2110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004643 {
4644 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004645 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004646 ;}
4647 break;
4648
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004649 case 227:
Reid Spencer4012e832006-12-04 05:24:24 +00004650#line 2114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004651 {
4652 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004653 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004654 ;}
4655 break;
4656
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004657 case 228:
Reid Spencer4012e832006-12-04 05:24:24 +00004658#line 2119 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004659 { // A reference to a direct constant
4660 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004661 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004662 ;}
4663 break;
4664
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004665 case 229:
Reid Spencer4012e832006-12-04 05:24:24 +00004666#line 2123 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004667 {
4668 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004669 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004670 ;}
4671 break;
4672
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004673 case 230:
Reid Spencer4012e832006-12-04 05:24:24 +00004674#line 2127 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004675 { // Perhaps it's an FP constant?
4676 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004677 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004678 ;}
4679 break;
4680
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004681 case 231:
Reid Spencer4012e832006-12-04 05:24:24 +00004682#line 2131 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004683 {
4684 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
Reid Spencer61c83e02006-08-18 08:43:06 +00004685 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004686 ;}
4687 break;
4688
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004689 case 232:
Reid Spencer4012e832006-12-04 05:24:24 +00004690#line 2135 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004691 {
4692 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
Reid Spencer61c83e02006-08-18 08:43:06 +00004693 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004694 ;}
4695 break;
4696
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004697 case 233:
Reid Spencer4012e832006-12-04 05:24:24 +00004698#line 2139 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004699 {
4700 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004701 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004702 ;}
4703 break;
4704
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004705 case 234:
Reid Spencer4012e832006-12-04 05:24:24 +00004706#line 2143 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004707 {
4708 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004709 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004710 ;}
4711 break;
4712
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004713 case 235:
Reid Spencer4012e832006-12-04 05:24:24 +00004714#line 2147 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004715 { // A vector zero constant.
4716 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004717 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004718 ;}
4719 break;
4720
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004721 case 236:
Reid Spencer4012e832006-12-04 05:24:24 +00004722#line 2151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004723 { // Nonempty unsized packed vector
Reid Spencera132e042006-12-03 05:46:11 +00004724 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
Reid Spencer3822ff52006-11-08 06:47:33 +00004725 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004726
4727 PackedType* pt = PackedType::get(ETy, NumElements);
4728 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004729 HandleUpRefs(
4730 PackedType::get(
4731 ETy,
4732 NumElements)
4733 )
4734 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004735
4736 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00004737 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00004738 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004739 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004740 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004741 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004742 }
4743
Reid Spencera132e042006-12-03 05:46:11 +00004744 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
Reid Spencer3822ff52006-11-08 06:47:33 +00004745 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00004746 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004747 ;}
4748 break;
Reid Spencer21be8652006-10-22 07:03:43 +00004749
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004750 case 237:
Reid Spencer4012e832006-12-04 05:24:24 +00004751#line 2176 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004752 {
Reid Spencera132e042006-12-03 05:46:11 +00004753 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004754 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004755 ;}
4756 break;
4757
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004758 case 238:
Reid Spencer4012e832006-12-04 05:24:24 +00004759#line 2180 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004760 {
4761 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4762 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4763 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4764 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4765 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4766 free((yyvsp[-2].StrVal));
4767 free((yyvsp[0].StrVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004768 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004769 ;}
4770 break;
4771
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004772 case 239:
Reid Spencer4012e832006-12-04 05:24:24 +00004773#line 2194 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004774 { // Is it an integer reference...?
4775 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4776 CHECK_FOR_ERROR
4777 ;}
4778 break;
4779
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004780 case 240:
Reid Spencer4012e832006-12-04 05:24:24 +00004781#line 2198 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004782 { // Is it a named reference...?
4783 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4784 CHECK_FOR_ERROR
4785 ;}
4786 break;
4787
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004788 case 243:
Reid Spencer4012e832006-12-04 05:24:24 +00004789#line 2210 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004790 {
Reid Spencera132e042006-12-03 05:46:11 +00004791 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004792 CHECK_FOR_ERROR
4793 ;}
4794 break;
4795
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004796 case 244:
Reid Spencer4012e832006-12-04 05:24:24 +00004797#line 2215 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004798 {
4799 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4800 CHECK_FOR_ERROR
4801 ;}
4802 break;
4803
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004804 case 245:
Reid Spencer4012e832006-12-04 05:24:24 +00004805#line 2219 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004806 { // Do not allow functions with 0 basic blocks
4807 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4808 CHECK_FOR_ERROR
4809 ;}
4810 break;
4811
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004812 case 246:
Reid Spencer4012e832006-12-04 05:24:24 +00004813#line 2228 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004814 {
4815 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4816 CHECK_FOR_ERROR
4817 InsertValue((yyvsp[0].TermInstVal));
4818
4819 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4820 InsertValue((yyvsp[-2].BasicBlockVal));
4821 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
4822 CHECK_FOR_ERROR
4823 ;}
4824 break;
4825
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004826 case 247:
Reid Spencer4012e832006-12-04 05:24:24 +00004827#line 2239 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004828 {
Reid Spencer3da59db2006-11-27 01:05:10 +00004829 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4830 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4831 if (CI2->getParent() == 0)
4832 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
Reid Spencer3822ff52006-11-08 06:47:33 +00004833 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4834 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4835 CHECK_FOR_ERROR
4836 ;}
4837 break;
4838
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004839 case 248:
Reid Spencer4012e832006-12-04 05:24:24 +00004840#line 2248 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004841 {
4842 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004843 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004844
4845 // Make sure to move the basic block to the correct location in the
4846 // function, instead of leaving it inserted wherever it was first
4847 // referenced.
4848 Function::BasicBlockListType &BBL =
4849 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004850 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004851 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004852 ;}
4853 break;
4854
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004855 case 249:
Reid Spencer4012e832006-12-04 05:24:24 +00004856#line 2260 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004857 {
4858 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004859 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004860
4861 // Make sure to move the basic block to the correct location in the
4862 // function, instead of leaving it inserted wherever it was first
4863 // referenced.
4864 Function::BasicBlockListType &BBL =
4865 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004866 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004867 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004868 ;}
4869 break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004870
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004871 case 250:
Reid Spencer4012e832006-12-04 05:24:24 +00004872#line 2273 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004873 { // Return with a result...
Reid Spencera132e042006-12-03 05:46:11 +00004874 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004875 CHECK_FOR_ERROR
4876 ;}
4877 break;
4878
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004879 case 251:
Reid Spencer4012e832006-12-04 05:24:24 +00004880#line 2277 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004881 { // Return with no result...
4882 (yyval.TermInstVal) = new ReturnInst();
4883 CHECK_FOR_ERROR
4884 ;}
4885 break;
4886
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004887 case 252:
Reid Spencer4012e832006-12-04 05:24:24 +00004888#line 2281 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004889 { // Unconditional Branch...
4890 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
4891 CHECK_FOR_ERROR
4892 (yyval.TermInstVal) = new BranchInst(tmpBB);
4893 ;}
4894 break;
4895
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004896 case 253:
Reid Spencer4012e832006-12-04 05:24:24 +00004897#line 2286 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004898 {
4899 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
4900 CHECK_FOR_ERROR
4901 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
4902 CHECK_FOR_ERROR
4903 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4904 CHECK_FOR_ERROR
4905 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4906 ;}
4907 break;
4908
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004909 case 254:
Reid Spencer4012e832006-12-04 05:24:24 +00004910#line 2295 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004911 {
Reid Spencera132e042006-12-03 05:46:11 +00004912 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004913 CHECK_FOR_ERROR
4914 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4915 CHECK_FOR_ERROR
4916 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4917 (yyval.TermInstVal) = S;
4918
4919 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4920 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004921 for (; I != E; ++I) {
4922 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4923 S->addCase(CI, I->second);
4924 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004925 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004926 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004927 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004928 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004929 ;}
4930 break;
4931
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004932 case 255:
Reid Spencer4012e832006-12-04 05:24:24 +00004933#line 2314 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004934 {
Reid Spencera132e042006-12-03 05:46:11 +00004935 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004936 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004937 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004938 CHECK_FOR_ERROR
4939 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencer3822ff52006-11-08 06:47:33 +00004940 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004941 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004942 ;}
4943 break;
4944
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004945 case 256:
Reid Spencer4012e832006-12-04 05:24:24 +00004946#line 2324 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004947 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004948 const PointerType *PFTy;
4949 const FunctionType *Ty;
4950
Reid Spencera132e042006-12-03 05:46:11 +00004951 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004952 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4953 // Pull out the types of all of the arguments...
4954 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00004955 if ((yyvsp[-7].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00004956 for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004957 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004958 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004959 }
4960
4961 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
4962 if (isVarArg) ParamTypes.pop_back();
4963
Reid Spencera132e042006-12-03 05:46:11 +00004964 Ty = FunctionType::get((yyvsp[-10].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004965 PFTy = PointerType::get(Ty);
4966 }
4967
Reid Spencer3822ff52006-11-08 06:47:33 +00004968 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004969 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004970 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004971 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004972 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004973 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004974
4975 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00004976 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
4977 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004978 } else { // Has arguments?
4979 // Loop through FunctionType's arguments and ensure they are specified
4980 // correctly!
4981 //
4982 FunctionType::param_iterator I = Ty->param_begin();
4983 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00004984 std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004985
Reid Spencera132e042006-12-03 05:46:11 +00004986 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
4987 if ((*ArgI)->getType() != *I)
4988 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
4989 (*I)->getDescription() + "'!");
4990
4991 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
4992 GEN_ERROR("Invalid number of parameters detected!");
4993
4994 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004995 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004996 cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004997
Reid Spencera132e042006-12-03 05:46:11 +00004998 delete (yyvsp[-10].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004999 delete (yyvsp[-7].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005000 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005001 ;}
5002 break;
5003
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005004 case 257:
Reid Spencer4012e832006-12-04 05:24:24 +00005005#line 2379 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005006 {
5007 (yyval.TermInstVal) = new UnwindInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00005008 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005009 ;}
5010 break;
5011
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005012 case 258:
Reid Spencer4012e832006-12-04 05:24:24 +00005013#line 2383 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005014 {
5015 (yyval.TermInstVal) = new UnreachableInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00005016 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005017 ;}
5018 break;
5019
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005020 case 259:
Reid Spencer4012e832006-12-04 05:24:24 +00005021#line 2390 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005022 {
5023 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
Reid Spencera132e042006-12-03 05:46:11 +00005024 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005025 CHECK_FOR_ERROR
Reid Spencer61c83e02006-08-18 08:43:06 +00005026 if (V == 0)
5027 GEN_ERROR("May only switch on a constant pool value!");
5028
Reid Spencer3822ff52006-11-08 06:47:33 +00005029 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005030 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005031 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5032 ;}
5033 break;
5034
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005035 case 260:
Reid Spencer4012e832006-12-04 05:24:24 +00005036#line 2401 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005037 {
5038 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005039 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005040 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005041
5042 if (V == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005043 GEN_ERROR("May only switch on a constant pool value!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005044
Reid Spencer3822ff52006-11-08 06:47:33 +00005045 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005046 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005047 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5048 ;}
5049 break;
5050
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005051 case 261:
Reid Spencer4012e832006-12-04 05:24:24 +00005052#line 2414 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005053 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005054 // Is this definition named?? if so, assign the name...
Reid Spencer3822ff52006-11-08 06:47:33 +00005055 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005056 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005057 InsertValue((yyvsp[0].InstVal));
5058 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005059 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005060;}
5061 break;
5062
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005063 case 262:
Reid Spencer4012e832006-12-04 05:24:24 +00005064#line 2423 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005065 { // Used for PHI nodes
5066 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005067 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005068 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005069 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005070 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005071 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
Reid Spencera132e042006-12-03 05:46:11 +00005072 delete (yyvsp[-5].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005073 ;}
5074 break;
5075
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005076 case 263:
Reid Spencer4012e832006-12-04 05:24:24 +00005077#line 2432 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005078 {
5079 (yyval.PHIList) = (yyvsp[-6].PHIList);
5080 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005081 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005082 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005083 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005084 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5085 ;}
5086 break;
5087
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005088 case 264:
Reid Spencer4012e832006-12-04 05:24:24 +00005089#line 2442 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005090 { // Used for call statements, and memory insts...
Reid Spencera132e042006-12-03 05:46:11 +00005091 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00005092 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5093 ;}
5094 break;
5095
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005096 case 265:
Reid Spencer4012e832006-12-04 05:24:24 +00005097#line 2446 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005098 {
5099 (yyval.ValueList) = (yyvsp[-2].ValueList);
5100 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005101 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005102 ;}
5103 break;
5104
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005105 case 267:
Reid Spencer4012e832006-12-04 05:24:24 +00005106#line 2453 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005107 { (yyval.ValueList) = 0; ;}
Reid Spencer861d9d62006-11-28 07:29:44 +00005108 break;
5109
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005110 case 268:
Reid Spencer4012e832006-12-04 05:24:24 +00005111#line 2455 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005112 {
5113 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005114 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005115 ;}
5116 break;
5117
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005118 case 269:
Reid Spencer4012e832006-12-04 05:24:24 +00005119#line 2459 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005120 {
5121 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005122 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005123 ;}
5124 break;
5125
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005126 case 270:
Reid Spencer4012e832006-12-04 05:24:24 +00005127#line 2464 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005128 {
Reid Spencera132e042006-12-03 05:46:11 +00005129 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5130 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005131 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005132 "Arithmetic operator requires integer, FP, or packed operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005133 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5134 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5135 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5136 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Reid Spencer3ed469c2006-11-02 20:25:50 +00005137 GEN_ERROR("U/S/FRem not supported on packed types!");
Reid Spencera132e042006-12-03 05:46:11 +00005138 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005139 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005140 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005141 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005142 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005143 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005144 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005145 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005146 ;}
5147 break;
5148
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005149 case 271:
Reid Spencer4012e832006-12-04 05:24:24 +00005150#line 2483 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005151 {
Reid Spencera132e042006-12-03 05:46:11 +00005152 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5153 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5154 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00005155 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00005156 }
Reid Spencera132e042006-12-03 05:46:11 +00005157 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005158 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005159 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005160 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005161 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005162 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005163 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005164 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005165 ;}
5166 break;
5167
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005168 case 272:
Reid Spencer4012e832006-12-04 05:24:24 +00005169#line 2498 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005170 {
Reid Spencera132e042006-12-03 05:46:11 +00005171 if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
Reid Spencer61c83e02006-08-18 08:43:06 +00005172 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005173 "PackedTypes currently not supported in setcc instructions!");
5174 }
Reid Spencera132e042006-12-03 05:46:11 +00005175 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005176 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005177 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005178 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005179 (yyval.InstVal) = new SetCondInst((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005180 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005181 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005182 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005183 ;}
5184 break;
5185
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005186 case 273:
Reid Spencer4012e832006-12-04 05:24:24 +00005187#line 2512 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005188 {
5189 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5190 GEN_ERROR("Packed types not supported by icmp instruction");
5191 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5192 CHECK_FOR_ERROR
5193 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5194 CHECK_FOR_ERROR
5195 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5196 if ((yyval.InstVal) == 0)
5197 GEN_ERROR("icmp operator returned null!");
5198 ;}
5199 break;
5200
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005201 case 274:
Reid Spencer4012e832006-12-04 05:24:24 +00005202#line 2523 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005203 {
5204 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5205 GEN_ERROR("Packed types not supported by fcmp instruction");
5206 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5207 CHECK_FOR_ERROR
5208 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5209 CHECK_FOR_ERROR
5210 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5211 if ((yyval.InstVal) == 0)
5212 GEN_ERROR("fcmp operator returned null!");
5213 ;}
5214 break;
5215
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005216 case 275:
Reid Spencer4012e832006-12-04 05:24:24 +00005217#line 2534 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005218 {
Reid Spencer481169e2006-12-01 00:33:46 +00005219 llvm_cerr << "WARNING: Use of eliminated 'not' instruction:"
Reid Spencer68a24bd2005-08-27 18:50:39 +00005220 << " Replacing with 'xor'.\n";
5221
Reid Spencera132e042006-12-03 05:46:11 +00005222 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005223 if (Ones == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005224 GEN_ERROR("Expected integral type for not instruction!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005225
Reid Spencera132e042006-12-03 05:46:11 +00005226 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
Reid Spencer3822ff52006-11-08 06:47:33 +00005227 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005228 GEN_ERROR("Could not create a xor instruction!");
5229 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005230 ;}
5231 break;
5232
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005233 case 276:
Reid Spencer4012e832006-12-04 05:24:24 +00005234#line 2547 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005235 {
Reid Spencera132e042006-12-03 05:46:11 +00005236 if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005237 GEN_ERROR("Shift amount must be ubyte!");
Reid Spencera132e042006-12-03 05:46:11 +00005238 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Reid Spencer61c83e02006-08-18 08:43:06 +00005239 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005240 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00005241 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005242 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005243 ;}
5244 break;
5245
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005246 case 277:
Reid Spencer4012e832006-12-04 05:24:24 +00005247#line 2556 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005248 {
Reid Spencera132e042006-12-03 05:46:11 +00005249 Value* Val = (yyvsp[-2].ValueVal);
5250 const Type* Ty = (yyvsp[0].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00005251 if (!Val->getType()->isFirstClassType())
5252 GEN_ERROR("cast from a non-primitive type: '" +
5253 Val->getType()->getDescription() + "'!");
5254 if (!Ty->isFirstClassType())
5255 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencera132e042006-12-03 05:46:11 +00005256 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].TypeVal)->get());
5257 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005258 ;}
5259 break;
5260
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005261 case 278:
Reid Spencer4012e832006-12-04 05:24:24 +00005262#line 2567 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005263 {
Reid Spencera132e042006-12-03 05:46:11 +00005264 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005265 GEN_ERROR("select condition must be boolean!");
Reid Spencera132e042006-12-03 05:46:11 +00005266 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005267 GEN_ERROR("select value types should match!");
Reid Spencera132e042006-12-03 05:46:11 +00005268 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005269 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005270 ;}
5271 break;
5272
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005273 case 279:
Reid Spencer4012e832006-12-04 05:24:24 +00005274#line 2575 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005275 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005276 NewVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005277 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5278 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005279 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005280 ;}
5281 break;
5282
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005283 case 280:
Reid Spencer4012e832006-12-04 05:24:24 +00005284#line 2581 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005285 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005286 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005287 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005288 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005289 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005290
5291 //b = vaarg a, t ->
5292 //foo = alloca 1 of t
5293 //bar = vacopy a
5294 //store bar -> foo
5295 //b = vaarg foo, t
5296 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
5297 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005298 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005299 CurBB->getInstList().push_back(bar);
5300 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005301 (yyval.InstVal) = new VAArgInst(foo, *(yyvsp[0].TypeVal));
5302 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005303 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005304 ;}
5305 break;
5306
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005307 case 281:
Reid Spencer4012e832006-12-04 05:24:24 +00005308#line 2601 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005309 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005310 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005311 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005312 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005313 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005314
5315 //b = vanext a, t ->
5316 //foo = alloca 1 of t
5317 //bar = vacopy a
5318 //store bar -> foo
5319 //tmp = vaarg foo, t
5320 //b = load foo
5321 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
5322 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005323 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005324 CurBB->getInstList().push_back(bar);
5325 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005326 Instruction* tmp = new VAArgInst(foo, *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005327 CurBB->getInstList().push_back(tmp);
Reid Spencer3822ff52006-11-08 06:47:33 +00005328 (yyval.InstVal) = new LoadInst(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005329 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005330 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005331 ;}
5332 break;
5333
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005334 case 282:
Reid Spencer4012e832006-12-04 05:24:24 +00005335#line 2624 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005336 {
Reid Spencera132e042006-12-03 05:46:11 +00005337 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005338 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005339 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005340 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005341 ;}
5342 break;
5343
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005344 case 283:
Reid Spencer4012e832006-12-04 05:24:24 +00005345#line 2630 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005346 {
Reid Spencera132e042006-12-03 05:46:11 +00005347 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005348 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005349 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005350 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005351 ;}
5352 break;
5353
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005354 case 284:
Reid Spencer4012e832006-12-04 05:24:24 +00005355#line 2636 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005356 {
Reid Spencera132e042006-12-03 05:46:11 +00005357 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005358 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005359 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005360 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005361 ;}
5362 break;
5363
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005364 case 285:
Reid Spencer4012e832006-12-04 05:24:24 +00005365#line 2642 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005366 {
5367 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005368 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005369 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005370 (yyval.InstVal) = new PHINode(Ty);
5371 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5372 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5373 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Reid Spencer61c83e02006-08-18 08:43:06 +00005374 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005375 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5376 (yyvsp[0].PHIList)->pop_front();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005377 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005378 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005379 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005380 ;}
5381 break;
5382
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005383 case 286:
Reid Spencer4012e832006-12-04 05:24:24 +00005384#line 2657 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005385 {
Reid Spencer3da59db2006-11-27 01:05:10 +00005386 const PointerType *PFTy = 0;
5387 const FunctionType *Ty = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005388
Reid Spencera132e042006-12-03 05:46:11 +00005389 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005390 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5391 // Pull out the types of all of the arguments...
5392 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00005393 if ((yyvsp[-1].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00005394 for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005395 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00005396 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005397 }
5398
5399 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5400 if (isVarArg) ParamTypes.pop_back();
5401
Reid Spencera132e042006-12-03 05:46:11 +00005402 if (!(*(yyvsp[-4].TypeVal))->isFirstClassType() && *(yyvsp[-4].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005403 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005404
Reid Spencera132e042006-12-03 05:46:11 +00005405 Ty = FunctionType::get((yyvsp[-4].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005406 PFTy = PointerType::get(Ty);
5407 }
5408
Reid Spencer3822ff52006-11-08 06:47:33 +00005409 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005410 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005411
5412 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00005413 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
Reid Spencer68a24bd2005-08-27 18:50:39 +00005414 // Make sure no arguments is a good thing!
5415 if (Ty->getNumParams() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005416 GEN_ERROR("No arguments passed to a function that "
Reid Spencer68a24bd2005-08-27 18:50:39 +00005417 "expects arguments!");
5418
Reid Spencer3822ff52006-11-08 06:47:33 +00005419 (yyval.InstVal) = new CallInst(V, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005420 } else { // Has arguments?
5421 // Loop through FunctionType's arguments and ensure they are specified
5422 // correctly!
5423 //
5424 FunctionType::param_iterator I = Ty->param_begin();
5425 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00005426 std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005427
Reid Spencera132e042006-12-03 05:46:11 +00005428 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5429 if ((*ArgI)->getType() != *I)
5430 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
5431 (*I)->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005432
5433 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005434 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005435
Reid Spencera132e042006-12-03 05:46:11 +00005436 (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005437 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005438 cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
5439 cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
Reid Spencera132e042006-12-03 05:46:11 +00005440 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005441 delete (yyvsp[-1].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005442 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005443 ;}
5444 break;
5445
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005446 case 287:
Reid Spencer4012e832006-12-04 05:24:24 +00005447#line 2716 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005448 {
5449 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005450 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005451 ;}
5452 break;
5453
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005454 case 288:
Reid Spencer4012e832006-12-04 05:24:24 +00005455#line 2723 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005456 {
5457 (yyval.ValueList) = (yyvsp[0].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005458 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005459 ;}
5460 break;
5461
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005462 case 289:
Reid Spencer4012e832006-12-04 05:24:24 +00005463#line 2726 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005464 {
Reid Spencera132e042006-12-03 05:46:11 +00005465 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer61c83e02006-08-18 08:43:06 +00005466 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005467 ;}
5468 break;
5469
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005470 case 290:
Reid Spencer4012e832006-12-04 05:24:24 +00005471#line 2731 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005472 {
5473 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005474 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005475 ;}
5476 break;
5477
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005478 case 291:
Reid Spencer4012e832006-12-04 05:24:24 +00005479#line 2735 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005480 {
5481 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005482 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005483 ;}
5484 break;
5485
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005486 case 292:
Reid Spencer4012e832006-12-04 05:24:24 +00005487#line 2742 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005488 {
Reid Spencera132e042006-12-03 05:46:11 +00005489 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5490 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005491 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005492 ;}
5493 break;
5494
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005495 case 293:
Reid Spencer4012e832006-12-04 05:24:24 +00005496#line 2747 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005497 {
Reid Spencera132e042006-12-03 05:46:11 +00005498 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005499 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005500 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5501 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005502 ;}
5503 break;
5504
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005505 case 294:
Reid Spencer4012e832006-12-04 05:24:24 +00005506#line 2753 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005507 {
Reid Spencera132e042006-12-03 05:46:11 +00005508 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5509 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005510 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005511 ;}
5512 break;
5513
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005514 case 295:
Reid Spencer4012e832006-12-04 05:24:24 +00005515#line 2758 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005516 {
Reid Spencera132e042006-12-03 05:46:11 +00005517 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005518 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005519 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5520 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005521 ;}
5522 break;
5523
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005524 case 296:
Reid Spencer4012e832006-12-04 05:24:24 +00005525#line 2764 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005526 {
Reid Spencera132e042006-12-03 05:46:11 +00005527 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005528 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencera132e042006-12-03 05:46:11 +00005529 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5530 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005531 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005532 ;}
5533 break;
5534
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005535 case 297:
Reid Spencer4012e832006-12-04 05:24:24 +00005536#line 2772 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005537 {
Reid Spencera132e042006-12-03 05:46:11 +00005538 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005539 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005540 (*(yyvsp[-1].TypeVal))->getDescription());
5541 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005542 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005543 (*(yyvsp[-1].TypeVal))->getDescription());
5544 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005545 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005546 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
Reid Spencera132e042006-12-03 05:46:11 +00005547 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005548 ;}
5549 break;
5550
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005551 case 298:
Reid Spencer4012e832006-12-04 05:24:24 +00005552#line 2784 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005553 {
Reid Spencera132e042006-12-03 05:46:11 +00005554 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005555 if (!PT)
Reid Spencer61c83e02006-08-18 08:43:06 +00005556 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005557 (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005558 const Type *ElTy = PT->getElementType();
Reid Spencera132e042006-12-03 05:46:11 +00005559 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5560 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005561 "' into space of type '" + ElTy->getDescription() + "'!");
5562
Reid Spencera132e042006-12-03 05:46:11 +00005563 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005564 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005565 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5566 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005567 ;}
5568 break;
5569
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005570 case 299:
Reid Spencer4012e832006-12-04 05:24:24 +00005571#line 2799 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005572 {
Reid Spencera132e042006-12-03 05:46:11 +00005573 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005574 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005575
Reid Spencera132e042006-12-03 05:46:11 +00005576 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte struct
5577 // indices to uint struct indices for compatibility.
5578 generic_gep_type_iterator<std::vector<Value*>::iterator>
5579 GTI = gep_type_begin((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end()),
5580 GTE = gep_type_end((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end());
5581 for (unsigned i = 0, e = (yyvsp[0].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
5582 if (isa<StructType>(*GTI)) // Only change struct indices
5583 if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[0].ValueList))[i]))
5584 if (CUI->getType() == Type::UByteTy)
5585 (*(yyvsp[0].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005586
Reid Spencera132e042006-12-03 05:46:11 +00005587 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005588 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencera132e042006-12-03 05:46:11 +00005589 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5590 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005591 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005592 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5593 delete (yyvsp[-2].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005594 delete (yyvsp[0].ValueList);
5595 ;}
5596 break;
5597
5598
5599 default: break;
5600 }
5601
5602/* Line 1126 of yacc.c. */
Reid Spencer4012e832006-12-04 05:24:24 +00005603#line 5604 "llvmAsmParser.tab.c"
Reid Spencer5b7e7532006-09-28 19:28:24 +00005604
5605 yyvsp -= yylen;
5606 yyssp -= yylen;
5607
Reid Spencer3822ff52006-11-08 06:47:33 +00005608
5609 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005610
5611 *++yyvsp = yyval;
5612
5613
Reid Spencer3822ff52006-11-08 06:47:33 +00005614 /* Now `shift' the result of the reduction. Determine what state
5615 that goes to, based on the state we popped back to and the rule
5616 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005617
5618 yyn = yyr1[yyn];
5619
Reid Spencer3822ff52006-11-08 06:47:33 +00005620 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5621 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005622 yystate = yytable[yystate];
5623 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005624 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005625
5626 goto yynewstate;
5627
5628
Reid Spencer3822ff52006-11-08 06:47:33 +00005629/*------------------------------------.
5630| yyerrlab -- here on detecting error |
5631`------------------------------------*/
5632yyerrlab:
5633 /* If not already recovering from an error, report this error. */
5634 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005635 {
5636 ++yynerrs;
Reid Spencer3822ff52006-11-08 06:47:33 +00005637#if YYERROR_VERBOSE
Reid Spencer5b7e7532006-09-28 19:28:24 +00005638 yyn = yypact[yystate];
Chris Lattner224f84f2006-08-18 17:34:45 +00005639
Reid Spencer3822ff52006-11-08 06:47:33 +00005640 if (YYPACT_NINF < yyn && yyn < YYLAST)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005641 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005642 int yytype = YYTRANSLATE (yychar);
5643 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5644 YYSIZE_T yysize = yysize0;
5645 YYSIZE_T yysize1;
5646 int yysize_overflow = 0;
5647 char *yymsg = 0;
5648# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5649 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5650 int yyx;
Reid Spencer5b7e7532006-09-28 19:28:24 +00005651
Reid Spencer3822ff52006-11-08 06:47:33 +00005652#if 0
5653 /* This is so xgettext sees the translatable formats that are
5654 constructed on the fly. */
5655 YY_("syntax error, unexpected %s");
5656 YY_("syntax error, unexpected %s, expecting %s");
5657 YY_("syntax error, unexpected %s, expecting %s or %s");
5658 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5659 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5660#endif
5661 char *yyfmt;
5662 char const *yyf;
5663 static char const yyunexpected[] = "syntax error, unexpected %s";
5664 static char const yyexpecting[] = ", expecting %s";
5665 static char const yyor[] = " or %s";
5666 char yyformat[sizeof yyunexpected
5667 + sizeof yyexpecting - 1
5668 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5669 * (sizeof yyor - 1))];
5670 char const *yyprefix = yyexpecting;
5671
5672 /* Start YYX at -YYN if negative to avoid negative indexes in
5673 YYCHECK. */
5674 int yyxbegin = yyn < 0 ? -yyn : 0;
5675
5676 /* Stay within bounds of both yycheck and yytname. */
5677 int yychecklim = YYLAST - yyn;
5678 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5679 int yycount = 1;
5680
5681 yyarg[0] = yytname[yytype];
5682 yyfmt = yystpcpy (yyformat, yyunexpected);
5683
5684 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5685 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5686 {
5687 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5688 {
5689 yycount = 1;
5690 yysize = yysize0;
5691 yyformat[sizeof yyunexpected - 1] = '\0';
5692 break;
5693 }
5694 yyarg[yycount++] = yytname[yyx];
5695 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5696 yysize_overflow |= yysize1 < yysize;
5697 yysize = yysize1;
5698 yyfmt = yystpcpy (yyfmt, yyprefix);
5699 yyprefix = yyor;
5700 }
5701
5702 yyf = YY_(yyformat);
5703 yysize1 = yysize + yystrlen (yyf);
5704 yysize_overflow |= yysize1 < yysize;
5705 yysize = yysize1;
5706
5707 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5708 yymsg = (char *) YYSTACK_ALLOC (yysize);
5709 if (yymsg)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005710 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005711 /* Avoid sprintf, as that infringes on the user's name space.
5712 Don't have undefined behavior even if the translation
5713 produced a string with the wrong number of "%s"s. */
5714 char *yyp = yymsg;
5715 int yyi = 0;
5716 while ((*yyp = *yyf))
Reid Spencer5b7e7532006-09-28 19:28:24 +00005717 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005718 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5719 {
5720 yyp += yytnamerr (yyp, yyarg[yyi++]);
5721 yyf += 2;
5722 }
5723 else
5724 {
5725 yyp++;
5726 yyf++;
5727 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005728 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005729 yyerror (yymsg);
5730 YYSTACK_FREE (yymsg);
Reid Spencer5b7e7532006-09-28 19:28:24 +00005731 }
5732 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005733 {
5734 yyerror (YY_("syntax error"));
5735 goto yyexhaustedlab;
5736 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005737 }
5738 else
5739#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00005740 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005741 }
5742
Reid Spencer3822ff52006-11-08 06:47:33 +00005743
Reid Spencer68a24bd2005-08-27 18:50:39 +00005744
5745 if (yyerrstatus == 3)
5746 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005747 /* If just tried and failed to reuse look-ahead token after an
5748 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005749
Reid Spencer3822ff52006-11-08 06:47:33 +00005750 if (yychar <= YYEOF)
5751 {
5752 /* Return failure if at end of input. */
5753 if (yychar == YYEOF)
5754 YYABORT;
5755 }
5756 else
5757 {
5758 yydestruct ("Error: discarding", yytoken, &yylval);
5759 yychar = YYEMPTY;
5760 }
5761 }
5762
5763 /* Else will try to reuse look-ahead token after shifting the error
5764 token. */
5765 goto yyerrlab1;
5766
5767
5768/*---------------------------------------------------.
5769| yyerrorlab -- error raised explicitly by YYERROR. |
5770`---------------------------------------------------*/
5771yyerrorlab:
5772
5773 /* Pacify compilers like GCC when the user code never invokes
5774 YYERROR and the label yyerrorlab therefore never appears in user
5775 code. */
5776 if (0)
5777 goto yyerrorlab;
5778
5779yyvsp -= yylen;
5780 yyssp -= yylen;
5781 yystate = *yyssp;
5782 goto yyerrlab1;
5783
5784
5785/*-------------------------------------------------------------.
5786| yyerrlab1 -- common code for both syntax error and YYERROR. |
5787`-------------------------------------------------------------*/
5788yyerrlab1:
5789 yyerrstatus = 3; /* Each real token shifted decrements this. */
5790
5791 for (;;)
5792 {
5793 yyn = yypact[yystate];
5794 if (yyn != YYPACT_NINF)
5795 {
5796 yyn += YYTERROR;
5797 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5798 {
5799 yyn = yytable[yyn];
5800 if (0 < yyn)
5801 break;
5802 }
5803 }
5804
5805 /* Pop the current state because it cannot handle the error token. */
5806 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005807 YYABORT;
5808
Chris Lattner8335e842006-01-23 23:05:42 +00005809
Reid Spencer3822ff52006-11-08 06:47:33 +00005810 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5811 YYPOPSTACK;
5812 yystate = *yyssp;
5813 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005814 }
5815
5816 if (yyn == YYFINAL)
5817 YYACCEPT;
5818
Reid Spencer68a24bd2005-08-27 18:50:39 +00005819 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005820
5821
5822 /* Shift the error token. */
5823 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005824
5825 yystate = yyn;
5826 goto yynewstate;
5827
Chris Lattnerf49c1762006-11-08 05:58:47 +00005828
Reid Spencer3822ff52006-11-08 06:47:33 +00005829/*-------------------------------------.
5830| yyacceptlab -- YYACCEPT comes here. |
5831`-------------------------------------*/
5832yyacceptlab:
5833 yyresult = 0;
5834 goto yyreturn;
5835
5836/*-----------------------------------.
5837| yyabortlab -- YYABORT comes here. |
5838`-----------------------------------*/
5839yyabortlab:
5840 yyresult = 1;
5841 goto yyreturn;
5842
5843#ifndef yyoverflow
5844/*-------------------------------------------------.
5845| yyexhaustedlab -- memory exhaustion comes here. |
5846`-------------------------------------------------*/
5847yyexhaustedlab:
5848 yyerror (YY_("memory exhausted"));
5849 yyresult = 2;
5850 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005851#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005852
5853yyreturn:
5854 if (yychar != YYEOF && yychar != YYEMPTY)
5855 yydestruct ("Cleanup: discarding lookahead",
5856 yytoken, &yylval);
5857 while (yyssp != yyss)
5858 {
5859 yydestruct ("Cleanup: popping",
5860 yystos[*yyssp], yyvsp);
5861 YYPOPSTACK;
Chris Lattnerf49c1762006-11-08 05:58:47 +00005862 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005863#ifndef yyoverflow
5864 if (yyss != yyssa)
5865 YYSTACK_FREE (yyss);
5866#endif
5867 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005868}
Reid Spencer3822ff52006-11-08 06:47:33 +00005869
5870
Reid Spencer4012e832006-12-04 05:24:24 +00005871#line 2825 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005872
5873
5874void llvm::GenerateError(const std::string &message, int LineNo) {
5875 if (LineNo == -1) LineNo = llvmAsmlineno;
5876 // TODO: column number in exception
5877 if (TheParseError)
5878 TheParseError->setError(CurFilename, message, LineNo);
5879 TriggerError = 1;
5880}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005881
5882int yyerror(const char *ErrorMsg) {
5883 std::string where
5884 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5885 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5886 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5887 if (yychar == YYEMPTY || yychar == 0)
5888 errMsg += "end-of-file.";
5889 else
5890 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005891 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005892 return 0;
5893}
Reid Spencer3822ff52006-11-08 06:47:33 +00005894