blob: 7b017bc26b3908d5f5aeaf4a88933f5ac191ce74 [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,
Reid Spencer9eef56f2006-12-05 19:16:11 +00001761 1580, 1588, 1594, 1600, 1604, 1608, 1616, 1628, 1649, 1657,
1762 1663, 1674, 1680, 1685, 1690, 1699, 1705, 1711, 1720, 1724,
1763 1732, 1732, 1742, 1750, 1755, 1759, 1763, 1767, 1782, 1804,
1764 1807, 1810, 1810, 1818, 1818, 1826, 1826, 1834, 1834, 1843,
1765 1846, 1849, 1853, 1866, 1867, 1869, 1873, 1882, 1886, 1891,
1766 1893, 1898, 1903, 1912, 1912, 1913, 1913, 1915, 1922, 1928,
1767 1935, 1939, 1945, 1950, 1955, 2050, 2050, 2052, 2060, 2060,
1768 2062, 2067, 2068, 2069, 2071, 2071, 2081, 2085, 2090, 2094,
1769 2098, 2102, 2106, 2110, 2114, 2118, 2122, 2147, 2151, 2165,
1770 2169, 2175, 2175, 2181, 2186, 2190, 2199, 2210, 2219, 2231,
1771 2244, 2248, 2252, 2257, 2266, 2285, 2294, 2350, 2354, 2361,
1772 2372, 2385, 2394, 2403, 2413, 2417, 2424, 2424, 2426, 2430,
1773 2435, 2454, 2469, 2483, 2494, 2505, 2518, 2527, 2538, 2546,
1774 2552, 2572, 2595, 2601, 2607, 2613, 2628, 2687, 2694, 2697,
1775 2702, 2706, 2713, 2718, 2724, 2729, 2735, 2743, 2755, 2770
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 const Type *IdxTy =
3973 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
3974 if (!IdxTy)
3975 GEN_ERROR("Index list invalid for constant getelementptr!");
3976
3977 std::vector<Constant*> IdxVec;
3978 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
3979 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Reid Spencer68a24bd2005-08-27 18:50:39 +00003980 IdxVec.push_back(C);
3981 else
Reid Spencer61c83e02006-08-18 08:43:06 +00003982 GEN_ERROR("Indices to constant getelementptr must be constants!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003983
Reid Spencer3822ff52006-11-08 06:47:33 +00003984 delete (yyvsp[-1].ValueList);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003985
Reid Spencera132e042006-12-03 05:46:11 +00003986 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
Reid Spencer61c83e02006-08-18 08:43:06 +00003987 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003988 ;}
3989 break;
3990
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003991 case 158:
Reid Spencer9eef56f2006-12-05 19:16:11 +00003992#line 1649 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003993 {
Reid Spencera132e042006-12-03 05:46:11 +00003994 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00003995 GEN_ERROR("Select condition must be of boolean type!");
Reid Spencera132e042006-12-03 05:46:11 +00003996 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003997 GEN_ERROR("Select operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00003998 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003999 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004000 ;}
4001 break;
4002
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004003 case 159:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004004#line 1657 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004005 {
Reid Spencera132e042006-12-03 05:46:11 +00004006 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004007 GEN_ERROR("Binary operator types must match!");
Reid Spencer1628cec2006-10-26 06:15:43 +00004008 CHECK_FOR_ERROR;
Reid Spencer9eef56f2006-12-05 19:16:11 +00004009 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004010 ;}
4011 break;
4012
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004013 case 160:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004014#line 1663 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004015 {
Reid Spencera132e042006-12-03 05:46:11 +00004016 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004017 GEN_ERROR("Logical operator types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004018 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4019 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4020 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00004021 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00004022 }
Reid Spencera132e042006-12-03 05:46:11 +00004023 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004024 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004025 ;}
4026 break;
4027
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004028 case 161:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004029#line 1674 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004030 {
Reid Spencera132e042006-12-03 05:46:11 +00004031 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer1628cec2006-10-26 06:15:43 +00004032 GEN_ERROR("setcc operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004033 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004034 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004035 ;}
4036 break;
4037
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004038 case 162:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004039#line 1680 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004040 {
Reid Spencera132e042006-12-03 05:46:11 +00004041 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4042 GEN_ERROR("icmp operand types must match!");
4043 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4044 ;}
4045 break;
4046
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004047 case 163:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004048#line 1685 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004049 {
4050 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4051 GEN_ERROR("fcmp operand types must match!");
4052 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4053 ;}
4054 break;
4055
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004056 case 164:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004057#line 1690 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004058 {
4059 if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
Reid Spencer1628cec2006-10-26 06:15:43 +00004060 GEN_ERROR("Shift count for shift constant must be unsigned byte!");
Reid Spencera132e042006-12-03 05:46:11 +00004061 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
Reid Spencer1628cec2006-10-26 06:15:43 +00004062 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00004063 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00004064 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004065 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004066 ;}
4067 break;
4068
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004069 case 165:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004070#line 1699 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004071 {
Reid Spencera132e042006-12-03 05:46:11 +00004072 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004073 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004074 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004075 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004076 ;}
4077 break;
4078
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004079 case 166:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004080#line 1705 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004081 {
Reid Spencera132e042006-12-03 05:46:11 +00004082 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004083 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004084 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004085 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004086 ;}
4087 break;
4088
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004089 case 167:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004090#line 1711 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004091 {
Reid Spencera132e042006-12-03 05:46:11 +00004092 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004093 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004094 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004095 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004096 ;}
4097 break;
4098
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004099 case 168:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004100#line 1720 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004101 {
4102 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004103 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004104 ;}
4105 break;
4106
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004107 case 169:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004108#line 1724 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004109 {
Reid Spencera132e042006-12-03 05:46:11 +00004110 (yyval.ConstVector) = new std::vector<Constant*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00004111 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004112 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004113 ;}
4114 break;
4115
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004116 case 170:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004117#line 1732 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004118 { (yyval.BoolVal) = false; ;}
4119 break;
4120
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004121 case 171:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004122#line 1732 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004123 { (yyval.BoolVal) = true; ;}
4124 break;
4125
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004126 case 172:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004127#line 1742 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004128 {
4129 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004130 CurModule.ModuleDone();
Reid Spencerf63697d2006-10-09 17:36:59 +00004131 CHECK_FOR_ERROR;
Reid Spencer3822ff52006-11-08 06:47:33 +00004132;}
4133 break;
4134
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004135 case 173:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004136#line 1750 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004137 {
4138 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004139 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004140 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004141 ;}
4142 break;
4143
Reid Spencera132e042006-12-03 05:46:11 +00004144 case 174:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004145#line 1755 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004146 {
4147 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer3ed469c2006-11-02 20:25:50 +00004148 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004149 ;}
4150 break;
4151
Reid Spencera132e042006-12-03 05:46:11 +00004152 case 175:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004153#line 1759 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004154 {
4155 (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
4156 CHECK_FOR_ERROR
4157 ;}
4158 break;
4159
4160 case 176:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004161#line 1763 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004162 {
4163 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
4164 CHECK_FOR_ERROR
4165 ;}
4166 break;
4167
4168 case 177:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004169#line 1767 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004170 {
4171 (yyval.ModuleVal) = CurModule.CurrentModule;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004172 // Emit an error if there are any unresolved types left.
4173 if (!CurModule.LateResolveTypes.empty()) {
4174 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004175 if (DID.Type == ValID::NameVal) {
4176 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4177 } else {
4178 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4179 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004180 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004181 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004182 ;}
4183 break;
4184
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004185 case 178:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004186#line 1782 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004187 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004188 // Eagerly resolve types. This is not an optimization, this is a
4189 // requirement that is due to the fact that we could have this:
4190 //
4191 // %list = type { %list * }
4192 // %list = type { %list * } ; repeated type decl
4193 //
4194 // If types are not resolved eagerly, then the two types will not be
4195 // determined to be the same type!
4196 //
Reid Spencera132e042006-12-03 05:46:11 +00004197 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004198
Reid Spencera132e042006-12-03 05:46:11 +00004199 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004200 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004201 // If this is a named type that is not a redefinition, add it to the slot
4202 // table.
Reid Spencera132e042006-12-03 05:46:11 +00004203 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004204 }
Reid Spencera132e042006-12-03 05:46:11 +00004205
4206 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004207 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004208 ;}
4209 break;
4210
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004211 case 179:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004212#line 1804 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004213 { // Function prototypes can be in const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004214 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004215 ;}
4216 break;
4217
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004218 case 180:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004219#line 1807 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004220 { // Asm blocks can be in the const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004221 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004222 ;}
4223 break;
4224
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004225 case 181:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004226#line 1810 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004227 {
Reid Spencera132e042006-12-03 05:46:11 +00004228 if ((yyvsp[0].ConstVal) == 0)
Reid Spencer5b7e7532006-09-28 19:28:24 +00004229 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencera132e042006-12-03 05:46:11 +00004230 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 +00004231 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004232 ;}
4233 break;
4234
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004235 case 182:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004236#line 1815 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004237 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004238 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004239 ;}
4240 break;
4241
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004242 case 183:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004243#line 1818 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004244 {
Reid Spencera132e042006-12-03 05:46:11 +00004245 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004246 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004247 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004248 ;}
4249 break;
4250
Reid Spencera132e042006-12-03 05:46:11 +00004251 case 184:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004252#line 1822 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004253 {
Reid Spencer3ed469c2006-11-02 20:25:50 +00004254 CurGV = 0;
4255 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004256 ;}
4257 break;
4258
Reid Spencera132e042006-12-03 05:46:11 +00004259 case 185:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004260#line 1826 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004261 {
4262 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
4263 CHECK_FOR_ERROR
4264 delete (yyvsp[0].TypeVal);
4265 ;}
4266 break;
4267
4268 case 186:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004269#line 1830 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004270 {
4271 CurGV = 0;
4272 CHECK_FOR_ERROR
4273 ;}
4274 break;
4275
4276 case 187:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004277#line 1834 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004278 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004279 CurGV =
Reid Spencera132e042006-12-03 05:46:11 +00004280 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004281 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004282 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004283 ;}
4284 break;
4285
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004286 case 188:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004287#line 1839 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004288 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004289 CurGV = 0;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004290 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004291 ;}
4292 break;
4293
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004294 case 189:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004295#line 1843 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004296 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004297 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004298 ;}
4299 break;
4300
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004301 case 190:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004302#line 1846 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004303 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004304 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004305 ;}
4306 break;
4307
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004308 case 191:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004309#line 1849 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004310 {
4311 ;}
4312 break;
4313
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004314 case 192:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004315#line 1853 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004316 {
Chris Lattner66316012006-01-24 04:14:29 +00004317 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencer3822ff52006-11-08 06:47:33 +00004318 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4319 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4320 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004321
4322 if (AsmSoFar.empty())
4323 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4324 else
4325 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004326 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004327;}
4328 break;
4329
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004330 case 193:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004331#line 1866 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004332 { (yyval.Endianness) = Module::BigEndian; ;}
4333 break;
4334
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004335 case 194:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004336#line 1867 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004337 { (yyval.Endianness) = Module::LittleEndian; ;}
4338 break;
4339
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004340 case 195:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004341#line 1869 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004342 {
4343 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
Reid Spencer61c83e02006-08-18 08:43:06 +00004344 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004345 ;}
4346 break;
4347
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004348 case 196:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004349#line 1873 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004350 {
4351 if ((yyvsp[0].UInt64Val) == 32)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004352 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
Reid Spencer3822ff52006-11-08 06:47:33 +00004353 else if ((yyvsp[0].UInt64Val) == 64)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004354 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4355 else
Reid Spencer3822ff52006-11-08 06:47:33 +00004356 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00004357 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004358 ;}
4359 break;
4360
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004361 case 197:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004362#line 1882 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004363 {
4364 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4365 free((yyvsp[0].StrVal));
4366 ;}
4367 break;
4368
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004369 case 198:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004370#line 1886 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004371 {
4372 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4373 free((yyvsp[0].StrVal));
4374 ;}
4375 break;
4376
Reid Spencera132e042006-12-03 05:46:11 +00004377 case 200:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004378#line 1893 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004379 {
4380 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4381 free((yyvsp[0].StrVal));
4382 CHECK_FOR_ERROR
4383 ;}
4384 break;
4385
4386 case 201:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004387#line 1898 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004388 {
4389 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4390 free((yyvsp[0].StrVal));
4391 CHECK_FOR_ERROR
4392 ;}
4393 break;
4394
4395 case 202:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004396#line 1903 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004397 {
Reid Spencer61c83e02006-08-18 08:43:06 +00004398 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004399 ;}
4400 break;
4401
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004402 case 206:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004403#line 1913 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004404 { (yyval.StrVal) = 0; ;}
4405 break;
4406
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004407 case 207:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004408#line 1915 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004409 {
Reid Spencera132e042006-12-03 05:46:11 +00004410 if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004411 GEN_ERROR("void typed arguments are invalid!");
Reid Spencera132e042006-12-03 05:46:11 +00004412 (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004413 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004414;}
4415 break;
4416
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004417 case 208:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004418#line 1922 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004419 {
4420 (yyval.ArgList) = (yyvsp[-2].ArgList);
4421 (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
4422 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004423 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004424 ;}
4425 break;
4426
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004427 case 209:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004428#line 1928 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004429 {
Reid Spencera132e042006-12-03 05:46:11 +00004430 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
Reid Spencer3822ff52006-11-08 06:47:33 +00004431 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4432 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004433 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004434 ;}
4435 break;
4436
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004437 case 210:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004438#line 1935 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004439 {
4440 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004441 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004442 ;}
4443 break;
4444
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004445 case 211:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004446#line 1939 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004447 {
4448 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencera132e042006-12-03 05:46:11 +00004449 (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
4450 char*>(new PATypeHolder(Type::VoidTy), 0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004451 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004452 ;}
4453 break;
4454
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004455 case 212:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004456#line 1945 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004457 {
Reid Spencera132e042006-12-03 05:46:11 +00004458 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
4459 (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004460 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004461 ;}
4462 break;
4463
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004464 case 213:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004465#line 1950 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004466 {
4467 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004468 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004469 ;}
4470 break;
4471
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004472 case 214:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004473#line 1956 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004474 {
4475 UnEscapeLexed((yyvsp[-5].StrVal));
4476 std::string FunctionName((yyvsp[-5].StrVal));
4477 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004478
Reid Spencera132e042006-12-03 05:46:11 +00004479 if (!(*(yyvsp[-6].TypeVal))->isFirstClassType() && *(yyvsp[-6].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004480 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004481
4482 std::vector<const Type*> ParamTypeList;
Reid Spencer3822ff52006-11-08 06:47:33 +00004483 if ((yyvsp[-3].ArgList)) { // If there are arguments...
Reid Spencera132e042006-12-03 05:46:11 +00004484 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004485 I != (yyvsp[-3].ArgList)->end(); ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004486 ParamTypeList.push_back(I->first->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004487 }
4488
4489 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4490 if (isVarArg) ParamTypeList.pop_back();
4491
Reid Spencera132e042006-12-03 05:46:11 +00004492 const FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeVal), ParamTypeList, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004493 const PointerType *PFT = PointerType::get(FT);
Reid Spencera132e042006-12-03 05:46:11 +00004494 delete (yyvsp[-6].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004495
4496 ValID ID;
4497 if (!FunctionName.empty()) {
4498 ID = ValID::create((char*)FunctionName.c_str());
4499 } else {
4500 ID = ValID::create((int)CurModule.Values[PFT].size());
4501 }
4502
4503 Function *Fn = 0;
4504 // See if this function was forward referenced. If so, recycle the object.
4505 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4506 // Move the function to the end of the list, from whereever it was
4507 // previously inserted.
4508 Fn = cast<Function>(FWRef);
4509 CurModule.CurrentModule->getFunctionList().remove(Fn);
4510 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4511 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4512 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4513 // If this is the case, either we need to be a forward decl, or it needs
4514 // to be.
4515 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004516 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004517
4518 // Make sure to strip off any argument names so we can't get conflicts.
4519 if (Fn->isExternal())
4520 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4521 AI != AE; ++AI)
4522 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004523 } else { // Not already defined?
4524 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4525 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004526
Reid Spencer68a24bd2005-08-27 18:50:39 +00004527 InsertValue(Fn, CurModule.Values);
4528 }
4529
4530 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004531
4532 if (CurFun.isDeclare) {
4533 // If we have declaration, always overwrite linkage. This will allow us to
4534 // correctly handle cases, when pointer to function is passed as argument to
4535 // another function.
4536 Fn->setLinkage(CurFun.Linkage);
4537 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004538 Fn->setCallingConv((yyvsp[-7].UIntVal));
4539 Fn->setAlignment((yyvsp[0].UIntVal));
4540 if ((yyvsp[-1].StrVal)) {
4541 Fn->setSection((yyvsp[-1].StrVal));
4542 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004543 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004544
4545 // Add all of the arguments we parsed to the function...
Reid Spencer3822ff52006-11-08 06:47:33 +00004546 if ((yyvsp[-3].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004547 if (isVarArg) { // Nuke the last entry
Reid Spencera132e042006-12-03 05:46:11 +00004548 assert((yyvsp[-3].ArgList)->back().first->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().second == 0&&
4549 "Not a varargs marker!");
4550 delete (yyvsp[-3].ArgList)->back().first;
Reid Spencer3822ff52006-11-08 06:47:33 +00004551 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004552 }
4553 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencera132e042006-12-03 05:46:11 +00004554 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004555 I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencera132e042006-12-03 05:46:11 +00004556 delete I->first; // Delete the typeholder...
4557
Reid Spencer68a24bd2005-08-27 18:50:39 +00004558 setValueName(ArgIt, I->second); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004559 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004560 InsertValue(ArgIt);
4561 }
Reid Spencera132e042006-12-03 05:46:11 +00004562
Reid Spencer3822ff52006-11-08 06:47:33 +00004563 delete (yyvsp[-3].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004564 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004565 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004566;}
4567 break;
4568
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004569 case 217:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004570#line 2052 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004571 {
4572 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004573
4574 // Make sure that we keep track of the linkage type even if there was a
4575 // previous "declare".
Reid Spencer3822ff52006-11-08 06:47:33 +00004576 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
4577;}
4578 break;
4579
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004580 case 220:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004581#line 2062 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004582 {
4583 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004584 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004585;}
4586 break;
4587
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004588 case 222:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004589#line 2068 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004590 { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
4591 break;
4592
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004593 case 223:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004594#line 2069 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer481169e2006-12-01 00:33:46 +00004595 { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004596 break;
4597
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004598 case 224:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004599#line 2071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004600 { CurFun.isDeclare = true; ;}
4601 break;
4602
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004603 case 225:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004604#line 2071 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004605 {
4606 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004607 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004608 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004609 ;}
4610 break;
4611
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004612 case 226:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004613#line 2081 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004614 {
4615 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004616 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004617 ;}
4618 break;
4619
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004620 case 227:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004621#line 2085 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004622 {
4623 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004624 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004625 ;}
4626 break;
4627
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004628 case 228:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004629#line 2090 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004630 { // A reference to a direct constant
4631 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004632 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004633 ;}
4634 break;
4635
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004636 case 229:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004637#line 2094 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004638 {
4639 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004640 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004641 ;}
4642 break;
4643
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004644 case 230:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004645#line 2098 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004646 { // Perhaps it's an FP constant?
4647 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004648 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004649 ;}
4650 break;
4651
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004652 case 231:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004653#line 2102 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004654 {
4655 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
Reid Spencer61c83e02006-08-18 08:43:06 +00004656 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004657 ;}
4658 break;
4659
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004660 case 232:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004661#line 2106 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004662 {
4663 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
Reid Spencer61c83e02006-08-18 08:43:06 +00004664 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004665 ;}
4666 break;
4667
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004668 case 233:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004669#line 2110 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004670 {
4671 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004672 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004673 ;}
4674 break;
4675
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004676 case 234:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004677#line 2114 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004678 {
4679 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004680 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004681 ;}
4682 break;
4683
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004684 case 235:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004685#line 2118 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004686 { // A vector zero constant.
4687 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004688 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004689 ;}
4690 break;
4691
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004692 case 236:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004693#line 2122 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004694 { // Nonempty unsized packed vector
Reid Spencera132e042006-12-03 05:46:11 +00004695 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
Reid Spencer3822ff52006-11-08 06:47:33 +00004696 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004697
4698 PackedType* pt = PackedType::get(ETy, NumElements);
4699 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004700 HandleUpRefs(
4701 PackedType::get(
4702 ETy,
4703 NumElements)
4704 )
4705 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004706
4707 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00004708 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00004709 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004710 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004711 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004712 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004713 }
4714
Reid Spencera132e042006-12-03 05:46:11 +00004715 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
Reid Spencer3822ff52006-11-08 06:47:33 +00004716 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00004717 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004718 ;}
4719 break;
Reid Spencer21be8652006-10-22 07:03:43 +00004720
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004721 case 237:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004722#line 2147 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004723 {
Reid Spencera132e042006-12-03 05:46:11 +00004724 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004725 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004726 ;}
4727 break;
4728
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004729 case 238:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004730#line 2151 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004731 {
4732 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4733 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4734 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4735 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4736 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4737 free((yyvsp[-2].StrVal));
4738 free((yyvsp[0].StrVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004739 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004740 ;}
4741 break;
4742
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004743 case 239:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004744#line 2165 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004745 { // Is it an integer reference...?
4746 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4747 CHECK_FOR_ERROR
4748 ;}
4749 break;
4750
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004751 case 240:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004752#line 2169 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004753 { // Is it a named reference...?
4754 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4755 CHECK_FOR_ERROR
4756 ;}
4757 break;
4758
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004759 case 243:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004760#line 2181 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004761 {
Reid Spencera132e042006-12-03 05:46:11 +00004762 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004763 CHECK_FOR_ERROR
4764 ;}
4765 break;
4766
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004767 case 244:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004768#line 2186 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004769 {
4770 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4771 CHECK_FOR_ERROR
4772 ;}
4773 break;
4774
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004775 case 245:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004776#line 2190 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004777 { // Do not allow functions with 0 basic blocks
4778 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4779 CHECK_FOR_ERROR
4780 ;}
4781 break;
4782
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004783 case 246:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004784#line 2199 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004785 {
4786 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4787 CHECK_FOR_ERROR
4788 InsertValue((yyvsp[0].TermInstVal));
4789
4790 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4791 InsertValue((yyvsp[-2].BasicBlockVal));
4792 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
4793 CHECK_FOR_ERROR
4794 ;}
4795 break;
4796
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004797 case 247:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004798#line 2210 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004799 {
Reid Spencer3da59db2006-11-27 01:05:10 +00004800 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4801 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4802 if (CI2->getParent() == 0)
4803 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
Reid Spencer3822ff52006-11-08 06:47:33 +00004804 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4805 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4806 CHECK_FOR_ERROR
4807 ;}
4808 break;
4809
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004810 case 248:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004811#line 2219 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004812 {
4813 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004814 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004815
4816 // Make sure to move the basic block to the correct location in the
4817 // function, instead of leaving it inserted wherever it was first
4818 // referenced.
4819 Function::BasicBlockListType &BBL =
4820 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004821 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004822 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004823 ;}
4824 break;
4825
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004826 case 249:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004827#line 2231 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004828 {
4829 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004830 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004831
4832 // Make sure to move the basic block to the correct location in the
4833 // function, instead of leaving it inserted wherever it was first
4834 // referenced.
4835 Function::BasicBlockListType &BBL =
4836 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004837 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004838 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004839 ;}
4840 break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004841
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004842 case 250:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004843#line 2244 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004844 { // Return with a result...
Reid Spencera132e042006-12-03 05:46:11 +00004845 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004846 CHECK_FOR_ERROR
4847 ;}
4848 break;
4849
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004850 case 251:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004851#line 2248 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004852 { // Return with no result...
4853 (yyval.TermInstVal) = new ReturnInst();
4854 CHECK_FOR_ERROR
4855 ;}
4856 break;
4857
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004858 case 252:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004859#line 2252 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004860 { // Unconditional Branch...
4861 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
4862 CHECK_FOR_ERROR
4863 (yyval.TermInstVal) = new BranchInst(tmpBB);
4864 ;}
4865 break;
4866
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004867 case 253:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004868#line 2257 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004869 {
4870 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
4871 CHECK_FOR_ERROR
4872 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
4873 CHECK_FOR_ERROR
4874 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4875 CHECK_FOR_ERROR
4876 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4877 ;}
4878 break;
4879
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004880 case 254:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004881#line 2266 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004882 {
Reid Spencera132e042006-12-03 05:46:11 +00004883 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004884 CHECK_FOR_ERROR
4885 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4886 CHECK_FOR_ERROR
4887 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4888 (yyval.TermInstVal) = S;
4889
4890 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4891 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004892 for (; I != E; ++I) {
4893 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4894 S->addCase(CI, I->second);
4895 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004896 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004897 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004898 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004899 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004900 ;}
4901 break;
4902
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004903 case 255:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004904#line 2285 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004905 {
Reid Spencera132e042006-12-03 05:46:11 +00004906 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004907 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004908 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004909 CHECK_FOR_ERROR
4910 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencer3822ff52006-11-08 06:47:33 +00004911 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004912 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004913 ;}
4914 break;
4915
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004916 case 256:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004917#line 2295 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004918 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004919 const PointerType *PFTy;
4920 const FunctionType *Ty;
4921
Reid Spencera132e042006-12-03 05:46:11 +00004922 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004923 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4924 // Pull out the types of all of the arguments...
4925 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00004926 if ((yyvsp[-7].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00004927 for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004928 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004929 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004930 }
4931
4932 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
4933 if (isVarArg) ParamTypes.pop_back();
4934
Reid Spencera132e042006-12-03 05:46:11 +00004935 Ty = FunctionType::get((yyvsp[-10].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004936 PFTy = PointerType::get(Ty);
4937 }
4938
Reid Spencer3822ff52006-11-08 06:47:33 +00004939 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004940 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004941 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004942 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004943 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004944 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004945
4946 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00004947 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
4948 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004949 } else { // Has arguments?
4950 // Loop through FunctionType's arguments and ensure they are specified
4951 // correctly!
4952 //
4953 FunctionType::param_iterator I = Ty->param_begin();
4954 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00004955 std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004956
Reid Spencera132e042006-12-03 05:46:11 +00004957 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
4958 if ((*ArgI)->getType() != *I)
4959 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
4960 (*I)->getDescription() + "'!");
4961
4962 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
4963 GEN_ERROR("Invalid number of parameters detected!");
4964
4965 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004966 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004967 cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004968
Reid Spencera132e042006-12-03 05:46:11 +00004969 delete (yyvsp[-10].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004970 delete (yyvsp[-7].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004971 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004972 ;}
4973 break;
4974
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004975 case 257:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004976#line 2350 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004977 {
4978 (yyval.TermInstVal) = new UnwindInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004979 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004980 ;}
4981 break;
4982
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004983 case 258:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004984#line 2354 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004985 {
4986 (yyval.TermInstVal) = new UnreachableInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004987 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004988 ;}
4989 break;
4990
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004991 case 259:
Reid Spencer9eef56f2006-12-05 19:16:11 +00004992#line 2361 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004993 {
4994 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
Reid Spencera132e042006-12-03 05:46:11 +00004995 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004996 CHECK_FOR_ERROR
Reid Spencer61c83e02006-08-18 08:43:06 +00004997 if (V == 0)
4998 GEN_ERROR("May only switch on a constant pool value!");
4999
Reid Spencer3822ff52006-11-08 06:47:33 +00005000 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005001 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005002 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5003 ;}
5004 break;
5005
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005006 case 260:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005007#line 2372 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005008 {
5009 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005010 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005011 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005012
5013 if (V == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005014 GEN_ERROR("May only switch on a constant pool value!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005015
Reid Spencer3822ff52006-11-08 06:47:33 +00005016 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005017 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005018 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5019 ;}
5020 break;
5021
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005022 case 261:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005023#line 2385 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005024 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005025 // Is this definition named?? if so, assign the name...
Reid Spencer3822ff52006-11-08 06:47:33 +00005026 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005027 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005028 InsertValue((yyvsp[0].InstVal));
5029 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005030 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005031;}
5032 break;
5033
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005034 case 262:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005035#line 2394 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005036 { // Used for PHI nodes
5037 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005038 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005039 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005040 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005041 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005042 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
Reid Spencera132e042006-12-03 05:46:11 +00005043 delete (yyvsp[-5].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005044 ;}
5045 break;
5046
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005047 case 263:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005048#line 2403 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005049 {
5050 (yyval.PHIList) = (yyvsp[-6].PHIList);
5051 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005052 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005053 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005054 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005055 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5056 ;}
5057 break;
5058
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005059 case 264:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005060#line 2413 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005061 { // Used for call statements, and memory insts...
Reid Spencera132e042006-12-03 05:46:11 +00005062 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00005063 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5064 ;}
5065 break;
5066
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005067 case 265:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005068#line 2417 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005069 {
5070 (yyval.ValueList) = (yyvsp[-2].ValueList);
5071 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005072 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005073 ;}
5074 break;
5075
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005076 case 267:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005077#line 2424 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005078 { (yyval.ValueList) = 0; ;}
Reid Spencer861d9d62006-11-28 07:29:44 +00005079 break;
5080
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005081 case 268:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005082#line 2426 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005083 {
5084 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005085 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005086 ;}
5087 break;
5088
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005089 case 269:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005090#line 2430 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005091 {
5092 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005093 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005094 ;}
5095 break;
5096
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005097 case 270:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005098#line 2435 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005099 {
Reid Spencera132e042006-12-03 05:46:11 +00005100 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5101 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005102 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005103 "Arithmetic operator requires integer, FP, or packed operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005104 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5105 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5106 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5107 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Reid Spencer3ed469c2006-11-02 20:25:50 +00005108 GEN_ERROR("U/S/FRem not supported on packed types!");
Reid Spencera132e042006-12-03 05:46:11 +00005109 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005110 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005111 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005112 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005113 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005114 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005115 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005116 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005117 ;}
5118 break;
5119
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005120 case 271:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005121#line 2454 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005122 {
Reid Spencera132e042006-12-03 05:46:11 +00005123 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5124 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5125 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00005126 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00005127 }
Reid Spencera132e042006-12-03 05:46:11 +00005128 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005129 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005130 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005131 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005132 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005133 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005134 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005135 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005136 ;}
5137 break;
5138
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005139 case 272:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005140#line 2469 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005141 {
Reid Spencera132e042006-12-03 05:46:11 +00005142 if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
Reid Spencer61c83e02006-08-18 08:43:06 +00005143 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005144 "PackedTypes currently not supported in setcc instructions!");
5145 }
Reid Spencera132e042006-12-03 05:46:11 +00005146 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005147 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005148 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005149 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005150 (yyval.InstVal) = new SetCondInst((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005151 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005152 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005153 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005154 ;}
5155 break;
5156
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005157 case 273:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005158#line 2483 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005159 {
5160 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5161 GEN_ERROR("Packed types not supported by icmp instruction");
5162 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5163 CHECK_FOR_ERROR
5164 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5165 CHECK_FOR_ERROR
5166 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5167 if ((yyval.InstVal) == 0)
5168 GEN_ERROR("icmp operator returned null!");
5169 ;}
5170 break;
5171
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005172 case 274:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005173#line 2494 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005174 {
5175 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5176 GEN_ERROR("Packed types not supported by fcmp instruction");
5177 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5178 CHECK_FOR_ERROR
5179 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5180 CHECK_FOR_ERROR
5181 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5182 if ((yyval.InstVal) == 0)
5183 GEN_ERROR("fcmp operator returned null!");
5184 ;}
5185 break;
5186
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005187 case 275:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005188#line 2505 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005189 {
Reid Spencer481169e2006-12-01 00:33:46 +00005190 llvm_cerr << "WARNING: Use of eliminated 'not' instruction:"
Reid Spencer68a24bd2005-08-27 18:50:39 +00005191 << " Replacing with 'xor'.\n";
5192
Reid Spencera132e042006-12-03 05:46:11 +00005193 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005194 if (Ones == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005195 GEN_ERROR("Expected integral type for not instruction!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005196
Reid Spencera132e042006-12-03 05:46:11 +00005197 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
Reid Spencer3822ff52006-11-08 06:47:33 +00005198 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005199 GEN_ERROR("Could not create a xor instruction!");
5200 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005201 ;}
5202 break;
5203
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005204 case 276:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005205#line 2518 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005206 {
Reid Spencera132e042006-12-03 05:46:11 +00005207 if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005208 GEN_ERROR("Shift amount must be ubyte!");
Reid Spencera132e042006-12-03 05:46:11 +00005209 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Reid Spencer61c83e02006-08-18 08:43:06 +00005210 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005211 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00005212 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005213 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005214 ;}
5215 break;
5216
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005217 case 277:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005218#line 2527 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005219 {
Reid Spencera132e042006-12-03 05:46:11 +00005220 Value* Val = (yyvsp[-2].ValueVal);
5221 const Type* Ty = (yyvsp[0].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00005222 if (!Val->getType()->isFirstClassType())
5223 GEN_ERROR("cast from a non-primitive type: '" +
5224 Val->getType()->getDescription() + "'!");
5225 if (!Ty->isFirstClassType())
5226 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencera132e042006-12-03 05:46:11 +00005227 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].TypeVal)->get());
5228 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005229 ;}
5230 break;
5231
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005232 case 278:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005233#line 2538 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005234 {
Reid Spencera132e042006-12-03 05:46:11 +00005235 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005236 GEN_ERROR("select condition must be boolean!");
Reid Spencera132e042006-12-03 05:46:11 +00005237 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005238 GEN_ERROR("select value types should match!");
Reid Spencera132e042006-12-03 05:46:11 +00005239 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005240 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005241 ;}
5242 break;
5243
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005244 case 279:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005245#line 2546 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005246 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005247 NewVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005248 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5249 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005250 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005251 ;}
5252 break;
5253
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005254 case 280:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005255#line 2552 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005256 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005257 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005258 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005259 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005260 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005261
5262 //b = vaarg a, t ->
5263 //foo = alloca 1 of t
5264 //bar = vacopy a
5265 //store bar -> foo
5266 //b = vaarg foo, t
5267 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
5268 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005269 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005270 CurBB->getInstList().push_back(bar);
5271 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005272 (yyval.InstVal) = new VAArgInst(foo, *(yyvsp[0].TypeVal));
5273 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005274 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005275 ;}
5276 break;
5277
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005278 case 281:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005279#line 2572 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005280 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005281 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005282 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005283 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005284 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005285
5286 //b = vanext a, t ->
5287 //foo = alloca 1 of t
5288 //bar = vacopy a
5289 //store bar -> foo
5290 //tmp = vaarg foo, t
5291 //b = load foo
5292 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
5293 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005294 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005295 CurBB->getInstList().push_back(bar);
5296 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005297 Instruction* tmp = new VAArgInst(foo, *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005298 CurBB->getInstList().push_back(tmp);
Reid Spencer3822ff52006-11-08 06:47:33 +00005299 (yyval.InstVal) = new LoadInst(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005300 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005301 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005302 ;}
5303 break;
5304
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005305 case 282:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005306#line 2595 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005307 {
Reid Spencera132e042006-12-03 05:46:11 +00005308 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005309 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005310 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005311 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005312 ;}
5313 break;
5314
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005315 case 283:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005316#line 2601 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005317 {
Reid Spencera132e042006-12-03 05:46:11 +00005318 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005319 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005320 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005321 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005322 ;}
5323 break;
5324
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005325 case 284:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005326#line 2607 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005327 {
Reid Spencera132e042006-12-03 05:46:11 +00005328 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005329 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005330 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005331 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005332 ;}
5333 break;
5334
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005335 case 285:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005336#line 2613 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005337 {
5338 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005339 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005340 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005341 (yyval.InstVal) = new PHINode(Ty);
5342 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5343 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5344 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Reid Spencer61c83e02006-08-18 08:43:06 +00005345 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005346 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5347 (yyvsp[0].PHIList)->pop_front();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005348 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005349 delete (yyvsp[0].PHIList); // Free the list...
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 286:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005355#line 2628 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005356 {
Reid Spencer3da59db2006-11-27 01:05:10 +00005357 const PointerType *PFTy = 0;
5358 const FunctionType *Ty = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005359
Reid Spencera132e042006-12-03 05:46:11 +00005360 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005361 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5362 // Pull out the types of all of the arguments...
5363 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00005364 if ((yyvsp[-1].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00005365 for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005366 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00005367 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005368 }
5369
5370 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5371 if (isVarArg) ParamTypes.pop_back();
5372
Reid Spencera132e042006-12-03 05:46:11 +00005373 if (!(*(yyvsp[-4].TypeVal))->isFirstClassType() && *(yyvsp[-4].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005374 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005375
Reid Spencera132e042006-12-03 05:46:11 +00005376 Ty = FunctionType::get((yyvsp[-4].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005377 PFTy = PointerType::get(Ty);
5378 }
5379
Reid Spencer3822ff52006-11-08 06:47:33 +00005380 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005381 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005382
5383 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00005384 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
Reid Spencer68a24bd2005-08-27 18:50:39 +00005385 // Make sure no arguments is a good thing!
5386 if (Ty->getNumParams() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005387 GEN_ERROR("No arguments passed to a function that "
Reid Spencer68a24bd2005-08-27 18:50:39 +00005388 "expects arguments!");
5389
Reid Spencer3822ff52006-11-08 06:47:33 +00005390 (yyval.InstVal) = new CallInst(V, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005391 } else { // Has arguments?
5392 // Loop through FunctionType's arguments and ensure they are specified
5393 // correctly!
5394 //
5395 FunctionType::param_iterator I = Ty->param_begin();
5396 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00005397 std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005398
Reid Spencera132e042006-12-03 05:46:11 +00005399 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5400 if ((*ArgI)->getType() != *I)
5401 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
5402 (*I)->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005403
5404 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005405 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005406
Reid Spencera132e042006-12-03 05:46:11 +00005407 (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005408 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005409 cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
5410 cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
Reid Spencera132e042006-12-03 05:46:11 +00005411 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005412 delete (yyvsp[-1].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005413 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005414 ;}
5415 break;
5416
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005417 case 287:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005418#line 2687 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005419 {
5420 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005421 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005422 ;}
5423 break;
5424
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005425 case 288:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005426#line 2694 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005427 {
5428 (yyval.ValueList) = (yyvsp[0].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005429 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005430 ;}
5431 break;
5432
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005433 case 289:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005434#line 2697 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005435 {
Reid Spencera132e042006-12-03 05:46:11 +00005436 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer61c83e02006-08-18 08:43:06 +00005437 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005438 ;}
5439 break;
5440
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005441 case 290:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005442#line 2702 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005443 {
5444 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005445 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005446 ;}
5447 break;
5448
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005449 case 291:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005450#line 2706 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005451 {
5452 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005453 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005454 ;}
5455 break;
5456
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005457 case 292:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005458#line 2713 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005459 {
Reid Spencera132e042006-12-03 05:46:11 +00005460 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5461 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005462 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005463 ;}
5464 break;
5465
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005466 case 293:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005467#line 2718 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005468 {
Reid Spencera132e042006-12-03 05:46:11 +00005469 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005470 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005471 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5472 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005473 ;}
5474 break;
5475
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005476 case 294:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005477#line 2724 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005478 {
Reid Spencera132e042006-12-03 05:46:11 +00005479 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5480 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005481 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005482 ;}
5483 break;
5484
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005485 case 295:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005486#line 2729 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005487 {
Reid Spencera132e042006-12-03 05:46:11 +00005488 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005489 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005490 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5491 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005492 ;}
5493 break;
5494
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005495 case 296:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005496#line 2735 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005497 {
Reid Spencera132e042006-12-03 05:46:11 +00005498 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005499 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencera132e042006-12-03 05:46:11 +00005500 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5501 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005502 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005503 ;}
5504 break;
5505
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005506 case 297:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005507#line 2743 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005508 {
Reid Spencera132e042006-12-03 05:46:11 +00005509 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005510 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005511 (*(yyvsp[-1].TypeVal))->getDescription());
5512 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005513 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005514 (*(yyvsp[-1].TypeVal))->getDescription());
5515 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005516 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005517 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
Reid Spencera132e042006-12-03 05:46:11 +00005518 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005519 ;}
5520 break;
5521
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005522 case 298:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005523#line 2755 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005524 {
Reid Spencera132e042006-12-03 05:46:11 +00005525 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005526 if (!PT)
Reid Spencer61c83e02006-08-18 08:43:06 +00005527 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005528 (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005529 const Type *ElTy = PT->getElementType();
Reid Spencera132e042006-12-03 05:46:11 +00005530 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5531 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005532 "' into space of type '" + ElTy->getDescription() + "'!");
5533
Reid Spencera132e042006-12-03 05:46:11 +00005534 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005535 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005536 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5537 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005538 ;}
5539 break;
5540
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005541 case 299:
Reid Spencer9eef56f2006-12-05 19:16:11 +00005542#line 2770 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005543 {
Reid Spencera132e042006-12-03 05:46:11 +00005544 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005545 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005546
Reid Spencera132e042006-12-03 05:46:11 +00005547 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005548 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencera132e042006-12-03 05:46:11 +00005549 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5550 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005551 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005552 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5553 delete (yyvsp[-2].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005554 delete (yyvsp[0].ValueList);
5555 ;}
5556 break;
5557
5558
5559 default: break;
5560 }
5561
5562/* Line 1126 of yacc.c. */
Reid Spencer9eef56f2006-12-05 19:16:11 +00005563#line 5564 "llvmAsmParser.tab.c"
Reid Spencer5b7e7532006-09-28 19:28:24 +00005564
5565 yyvsp -= yylen;
5566 yyssp -= yylen;
5567
Reid Spencer3822ff52006-11-08 06:47:33 +00005568
5569 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005570
5571 *++yyvsp = yyval;
5572
5573
Reid Spencer3822ff52006-11-08 06:47:33 +00005574 /* Now `shift' the result of the reduction. Determine what state
5575 that goes to, based on the state we popped back to and the rule
5576 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005577
5578 yyn = yyr1[yyn];
5579
Reid Spencer3822ff52006-11-08 06:47:33 +00005580 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5581 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005582 yystate = yytable[yystate];
5583 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005584 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005585
5586 goto yynewstate;
5587
5588
Reid Spencer3822ff52006-11-08 06:47:33 +00005589/*------------------------------------.
5590| yyerrlab -- here on detecting error |
5591`------------------------------------*/
5592yyerrlab:
5593 /* If not already recovering from an error, report this error. */
5594 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005595 {
5596 ++yynerrs;
Reid Spencer3822ff52006-11-08 06:47:33 +00005597#if YYERROR_VERBOSE
Reid Spencer5b7e7532006-09-28 19:28:24 +00005598 yyn = yypact[yystate];
Chris Lattner224f84f2006-08-18 17:34:45 +00005599
Reid Spencer3822ff52006-11-08 06:47:33 +00005600 if (YYPACT_NINF < yyn && yyn < YYLAST)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005601 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005602 int yytype = YYTRANSLATE (yychar);
5603 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5604 YYSIZE_T yysize = yysize0;
5605 YYSIZE_T yysize1;
5606 int yysize_overflow = 0;
5607 char *yymsg = 0;
5608# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5609 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5610 int yyx;
Reid Spencer5b7e7532006-09-28 19:28:24 +00005611
Reid Spencer3822ff52006-11-08 06:47:33 +00005612#if 0
5613 /* This is so xgettext sees the translatable formats that are
5614 constructed on the fly. */
5615 YY_("syntax error, unexpected %s");
5616 YY_("syntax error, unexpected %s, expecting %s");
5617 YY_("syntax error, unexpected %s, expecting %s or %s");
5618 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5619 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5620#endif
5621 char *yyfmt;
5622 char const *yyf;
5623 static char const yyunexpected[] = "syntax error, unexpected %s";
5624 static char const yyexpecting[] = ", expecting %s";
5625 static char const yyor[] = " or %s";
5626 char yyformat[sizeof yyunexpected
5627 + sizeof yyexpecting - 1
5628 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5629 * (sizeof yyor - 1))];
5630 char const *yyprefix = yyexpecting;
5631
5632 /* Start YYX at -YYN if negative to avoid negative indexes in
5633 YYCHECK. */
5634 int yyxbegin = yyn < 0 ? -yyn : 0;
5635
5636 /* Stay within bounds of both yycheck and yytname. */
5637 int yychecklim = YYLAST - yyn;
5638 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5639 int yycount = 1;
5640
5641 yyarg[0] = yytname[yytype];
5642 yyfmt = yystpcpy (yyformat, yyunexpected);
5643
5644 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5645 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5646 {
5647 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5648 {
5649 yycount = 1;
5650 yysize = yysize0;
5651 yyformat[sizeof yyunexpected - 1] = '\0';
5652 break;
5653 }
5654 yyarg[yycount++] = yytname[yyx];
5655 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5656 yysize_overflow |= yysize1 < yysize;
5657 yysize = yysize1;
5658 yyfmt = yystpcpy (yyfmt, yyprefix);
5659 yyprefix = yyor;
5660 }
5661
5662 yyf = YY_(yyformat);
5663 yysize1 = yysize + yystrlen (yyf);
5664 yysize_overflow |= yysize1 < yysize;
5665 yysize = yysize1;
5666
5667 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5668 yymsg = (char *) YYSTACK_ALLOC (yysize);
5669 if (yymsg)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005670 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005671 /* Avoid sprintf, as that infringes on the user's name space.
5672 Don't have undefined behavior even if the translation
5673 produced a string with the wrong number of "%s"s. */
5674 char *yyp = yymsg;
5675 int yyi = 0;
5676 while ((*yyp = *yyf))
Reid Spencer5b7e7532006-09-28 19:28:24 +00005677 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005678 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5679 {
5680 yyp += yytnamerr (yyp, yyarg[yyi++]);
5681 yyf += 2;
5682 }
5683 else
5684 {
5685 yyp++;
5686 yyf++;
5687 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005688 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005689 yyerror (yymsg);
5690 YYSTACK_FREE (yymsg);
Reid Spencer5b7e7532006-09-28 19:28:24 +00005691 }
5692 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005693 {
5694 yyerror (YY_("syntax error"));
5695 goto yyexhaustedlab;
5696 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005697 }
5698 else
5699#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00005700 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005701 }
5702
Reid Spencer3822ff52006-11-08 06:47:33 +00005703
Reid Spencer68a24bd2005-08-27 18:50:39 +00005704
5705 if (yyerrstatus == 3)
5706 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005707 /* If just tried and failed to reuse look-ahead token after an
5708 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005709
Reid Spencer3822ff52006-11-08 06:47:33 +00005710 if (yychar <= YYEOF)
5711 {
5712 /* Return failure if at end of input. */
5713 if (yychar == YYEOF)
5714 YYABORT;
5715 }
5716 else
5717 {
5718 yydestruct ("Error: discarding", yytoken, &yylval);
5719 yychar = YYEMPTY;
5720 }
5721 }
5722
5723 /* Else will try to reuse look-ahead token after shifting the error
5724 token. */
5725 goto yyerrlab1;
5726
5727
5728/*---------------------------------------------------.
5729| yyerrorlab -- error raised explicitly by YYERROR. |
5730`---------------------------------------------------*/
5731yyerrorlab:
5732
5733 /* Pacify compilers like GCC when the user code never invokes
5734 YYERROR and the label yyerrorlab therefore never appears in user
5735 code. */
5736 if (0)
5737 goto yyerrorlab;
5738
5739yyvsp -= yylen;
5740 yyssp -= yylen;
5741 yystate = *yyssp;
5742 goto yyerrlab1;
5743
5744
5745/*-------------------------------------------------------------.
5746| yyerrlab1 -- common code for both syntax error and YYERROR. |
5747`-------------------------------------------------------------*/
5748yyerrlab1:
5749 yyerrstatus = 3; /* Each real token shifted decrements this. */
5750
5751 for (;;)
5752 {
5753 yyn = yypact[yystate];
5754 if (yyn != YYPACT_NINF)
5755 {
5756 yyn += YYTERROR;
5757 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5758 {
5759 yyn = yytable[yyn];
5760 if (0 < yyn)
5761 break;
5762 }
5763 }
5764
5765 /* Pop the current state because it cannot handle the error token. */
5766 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005767 YYABORT;
5768
Chris Lattner8335e842006-01-23 23:05:42 +00005769
Reid Spencer3822ff52006-11-08 06:47:33 +00005770 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5771 YYPOPSTACK;
5772 yystate = *yyssp;
5773 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005774 }
5775
5776 if (yyn == YYFINAL)
5777 YYACCEPT;
5778
Reid Spencer68a24bd2005-08-27 18:50:39 +00005779 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005780
5781
5782 /* Shift the error token. */
5783 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005784
5785 yystate = yyn;
5786 goto yynewstate;
5787
Chris Lattnerf49c1762006-11-08 05:58:47 +00005788
Reid Spencer3822ff52006-11-08 06:47:33 +00005789/*-------------------------------------.
5790| yyacceptlab -- YYACCEPT comes here. |
5791`-------------------------------------*/
5792yyacceptlab:
5793 yyresult = 0;
5794 goto yyreturn;
5795
5796/*-----------------------------------.
5797| yyabortlab -- YYABORT comes here. |
5798`-----------------------------------*/
5799yyabortlab:
5800 yyresult = 1;
5801 goto yyreturn;
5802
5803#ifndef yyoverflow
5804/*-------------------------------------------------.
5805| yyexhaustedlab -- memory exhaustion comes here. |
5806`-------------------------------------------------*/
5807yyexhaustedlab:
5808 yyerror (YY_("memory exhausted"));
5809 yyresult = 2;
5810 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005811#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005812
5813yyreturn:
5814 if (yychar != YYEOF && yychar != YYEMPTY)
5815 yydestruct ("Cleanup: discarding lookahead",
5816 yytoken, &yylval);
5817 while (yyssp != yyss)
5818 {
5819 yydestruct ("Cleanup: popping",
5820 yystos[*yyssp], yyvsp);
5821 YYPOPSTACK;
Chris Lattnerf49c1762006-11-08 05:58:47 +00005822 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005823#ifndef yyoverflow
5824 if (yyss != yyssa)
5825 YYSTACK_FREE (yyss);
5826#endif
5827 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005828}
Reid Spencer3822ff52006-11-08 06:47:33 +00005829
5830
Reid Spencer9eef56f2006-12-05 19:16:11 +00005831#line 2785 "/proj/llvm/llvm-1/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005832
5833
5834void llvm::GenerateError(const std::string &message, int LineNo) {
5835 if (LineNo == -1) LineNo = llvmAsmlineno;
5836 // TODO: column number in exception
5837 if (TheParseError)
5838 TheParseError->setError(CurFilename, message, LineNo);
5839 TriggerError = 1;
5840}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005841
5842int yyerror(const char *ErrorMsg) {
5843 std::string where
5844 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5845 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5846 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5847 if (yychar == YYEMPTY || yychar == 0)
5848 errMsg += "end-of-file.";
5849 else
5850 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005851 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005852 return 0;
5853}
Reid Spencer3822ff52006-11-08 06:47:33 +00005854