blob: a00a2c82cd57941e7b00c1c50c27032411431856 [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 Spencer861d9d62006-11-28 07:29:44 +0000363#line 14 "/proj/llvm/llvm-4/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 Spencer13cf7b62006-12-03 16:20:14 +00001336#line 967 "/proj/llvm/llvm-4/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 Spencer6e18b7d2006-12-03 06:59:29 +00001543#define YYLAST 1433
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 Spencer6e18b7d2006-12-03 06:59:29 +00001552#define YYNSTATES 588
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,
1628 386, 393, 400, 409, 418, 425, 432, 441, 450, 454,
1629 456, 458, 460, 462, 465, 468, 473, 476, 478, 483,
1630 486, 491, 492, 500, 501, 509, 510, 518, 519, 527,
1631 531, 536, 537, 539, 541, 543, 547, 551, 555, 559,
1632 563, 567, 569, 570, 572, 574, 576, 577, 580, 584,
1633 586, 588, 592, 594, 595, 604, 606, 608, 612, 614,
1634 616, 619, 620, 622, 624, 625, 630, 631, 633, 635,
1635 637, 639, 641, 643, 645, 647, 649, 653, 655, 661,
1636 663, 665, 667, 669, 672, 675, 678, 682, 685, 686,
1637 688, 691, 694, 698, 708, 718, 727, 741, 743, 745,
1638 752, 758, 761, 768, 776, 778, 782, 784, 785, 788,
1639 790, 796, 802, 808, 815, 822, 825, 830, 835, 842,
1640 847, 852, 857, 862, 869, 876, 879, 887, 889, 892,
1641 893, 895, 896, 900, 907, 911, 918, 921, 926, 933
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,
1687 96, 150, 169, 148, 191, 148, 191, 151, -1, 97,
1688 150, 170, 148, 191, 148, 191, 151, -1, 168, 150,
1689 191, 148, 191, 151, -1, 142, 150, 191, 148, 191,
1690 151, -1, 143, 150, 191, 148, 191, 148, 191, 151,
1691 -1, 144, 150, 191, 148, 191, 148, 191, 151, -1,
1692 193, 148, 191, -1, 191, -1, 32, -1, 33, -1,
1693 196, -1, 196, 216, -1, 196, 218, -1, 196, 62,
1694 61, 202, -1, 196, 25, -1, 197, -1, 197, 175,
1695 20, 184, -1, 197, 218, -1, 197, 62, 61, 202,
1696 -1, -1, 197, 175, 176, 194, 191, 198, 182, -1,
1697 -1, 197, 175, 50, 194, 186, 199, 182, -1, -1,
1698 197, 175, 45, 194, 186, 200, 182, -1, -1, 197,
1699 175, 47, 194, 186, 201, 182, -1, 197, 51, 204,
1700 -1, 197, 58, 147, 205, -1, -1, 24, -1, 56,
1701 -1, 55, -1, 53, 147, 203, -1, 54, 147, 4,
1702 -1, 52, 147, 24, -1, 71, 147, 24, -1, 152,
1703 206, 154, -1, 206, 148, 24, -1, 24, -1, -1,
1704 22, -1, 24, -1, 207, -1, -1, 186, 208, -1,
1705 210, 148, 209, -1, 209, -1, 210, -1, 210, 148,
1706 37, -1, 37, -1, -1, 177, 184, 207, 150, 211,
1707 151, 181, 178, -1, 29, -1, 157, -1, 176, 212,
1708 213, -1, 30, -1, 158, -1, 225, 215, -1, -1,
1709 45, -1, 47, -1, -1, 31, 219, 217, 212, -1,
1710 -1, 63, -1, 3, -1, 4, -1, 7, -1, 27,
1711 -1, 28, -1, 38, -1, 39, -1, 26, -1, 155,
1712 193, 156, -1, 192, -1, 61, 220, 24, 148, 24,
1713 -1, 162, -1, 207, -1, 222, -1, 221, -1, 186,
1714 223, -1, 225, 226, -1, 214, 226, -1, 227, 175,
1715 228, -1, 227, 230, -1, -1, 23, -1, 72, 224,
1716 -1, 72, 8, -1, 73, 21, 223, -1, 73, 9,
1717 223, 148, 21, 223, 148, 21, 223, -1, 74, 173,
1718 223, 148, 21, 223, 152, 229, 154, -1, 74, 173,
1719 223, 148, 21, 223, 152, 154, -1, 75, 177, 184,
1720 223, 150, 233, 151, 36, 21, 223, 76, 21, 223,
1721 -1, 76, -1, 77, -1, 229, 173, 221, 148, 21,
1722 223, -1, 173, 221, 148, 21, 223, -1, 175, 235,
1723 -1, 186, 152, 223, 148, 223, 154, -1, 231, 148,
1724 152, 223, 148, 223, 154, -1, 224, -1, 232, 148,
1725 224, -1, 232, -1, -1, 60, 59, -1, 59, -1,
1726 164, 186, 223, 148, 223, -1, 165, 186, 223, 148,
1727 223, -1, 166, 186, 223, 148, 223, -1, 96, 169,
1728 186, 223, 148, 223, -1, 97, 170, 186, 223, 148,
1729 223, -1, 49, 224, -1, 168, 224, 148, 224, -1,
1730 167, 224, 36, 186, -1, 137, 224, 148, 224, 148,
1731 224, -1, 141, 224, 148, 186, -1, 145, 224, 148,
1732 186, -1, 146, 224, 148, 186, -1, 142, 224, 148,
1733 224, -1, 143, 224, 148, 224, 148, 224, -1, 144,
1734 224, 148, 224, 148, 224, -1, 136, 231, -1, 234,
1735 177, 184, 223, 150, 233, 151, -1, 238, -1, 148,
1736 232, -1, -1, 35, -1, -1, 118, 186, 179, -1,
1737 118, 186, 148, 15, 223, 179, -1, 119, 186, 179,
1738 -1, 119, 186, 148, 15, 223, 179, -1, 120, 224,
1739 -1, 237, 121, 186, 223, -1, 237, 122, 224, 148,
1740 186, 223, -1, 123, 186, 223, 236, -1
Reid Spencer3822ff52006-11-08 06:47:33 +00001741};
1742
1743/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1744static const unsigned short int yyrline[] =
1745{
Reid Spencer13cf7b62006-12-03 16:20:14 +00001746 0, 1103, 1103, 1104, 1112, 1113, 1123, 1123, 1123, 1123,
1747 1123, 1123, 1123, 1123, 1123, 1124, 1124, 1124, 1125, 1125,
1748 1125, 1125, 1125, 1125, 1126, 1126, 1126, 1126, 1126, 1126,
1749 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1128, 1130,
1750 1130, 1131, 1131, 1132, 1132, 1133, 1133, 1134, 1134, 1138,
1751 1138, 1139, 1139, 1140, 1140, 1141, 1141, 1142, 1142, 1143,
1752 1143, 1144, 1144, 1145, 1146, 1151, 1151, 1151, 1151, 1152,
1753 1152, 1152, 1152, 1153, 1153, 1154, 1154, 1157, 1161, 1166,
1754 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1175, 1176, 1177,
1755 1178, 1179, 1180, 1181, 1182, 1191, 1192, 1198, 1199, 1207,
1756 1215, 1216, 1221, 1222, 1223, 1228, 1242, 1242, 1243, 1243,
1757 1245, 1255, 1255, 1255, 1255, 1255, 1255, 1255, 1256, 1256,
1758 1256, 1256, 1256, 1256, 1257, 1261, 1265, 1273, 1281, 1294,
1759 1299, 1311, 1321, 1325, 1336, 1341, 1347, 1348, 1352, 1356,
1760 1367, 1393, 1407, 1437, 1463, 1484, 1497, 1507, 1512, 1573,
1761 1580, 1588, 1594, 1600, 1604, 1608, 1616, 1628, 1660, 1668,
1762 1692, 1703, 1709, 1714, 1719, 1728, 1734, 1740, 1749, 1753,
1763 1761, 1761, 1771, 1779, 1784, 1788, 1792, 1796, 1811, 1833,
1764 1836, 1839, 1839, 1847, 1847, 1855, 1855, 1863, 1863, 1872,
1765 1875, 1878, 1882, 1895, 1896, 1898, 1902, 1911, 1915, 1920,
1766 1922, 1927, 1932, 1941, 1941, 1942, 1942, 1944, 1951, 1957,
1767 1964, 1968, 1974, 1979, 1984, 2079, 2079, 2081, 2089, 2089,
1768 2091, 2096, 2097, 2098, 2100, 2100, 2110, 2114, 2119, 2123,
1769 2127, 2131, 2135, 2139, 2143, 2147, 2151, 2176, 2180, 2194,
1770 2198, 2204, 2204, 2210, 2215, 2219, 2228, 2239, 2248, 2260,
1771 2273, 2277, 2281, 2286, 2295, 2314, 2323, 2379, 2383, 2390,
1772 2401, 2414, 2423, 2432, 2442, 2446, 2453, 2453, 2455, 2459,
1773 2464, 2483, 2498, 2512, 2523, 2534, 2547, 2556, 2567, 2575,
1774 2581, 2601, 2624, 2630, 2636, 2642, 2657, 2716, 2723, 2726,
1775 2731, 2735, 2742, 2747, 2753, 2758, 2764, 2772, 2784, 2799
Reid Spencer3822ff52006-11-08 06:47:33 +00001776};
1777#endif
1778
1779#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1780/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1781 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1782static const char *const yytname[] =
1783{
1784 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "SINTVAL",
1785 "UINTVAL", "FPVAL", "VOID", "BOOL", "SBYTE", "UBYTE", "SHORT", "USHORT",
1786 "INT", "UINT", "LONG", "ULONG", "FLOAT", "DOUBLE", "TYPE", "LABEL",
1787 "VAR_ID", "LABELSTR", "STRINGCONSTANT", "IMPLEMENTATION",
1788 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1789 "DECLARE", "GLOBAL", "CONSTANT", "SECTION", "VOLATILE", "TO",
1790 "DOTDOTDOT", "NULL_TOK", "UNDEF", "CONST", "INTERNAL", "LINKONCE",
1791 "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT", "EXTERN_WEAK", "OPAQUE",
1792 "NOT", "EXTERNAL", "TARGET", "TRIPLE", "ENDIAN", "POINTERSIZE", "LITTLE",
1793 "BIG", "ALIGN", "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE",
1794 "SIDEEFFECT", "CC_TOK", "CCC_TOK", "CSRETCC_TOK", "FASTCC_TOK",
1795 "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
1796 "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
1797 "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
Reid Spencera132e042006-12-03 05:46:11 +00001798 "XOR", "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "ICMP",
1799 "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT", "ULE",
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001800 "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO", "UEQ",
1801 "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR",
1802 "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST", "UITOFP",
1803 "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT", "PHI_TOK",
1804 "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
1805 "INSERTELEMENT", "SHUFFLEVECTOR", "VAARG_old", "VANEXT_old", "'='",
1806 "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'",
1807 "'}'", "'*'", "'c'", "$accept", "INTVAL", "EINT64VAL", "ArithmeticOps",
1808 "LogicalOps", "SetCondOps", "CastOps", "ShiftOps", "IPredicates",
1809 "FPredicates", "SIntType", "UIntType", "IntType", "FPType", "OptAssign",
1810 "OptLinkage", "OptCallingConv", "OptAlign", "OptCAlign", "SectionString",
1811 "OptSection", "GlobalVarAttributes", "GlobalVarAttribute", "TypesV",
1812 "UpRTypesV", "Types", "PrimType", "UpRTypes", "TypeListI",
1813 "ArgTypeListI", "ConstVal", "ConstExpr", "ConstVector", "GlobalType",
1814 "Module", "FunctionList", "ConstPool", "@1", "@2", "@3", "@4",
1815 "AsmBlock", "BigOrLittle", "TargetDefinition", "LibrariesDefinition",
1816 "LibList", "Name", "OptName", "ArgVal", "ArgListH", "ArgList",
1817 "FunctionHeaderH", "BEGIN", "FunctionHeader", "END", "Function",
1818 "FnDeclareLinkage", "FunctionProto", "@5", "OptSideEffect",
1819 "ConstValueRef", "SymbolicValueRef", "ValueRef", "ResolvedVal",
1820 "BasicBlockList", "BasicBlock", "InstructionList", "BBTerminatorInst",
1821 "JumpTable", "Inst", "PHIList", "ValueRefList", "ValueRefListE",
1822 "OptTailCall", "InstVal", "IndexList", "OptVolatile", "MemoryInst", 0
Reid Spencer3822ff52006-11-08 06:47:33 +00001823};
1824#endif
1825
1826# ifdef YYPRINT
1827/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1828 token YYLEX-NUM. */
1829static const unsigned short int yytoknum[] =
1830{
1831 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1832 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1833 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1834 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1835 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1836 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1837 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1838 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1839 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1840 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1841 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
Reid Spencer3da59db2006-11-27 01:05:10 +00001842 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
Reid Spencera132e042006-12-03 05:46:11 +00001843 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1844 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001845 395, 396, 397, 398, 399, 400, 401, 61, 44, 92,
1846 40, 41, 91, 120, 93, 60, 62, 123, 125, 42,
1847 99
Reid Spencer3822ff52006-11-08 06:47:33 +00001848};
1849# endif
1850
1851/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1852static const unsigned char yyr1[] =
1853{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001854 0, 161, 162, 162, 163, 163, 164, 164, 164, 164,
1855 164, 164, 164, 164, 164, 165, 165, 165, 166, 166,
1856 166, 166, 166, 166, 167, 167, 167, 167, 167, 167,
1857 167, 167, 167, 167, 167, 167, 168, 168, 168, 169,
1858 169, 169, 169, 169, 169, 169, 169, 169, 169, 170,
1859 170, 170, 170, 170, 170, 170, 170, 170, 170, 170,
1860 170, 170, 170, 170, 170, 171, 171, 171, 171, 172,
1861 172, 172, 172, 173, 173, 174, 174, 175, 175, 176,
1862 176, 176, 176, 176, 176, 176, 176, 177, 177, 177,
1863 177, 177, 177, 177, 177, 178, 178, 179, 179, 180,
1864 181, 181, 182, 182, 183, 183, 184, 184, 185, 185,
1865 186, 187, 187, 187, 187, 187, 187, 187, 187, 187,
1866 187, 187, 187, 187, 188, 188, 188, 188, 188, 188,
1867 188, 188, 188, 188, 189, 189, 190, 190, 190, 190,
Reid Spencera132e042006-12-03 05:46:11 +00001868 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001869 191, 191, 191, 191, 191, 191, 192, 192, 192, 192,
1870 192, 192, 192, 192, 192, 192, 192, 192, 193, 193,
1871 194, 194, 195, 196, 196, 196, 196, 196, 197, 197,
1872 197, 198, 197, 199, 197, 200, 197, 201, 197, 197,
1873 197, 197, 202, 203, 203, 204, 204, 204, 204, 205,
1874 206, 206, 206, 207, 207, 208, 208, 209, 210, 210,
1875 211, 211, 211, 211, 212, 213, 213, 214, 215, 215,
1876 216, 217, 217, 217, 219, 218, 220, 220, 221, 221,
1877 221, 221, 221, 221, 221, 221, 221, 221, 221, 222,
1878 222, 223, 223, 224, 225, 225, 226, 227, 227, 227,
1879 228, 228, 228, 228, 228, 228, 228, 228, 228, 229,
1880 229, 230, 231, 231, 232, 232, 233, 233, 234, 234,
1881 235, 235, 235, 235, 235, 235, 235, 235, 235, 235,
1882 235, 235, 235, 235, 235, 235, 235, 235, 236, 236,
1883 237, 237, 238, 238, 238, 238, 238, 238, 238, 238
Reid Spencer3822ff52006-11-08 06:47:33 +00001884};
1885
1886/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1887static const unsigned char yyr2[] =
1888{
1889 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1890 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1891 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3822ff52006-11-08 06:47:33 +00001892 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001893 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer3da59db2006-11-27 01:05:10 +00001894 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1895 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001896 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
1897 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1898 1, 1, 1, 1, 2, 0, 2, 0, 3, 2,
1899 0, 1, 0, 3, 1, 2, 1, 1, 1, 1,
Reid Spencera132e042006-12-03 05:46:11 +00001900 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00001901 1, 1, 1, 1, 1, 1, 1, 2, 4, 5,
1902 5, 3, 2, 2, 1, 3, 1, 3, 1, 0,
1903 4, 3, 3, 4, 4, 3, 2, 2, 2, 2,
1904 2, 2, 2, 2, 2, 2, 6, 5, 8, 6,
1905 6, 6, 8, 8, 6, 6, 8, 8, 3, 1,
1906 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,
1982 0, 263, 0, 0, 0, 0, 0, 253, 0, 254,
1983 0, 0, 162, 163, 158, 166, 167, 0, 0, 0,
1984 0, 0, 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 Spencer6e18b7d2006-12-03 06:59:29 +00002002#define YYPACT_NINF -542
Reid Spencer3822ff52006-11-08 06:47:33 +00002003static const short int yypact[] =
2004{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002005 -542, 24, 136, 567, -542, -542, -542, -542, -542, -542,
2006 -542, -542, -542, -542, -5, 144, 56, -542, -542, -9,
2007 -542, -542, 61, -53, 51, 426, -16, -542, 42, 139,
2008 167, -542, -542, -542, -542, -542, -542, 1195, -20, -542,
2009 -542, 162, -542, -542, -542, -542, 19, 28, 50, 57,
2010 -542, 54, 139, 1195, 124, 124, 124, 124, -542, -542,
2011 -542, 144, -542, -542, -542, -542, -542, 66, -542, -542,
2012 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2013 -542, -542, 220, 221, 222, 87, -542, 162, 77, -542,
2014 -542, -81, -542, -542, -542, -542, -542, 425, -542, 204,
2015 132, 228, 209, 223, -542, -542, -542, -542, -542, 1215,
2016 1215, 1215, 1256, -542, -542, 81, 90, -542, -542, -81,
2017 -133, 96, 1000, -542, -542, 1215, -542, 181, 1276, -2,
2018 377, 144, -542, -542, -542, -542, -542, -542, -542, -542,
2019 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2020 -542, -542, 23, 210, 1215, 1215, 1215, 1215, -542, -542,
2021 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2022 1215, 1215, -542, -542, -542, 1215, 1215, 1215, 1215, 1215,
2023 1215, 1215, 1215, 1215, 1215, 1215, -542, 144, -542, 69,
2024 -542, -542, -542, -542, -542, -542, -542, -542, -68, -542,
2025 -542, -542, 165, 192, 245, 196, 249, 198, 253, 216,
2026 254, 255, 258, 219, 256, 261, 568, -542, 1215, 1215,
2027 1215, -542, 1041, -542, 121, 110, 710, -542, -542, 66,
2028 -542, 710, 710, -542, -542, -542, -542, -542, -542, -542,
2029 -542, -542, -542, 710, 1195, -542, -542, -542, -542, -542,
2030 -542, -542, -542, -542, -542, 1215, -542, -542, -542, -542,
2031 -542, -542, -542, -542, -542, -542, -542, -542, -542, -542,
2032 -542, -542, 1215, 122, 126, -542, 710, 120, 127, 129,
2033 130, 131, 133, 135, 137, 140, 710, 710, 710, 244,
2034 141, 1195, 1215, 1215, 260, -542, 142, 142, 142, -542,
2035 -542, -542, -542, -542, -542, -542, -542, -542, -542, 148,
2036 149, 150, 151, 152, 154, 160, 945, 1256, 661, 263,
2037 161, 187, 190, 191, 193, -542, -542, 142, 5, 6,
2038 -81, -542, 162, -542, 164, 194, 1098, -542, -542, -542,
2039 -542, -542, -542, -542, -542, -542, 279, 1256, -542, -542,
2040 -542, -542, 201, -542, 202, 710, 710, 710, 7, -542,
2041 8, -542, 205, 710, 200, 1215, 1215, 1215, 1215, 1215,
2042 1215, 1215, 206, 207, 208, 1215, 1215, 710, 710, 212,
2043 -542, -29, -542, -542, -542, 23, 210, 1256, 1256, 1256,
2044 1256, 1256, -542, -542, -38, -72, -542, -105, -542, 1256,
2045 1256, 1256, 1256, 1256, -542, -542, -542, -542, -542, 1154,
2046 310, -542, -542, 333, -71, 337, 340, 217, 214, 225,
2047 710, 364, 710, 1215, -542, 226, 710, 229, -542, -542,
2048 230, 233, -542, -542, 710, 710, 710, -542, -542, 232,
2049 -542, 1215, 345, 366, -542, 142, 235, 236, 205, 237,
2050 247, 248, 264, 1256, -542, -542, -542, 265, 266, 270,
2051 335, 271, -542, -542, -542, 319, 272, -542, 710, 710,
2052 1215, 710, 710, 273, -542, 273, -542, 274, 710, 276,
2053 1215, 1215, 1215, -542, -542, -542, 1215, 710, -542, -542,
2054 -542, 1256, 1256, 257, 1256, 1256, 1256, 1256, -542, 1256,
2055 1256, 1256, 1215, 1256, 421, -542, 402, 280, 275, 274,
2056 278, -542, -542, 375, -542, -542, 1215, 281, 710, -542,
2057 -542, -542, 283, -542, 288, 291, -542, 292, 290, 294,
2058 299, 297, 303, 306, 307, 308, -542, -542, 429, 20,
2059 427, -542, -542, 312, -542, 1256, 1256, 1256, -542, 1256,
2060 1256, -542, -542, -542, -542, -542, 710, -542, 852, 35,
2061 440, -542, 311, 313, 324, 326, 327, -542, 339, -542,
2062 852, 710, -542, -542, -542, -542, -542, 460, 341, 407,
2063 710, 467, 469, -542, 710, 710, -542, -542
Reid Spencer3822ff52006-11-08 06:47:33 +00002064};
2065
2066/* YYPGOTO[NTERM-NUM]. */
2067static const short int yypgoto[] =
2068{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002069 -542, -542, -542, 394, 395, 396, 428, 430, 138, 147,
2070 -129, -128, -484, -542, 483, 501, -121, -542, -270, 125,
2071 -542, -285, -542, -50, -542, -37, -542, -65, 408, -542,
2072 -94, 318, -277, 113, -542, -542, -542, -542, -542, -542,
2073 -542, 484, -542, -542, -542, -542, 3, -542, 128, -542,
2074 -542, 478, -542, -542, -542, -542, -542, 537, -542, -542,
2075 -541, 60, -205, -117, -542, 522, -542, -542, -542, -542,
2076 -542, 119, 86, -542, -542, 98, -542, -542
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 Spencer6e18b7d2006-12-03 06:59:29 +00002086 89, 241, 242, 106, 361, 442, 26, 231, 227, 94,
2087 244, 230, 383, 384, 39, 220, 89, 568, 217, 232,
2088 119, 42, 420, 422, 4, 221, 352, 353, 443, 578,
2089 233, 234, 235, 236, 237, 238, 239, 240, 354, 275,
2090 395, 397, 404, 453, 26, 233, 234, 235, 236, 237,
2091 238, 239, 240, 456, 279, 558, 29, 119, 280, 281,
2092 282, 283, 284, 285, 421, 421, 291, 289, 290, -108,
2093 414, 362, 199, 200, 201, 570, 453, 453, 123, 39,
2094 294, 372, 373, 374, 455, 467, 295, 59, 226, 60,
2095 121, 226, 65, 66, 51, 117, 68, 69, 70, 71,
2096 72, 73, 74, 75, 76, 77, 78, 79, 80, 20,
2097 453, 21, 52, 46, 47, 48, 454, 273, 274, 226,
2098 276, 245, 246, 247, 248, 249, 250, 251, 252, 253,
2099 254, 58, 49, 277, 226, 81, -172, 95, 226, 226,
2100 226, 226, 226, 226, 286, 287, 288, 226, 226, 43,
2101 417, 418, 419, 328, 329, 330, 107, 108, 425, 405,
2102 490, 5, 406, 62, 123, 123, 99, 6, 110, 111,
2103 112, 64, 439, 440, 557, 100, 379, 7, 8, 9,
2104 10, 11, 12, 13, 20, 332, 21, 192, 193, 569,
2105 292, 293, 299, 300, 355, -68, -68, 101, 14, -67,
2106 -67, -66, -66, 514, 102, 515, 103, 89, 30, 31,
2107 32, 33, 34, 35, 36, 473, -109, 475, 356, -65,
2108 -65, 479, 301, 302, 114, 115, 116, 122, 191, 483,
2109 484, 485, 195, 196, 218, 357, 82, 256, 257, 83,
2110 228, 377, 84, 219, 85, 118, 222, 197, 427, -72,
2111 429, 430, 431, -71, 89, 378, 226, -70, -69, 438,
2112 304, 337, -75, 507, 508, -76, 511, 512, 305, 336,
2113 358, 330, 363, 517, 360, 364, 326, 365, 366, 367,
2114 375, 368, 523, 369, 380, 370, 350, 398, 371, 376,
2115 381, 350, 350, 448, 449, 450, 451, 452, 385, 386,
2116 387, 388, 389, 350, 390, 457, 458, 459, 460, 461,
2117 391, 399, 409, 543, 258, 259, 260, 261, 262, 263,
2118 264, 265, 266, 267, 268, 269, 270, 271, 226, 428,
2119 226, 226, 226, 432, 433, 407, 350, 400, 437, 226,
2120 401, 402, 412, 403, 442, 410, 350, 350, 350, 415,
2121 416, 567, 426, 423, 434, 435, 436, 466, 468, 498,
2122 441, 469, 471, 519, 520, 521, 579, 470, 474, 488,
2123 489, 502, 332, 472, 478, 583, 504, 480, 481, 586,
2124 587, 482, 486, 491, 492, 494, 226, 233, 234, 235,
2125 236, 237, 238, 239, 240, 495, 496, 524, 525, 541,
2126 527, 528, 529, 530, 487, 531, 532, 533, 526, 535,
2127 241, 242, 497, 499, 500, 350, 350, 350, 501, 503,
2128 506, 513, 516, 350, 518, 536, 537, 539, 538, 540,
2129 241, 242, 421, 226, 544, 542, 545, 350, 350, 546,
2130 547, 548, 549, 226, 226, 226, 53, 550, 551, 226,
2131 556, 562, 563, 564, 552, 565, 566, 553, 554, 555,
2132 124, 571, 572, 560, 573, 534, 561, 7, 8, 9,
2133 10, 54, 12, 55, 125, 574, 56, 575, 576, 226,
2134 350, 580, 350, 582, 126, 127, 350, 577, 584, 581,
2135 585, 181, 182, 183, 350, 350, 350, 128, 129, 130,
2136 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
2137 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2138 151, 152, 153, 446, 97, 184, 57, 185, 350, 350,
2139 224, 350, 350, 447, 325, 464, 105, 463, 350, 113,
2140 27, 45, 477, 154, 155, 156, 493, 350, 157, 158,
2141 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
2142 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
2143 179, 180, 522, 65, 66, 0, 0, 0, 350, 0,
2144 0, 0, 0, 0, 0, 0, 0, -78, 0, 20,
2145 20, 21, 21, 0, 306, 0, 0, 0, 6, -78,
2146 -78, 0, 0, 0, 0, 0, 307, 308, -78, -78,
2147 -78, -78, -78, -78, -78, 0, 350, -78, 22, 0,
2148 0, 0, 0, 0, 0, 23, 0, 0, 0, 24,
2149 0, 350, 0, 0, 0, 0, 0, 0, 0, 0,
2150 350, 0, 0, 0, 350, 350, 134, 135, 136, 137,
2151 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
2152 148, 149, 150, 151, 309, 310, 65, 66, 0, 117,
2153 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
2154 212, 79, 80, 20, 0, 21, 0, 0, 0, 0,
2155 0, 311, 158, 159, 160, 161, 162, 163, 164, 165,
2156 166, 167, 168, 169, 0, 312, 172, 173, 174, 81,
2157 313, 314, 315, 338, 339, 65, 66, 340, 0, 0,
2158 316, 0, 0, 317, 0, 318, 0, 0, 319, 0,
2159 0, 0, 20, 0, 21, 0, 341, 342, 343, 0,
2160 0, 0, 0, 0, 0, 0, 0, 0, 344, 345,
Reid Spencer3da59db2006-11-27 01:05:10 +00002161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002163 0, 346, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera132e042006-12-03 05:46:11 +00002164 0, 0, 0, 0, 0, 0, 0, 0, 134, 135,
2165 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002166 146, 147, 148, 149, 150, 151, 309, 310, 0, 0,
2167 82, 0, 0, 83, 0, 0, 84, 0, 85, 396,
Reid Spencer3da59db2006-11-27 01:05:10 +00002168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002169 0, 0, 0, 311, 158, 159, 160, 161, 162, 163,
2170 164, 165, 166, 167, 168, 169, 0, 312, 172, 173,
2171 174, 0, 313, 314, 315, 338, 339, 0, 0, 340,
2172 0, 0, 0, 0, 0, 347, 0, 0, 0, 0,
2173 0, 0, 0, 0, 0, 0, 0, 0, 341, 342,
2174 343, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2175 344, 345, 0, 0, 0, 0, 0, 0, 0, 0,
2176 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2177 0, 0, 0, 346, 0, 0, 0, 0, 0, 0,
2178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2179 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2180 144, 145, 146, 147, 148, 149, 150, 151, 309, 310,
2181 65, 66, 0, 117, 202, 203, 204, 205, 206, 207,
2182 208, 209, 210, 211, 212, 79, 80, 20, 0, 21,
2183 0, 0, 0, 0, 0, 311, 158, 159, 160, 161,
2184 162, 163, 164, 165, 166, 167, 168, 169, 0, 312,
2185 172, 173, 174, 81, 313, 314, 315, 0, 0, 0,
2186 0, 0, 0, 0, 0, 65, 66, 347, 117, 68,
2187 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
2188 79, 80, 20, 0, 21, 0, 0, 0, 0, 0,
2189 0, 0, 0, 0, 0, 0, 0, 223, 0, 0,
2190 0, 0, 0, 0, 0, 0, 65, 66, 81, 117,
2191 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
2192 78, 79, 80, 20, 0, 21, 0, 0, 0, 0,
2193 0, 0, 0, 0, 0, 0, 0, 0, 331, 0,
2194 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
2195 0, 0, 0, 0, 82, 0, 0, 83, 0, 392,
2196 84, 0, 85, 65, 66, 0, 117, 68, 69, 70,
2197 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2198 20, 0, 21, 0, 0, 0, 0, 0, 0, 0,
2199 0, 0, 0, 0, 0, 411, 0, 0, 0, 0,
2200 0, 0, 0, 0, 0, 0, 81, 0, 0, 82,
2201 0, 0, 83, 0, 0, 84, 0, 85, 0, 65,
Reid Spencera132e042006-12-03 05:46:11 +00002202 66, 0, 117, 68, 69, 70, 71, 72, 73, 74,
Reid Spencer3822ff52006-11-08 06:47:33 +00002203 75, 76, 77, 78, 79, 80, 20, 0, 21, 0,
2204 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002205 82, 462, 0, 83, 0, 0, 84, 0, 85, 0,
2206 65, 66, 81, 67, 68, 69, 70, 71, 72, 73,
2207 74, 75, 76, 77, 78, 79, 80, 20, 0, 21,
2208 65, 66, 0, 117, 68, 69, 70, 71, 72, 73,
2209 74, 75, 76, 77, 78, 79, 80, 20, 0, 21,
2210 0, 0, 0, 81, 0, 0, 0, 82, 0, 0,
2211 83, 0, 0, 84, 0, 85, 0, 0, 0, 0,
2212 0, 65, 66, 81, 117, 202, 203, 204, 205, 206,
2213 207, 208, 209, 210, 211, 212, 79, 80, 20, 0,
2214 21, 65, 66, 0, 229, 68, 69, 70, 71, 72,
2215 73, 74, 75, 76, 77, 78, 79, 80, 20, 0,
2216 21, 0, 0, 82, 81, 0, 83, 0, 0, 84,
Reid Spencera132e042006-12-03 05:46:11 +00002217 0, 85, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002218 0, 0, 0, 0, 81, 0, 0, 0, 0, 0,
Reid Spencer3da59db2006-11-27 01:05:10 +00002219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2220 0, 0, 0, 0, 82, 0, 0, 83, 0, 0,
2221 84, 0, 85, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera132e042006-12-03 05:46:11 +00002222 0, 0, 0, 0, 82, 0, 0, 83, 0, 0,
2223 84, 0, 85, 0, 0, 0, 0, 0, 0, 0,
2224 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Reid Spencera132e042006-12-03 05:46:11 +00002226 0, 0, 0, 0, 0, 82, 0, 0, 83, 0,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002227 0, 84, 0, 85, 0, 0, 0, 0, 0, 0,
2228 0, 0, 0, 0, 0, 82, 0, 0, 83, 0,
2229 0, 84, 0, 85
Reid Spencer3822ff52006-11-08 06:47:33 +00002230};
2231
2232static const short int yycheck[] =
2233{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002234 37, 130, 130, 53, 274, 34, 3, 9, 125, 29,
2235 131, 128, 297, 298, 23, 148, 53, 558, 112, 21,
2236 85, 30, 15, 15, 0, 158, 231, 232, 57, 570,
2237 10, 11, 12, 13, 14, 15, 16, 17, 243, 156,
2238 317, 318, 327, 148, 41, 10, 11, 12, 13, 14,
2239 15, 16, 17, 158, 171, 539, 61, 122, 175, 176,
2240 177, 178, 179, 180, 57, 57, 187, 184, 185, 150,
2241 347, 276, 109, 110, 111, 559, 148, 148, 159, 23,
2242 148, 286, 287, 288, 156, 156, 154, 45, 125, 47,
2243 87, 128, 5, 6, 147, 8, 9, 10, 11, 12,
2244 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
2245 148, 24, 61, 52, 53, 54, 154, 154, 155, 156,
2246 157, 98, 99, 100, 101, 102, 103, 104, 105, 106,
2247 107, 147, 71, 170, 171, 48, 0, 157, 175, 176,
2248 177, 178, 179, 180, 181, 182, 183, 184, 185, 158,
2249 355, 356, 357, 218, 219, 220, 32, 33, 363, 154,
2250 445, 25, 156, 24, 159, 159, 147, 31, 55, 56,
2251 57, 4, 377, 378, 154, 147, 293, 41, 42, 43,
2252 44, 45, 46, 47, 22, 222, 24, 55, 56, 154,
2253 121, 122, 27, 28, 244, 3, 4, 147, 62, 3,
2254 4, 3, 4, 473, 147, 475, 152, 244, 64, 65,
2255 66, 67, 68, 69, 70, 420, 150, 422, 255, 3,
2256 4, 426, 3, 4, 4, 4, 4, 150, 24, 434,
2257 435, 436, 4, 24, 153, 272, 149, 27, 28, 152,
2258 59, 291, 155, 153, 157, 158, 150, 24, 365, 4,
2259 367, 368, 369, 4, 291, 292, 293, 4, 4, 376,
2260 4, 151, 7, 468, 469, 7, 471, 472, 7, 148,
2261 148, 336, 152, 478, 148, 148, 216, 148, 148, 148,
2262 36, 148, 487, 148, 24, 148, 226, 24, 148, 148,
2263 148, 231, 232, 387, 388, 389, 390, 391, 150, 150,
2264 150, 150, 150, 243, 150, 399, 400, 401, 402, 403,
2265 150, 150, 148, 518, 104, 105, 106, 107, 108, 109,
2266 110, 111, 112, 113, 114, 115, 116, 117, 365, 366,
2267 367, 368, 369, 370, 371, 332, 276, 150, 375, 376,
2268 150, 150, 63, 150, 34, 151, 286, 287, 288, 148,
2269 148, 556, 152, 148, 148, 148, 148, 24, 21, 453,
2270 148, 21, 148, 480, 481, 482, 571, 150, 4, 24,
2271 4, 36, 409, 148, 148, 580, 57, 148, 148, 584,
2272 585, 148, 150, 148, 148, 148, 423, 10, 11, 12,
2273 13, 14, 15, 16, 17, 148, 148, 491, 492, 516,
2274 494, 495, 496, 497, 441, 499, 500, 501, 151, 503,
2275 539, 539, 148, 148, 148, 355, 356, 357, 148, 148,
2276 148, 148, 148, 363, 148, 4, 24, 152, 148, 151,
2277 559, 559, 57, 470, 151, 154, 148, 377, 378, 148,
2278 148, 151, 148, 480, 481, 482, 20, 148, 151, 486,
2279 21, 545, 546, 547, 151, 549, 550, 151, 151, 151,
2280 35, 21, 151, 36, 151, 502, 154, 41, 42, 43,
2281 44, 45, 46, 47, 49, 151, 50, 151, 151, 516,
2282 420, 21, 422, 76, 59, 60, 426, 148, 21, 148,
2283 21, 97, 97, 97, 434, 435, 436, 72, 73, 74,
2284 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
2285 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2286 95, 96, 97, 385, 41, 97, 25, 97, 468, 469,
2287 122, 471, 472, 386, 216, 410, 52, 409, 478, 61,
2288 3, 19, 423, 118, 119, 120, 448, 487, 123, 124,
2289 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
2290 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2291 145, 146, 486, 5, 6, -1, -1, -1, 518, -1,
2292 -1, -1, -1, -1, -1, -1, -1, 20, -1, 22,
2293 22, 24, 24, -1, 26, -1, -1, -1, 31, 32,
2294 33, -1, -1, -1, -1, -1, 38, 39, 41, 42,
2295 43, 44, 45, 46, 47, -1, 556, 50, 51, -1,
2296 -1, -1, -1, -1, -1, 58, -1, -1, -1, 62,
2297 -1, 571, -1, -1, -1, -1, -1, -1, -1, -1,
2298 580, -1, -1, -1, 584, 585, 78, 79, 80, 81,
2299 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
2300 92, 93, 94, 95, 96, 97, 5, 6, -1, 8,
2301 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2302 19, 20, 21, 22, -1, 24, -1, -1, -1, -1,
2303 -1, 123, 124, 125, 126, 127, 128, 129, 130, 131,
2304 132, 133, 134, 135, -1, 137, 138, 139, 140, 48,
2305 142, 143, 144, 3, 4, 5, 6, 7, -1, -1,
2306 152, -1, -1, 155, -1, 157, -1, -1, 160, -1,
2307 -1, -1, 22, -1, 24, -1, 26, 27, 28, -1,
Reid Spencera132e042006-12-03 05:46:11 +00002308 -1, -1, -1, -1, -1, -1, -1, -1, 38, 39,
Reid Spencer3da59db2006-11-27 01:05:10 +00002309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002310 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencera132e042006-12-03 05:46:11 +00002311 -1, 61, -1, -1, -1, -1, -1, -1, -1, -1,
2312 -1, -1, -1, -1, -1, -1, -1, -1, 78, 79,
2313 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2314 90, 91, 92, 93, 94, 95, 96, 97, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002315 149, -1, -1, 152, -1, -1, 155, -1, 157, 158,
Reid Spencer3da59db2006-11-27 01:05:10 +00002316 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002317 -1, -1, -1, 123, 124, 125, 126, 127, 128, 129,
2318 130, 131, 132, 133, 134, 135, -1, 137, 138, 139,
2319 140, -1, 142, 143, 144, 3, 4, -1, -1, 7,
2320 -1, -1, -1, -1, -1, 155, -1, -1, -1, -1,
2321 -1, -1, -1, -1, -1, -1, -1, -1, 26, 27,
2322 28, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2323 38, 39, -1, -1, -1, -1, -1, -1, -1, -1,
2324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2325 -1, -1, -1, 61, -1, -1, -1, -1, -1, -1,
2326 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2327 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
2328 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
2329 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
2330 15, 16, 17, 18, 19, 20, 21, 22, -1, 24,
2331 -1, -1, -1, -1, -1, 123, 124, 125, 126, 127,
2332 128, 129, 130, 131, 132, 133, 134, 135, -1, 137,
2333 138, 139, 140, 48, 142, 143, 144, -1, -1, -1,
2334 -1, -1, -1, -1, -1, 5, 6, 155, 8, 9,
2335 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2336 20, 21, 22, -1, 24, -1, -1, -1, -1, -1,
2337 -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
2338 -1, -1, -1, -1, -1, -1, 5, 6, 48, 8,
2339 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
2340 19, 20, 21, 22, -1, 24, -1, -1, -1, -1,
2341 -1, -1, -1, -1, -1, -1, -1, -1, 37, -1,
2342 -1, -1, -1, -1, -1, -1, -1, -1, -1, 48,
2343 -1, -1, -1, -1, 149, -1, -1, 152, -1, 154,
2344 155, -1, 157, 5, 6, -1, 8, 9, 10, 11,
2345 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2346 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
2347 -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
2348 -1, -1, -1, -1, -1, -1, 48, -1, -1, 149,
2349 -1, -1, 152, -1, -1, 155, -1, 157, -1, 5,
Reid Spencera132e042006-12-03 05:46:11 +00002350 6, -1, 8, 9, 10, 11, 12, 13, 14, 15,
Reid Spencer3822ff52006-11-08 06:47:33 +00002351 16, 17, 18, 19, 20, 21, 22, -1, 24, -1,
2352 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002353 149, 37, -1, 152, -1, -1, 155, -1, 157, -1,
2354 5, 6, 48, 8, 9, 10, 11, 12, 13, 14,
2355 15, 16, 17, 18, 19, 20, 21, 22, -1, 24,
2356 5, 6, -1, 8, 9, 10, 11, 12, 13, 14,
2357 15, 16, 17, 18, 19, 20, 21, 22, -1, 24,
2358 -1, -1, -1, 48, -1, -1, -1, 149, -1, -1,
2359 152, -1, -1, 155, -1, 157, -1, -1, -1, -1,
2360 -1, 5, 6, 48, 8, 9, 10, 11, 12, 13,
2361 14, 15, 16, 17, 18, 19, 20, 21, 22, -1,
2362 24, 5, 6, -1, 8, 9, 10, 11, 12, 13,
2363 14, 15, 16, 17, 18, 19, 20, 21, 22, -1,
2364 24, -1, -1, 149, 48, -1, 152, -1, -1, 155,
2365 -1, 157, -1, -1, -1, -1, -1, -1, -1, -1,
2366 -1, -1, -1, -1, 48, -1, -1, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002367 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002368 -1, -1, -1, -1, 149, -1, -1, 152, -1, -1,
2369 155, -1, 157, -1, -1, -1, -1, -1, -1, -1,
2370 -1, -1, -1, -1, 149, -1, -1, 152, -1, -1,
2371 155, -1, 157, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer3da59db2006-11-27 01:05:10 +00002372 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2373 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002374 -1, -1, -1, -1, -1, 149, -1, -1, 152, -1,
2375 -1, 155, -1, 157, -1, -1, -1, -1, -1, -1,
2376 -1, -1, -1, -1, -1, 149, -1, -1, 152, -1,
2377 -1, 155, -1, 157
Reid Spencer3822ff52006-11-08 06:47:33 +00002378};
2379
2380/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2381 symbol of state STATE-NUM. */
2382static const unsigned char yystos[] =
2383{
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002384 0, 195, 196, 197, 0, 25, 31, 41, 42, 43,
2385 44, 45, 46, 47, 62, 176, 214, 216, 218, 225,
2386 22, 24, 51, 58, 62, 175, 207, 218, 219, 61,
2387 64, 65, 66, 67, 68, 69, 70, 177, 212, 23,
2388 226, 227, 30, 158, 215, 226, 52, 53, 54, 71,
2389 204, 147, 61, 20, 45, 47, 50, 176, 147, 45,
2390 47, 217, 24, 202, 4, 5, 6, 8, 9, 10,
Reid Spencer3822ff52006-11-08 06:47:33 +00002391 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002392 21, 48, 149, 152, 155, 157, 162, 184, 185, 186,
2393 187, 188, 207, 222, 29, 157, 213, 175, 230, 147,
2394 147, 147, 147, 152, 205, 202, 184, 32, 33, 194,
2395 194, 194, 194, 212, 4, 4, 4, 8, 158, 188,
2396 189, 207, 150, 159, 35, 49, 59, 60, 72, 73,
Reid Spencer3822ff52006-11-08 06:47:33 +00002397 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
2398 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
Reid Spencer6e18b7d2006-12-03 06:59:29 +00002399 94, 95, 96, 97, 118, 119, 120, 123, 124, 125,
2400 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
2401 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
2402 146, 164, 165, 166, 167, 168, 228, 234, 235, 237,
2403 238, 24, 55, 56, 203, 4, 24, 24, 206, 186,
2404 186, 186, 9, 10, 11, 12, 13, 14, 15, 16,
2405 17, 18, 19, 171, 172, 174, 186, 191, 153, 153,
2406 148, 158, 150, 37, 189, 190, 186, 224, 59, 8,
2407 224, 9, 21, 10, 11, 12, 13, 14, 15, 16,
2408 17, 171, 172, 173, 177, 98, 99, 100, 101, 102,
2409 103, 104, 105, 106, 107, 169, 27, 28, 104, 105,
2410 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
2411 116, 117, 170, 186, 186, 224, 186, 186, 231, 224,
2412 224, 224, 224, 224, 224, 224, 186, 186, 186, 224,
2413 224, 177, 121, 122, 148, 154, 200, 201, 199, 27,
2414 28, 3, 4, 163, 4, 7, 26, 38, 39, 96,
2415 97, 123, 137, 142, 143, 144, 152, 155, 157, 160,
2416 164, 165, 166, 167, 168, 192, 222, 198, 188, 188,
2417 188, 37, 186, 209, 210, 211, 148, 151, 3, 4,
2418 7, 26, 27, 28, 38, 39, 61, 155, 192, 221,
2419 222, 223, 223, 223, 223, 184, 186, 186, 148, 179,
2420 148, 179, 223, 152, 148, 148, 148, 148, 148, 148,
2421 148, 148, 223, 223, 223, 36, 148, 184, 186, 224,
2422 24, 148, 182, 182, 182, 150, 150, 150, 150, 150,
2423 150, 150, 154, 191, 193, 193, 158, 193, 24, 150,
2424 150, 150, 150, 150, 182, 154, 156, 207, 208, 148,
2425 151, 37, 63, 220, 193, 148, 148, 223, 223, 223,
2426 15, 57, 15, 148, 236, 223, 152, 224, 186, 224,
2427 224, 224, 186, 186, 148, 148, 148, 186, 224, 223,
2428 223, 148, 34, 57, 180, 183, 169, 170, 191, 191,
2429 191, 191, 191, 148, 154, 156, 158, 191, 191, 191,
2430 191, 191, 37, 209, 180, 181, 24, 156, 21, 21,
2431 150, 148, 148, 223, 4, 223, 224, 232, 148, 223,
2432 148, 148, 148, 223, 223, 223, 150, 186, 24, 4,
2433 182, 148, 148, 236, 148, 148, 148, 148, 191, 148,
2434 148, 148, 36, 148, 57, 178, 148, 223, 223, 232,
2435 233, 223, 223, 148, 179, 179, 148, 223, 148, 224,
2436 224, 224, 233, 223, 191, 191, 151, 191, 191, 191,
2437 191, 191, 191, 191, 186, 191, 4, 24, 148, 152,
2438 151, 224, 154, 223, 151, 148, 148, 148, 151, 148,
2439 148, 151, 151, 151, 151, 151, 21, 154, 173, 229,
2440 36, 154, 191, 191, 191, 191, 191, 223, 221, 154,
2441 173, 21, 151, 151, 151, 151, 151, 148, 221, 223,
2442 21, 148, 76, 223, 21, 21, 223, 223
Reid Spencer3822ff52006-11-08 06:47:33 +00002443};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002444
2445#define yyerrok (yyerrstatus = 0)
2446#define yyclearin (yychar = YYEMPTY)
Reid Spencer3822ff52006-11-08 06:47:33 +00002447#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002448#define YYEOF 0
Reid Spencer3822ff52006-11-08 06:47:33 +00002449
Reid Spencer68a24bd2005-08-27 18:50:39 +00002450#define YYACCEPT goto yyacceptlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002451#define YYABORT goto yyabortlab
2452#define YYERROR goto yyerrorlab
2453
2454
2455/* Like YYERROR except do call yyerror. This remains here temporarily
2456 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002457 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002458
Reid Spencer68a24bd2005-08-27 18:50:39 +00002459#define YYFAIL goto yyerrlab
Reid Spencer3822ff52006-11-08 06:47:33 +00002460
Reid Spencer68a24bd2005-08-27 18:50:39 +00002461#define YYRECOVERING() (!!yyerrstatus)
Reid Spencer3822ff52006-11-08 06:47:33 +00002462
2463#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002464do \
2465 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencer3822ff52006-11-08 06:47:33 +00002466 { \
2467 yychar = (Token); \
2468 yylval = (Value); \
2469 yytoken = YYTRANSLATE (yychar); \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002470 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002471 goto yybackup; \
2472 } \
2473 else \
Reid Spencer3822ff52006-11-08 06:47:33 +00002474 { \
2475 yyerror (YY_("syntax error: cannot back up")); \
2476 YYERROR; \
2477 } \
Reid Spencer5b7e7532006-09-28 19:28:24 +00002478while (0)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002479
Reid Spencer3822ff52006-11-08 06:47:33 +00002480
Reid Spencer68a24bd2005-08-27 18:50:39 +00002481#define YYTERROR 1
2482#define YYERRCODE 256
2483
Reid Spencer3822ff52006-11-08 06:47:33 +00002484
2485/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2486 If N is 0, then set CURRENT to the empty location which ends
2487 the previous symbol: RHS[0] (always defined). */
2488
2489#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2490#ifndef YYLLOC_DEFAULT
2491# define YYLLOC_DEFAULT(Current, Rhs, N) \
2492 do \
2493 if (N) \
2494 { \
2495 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2496 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2497 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2498 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2499 } \
2500 else \
2501 { \
2502 (Current).first_line = (Current).last_line = \
2503 YYRHSLOC (Rhs, 0).last_line; \
2504 (Current).first_column = (Current).last_column = \
2505 YYRHSLOC (Rhs, 0).last_column; \
2506 } \
2507 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002508#endif
2509
Reid Spencer3822ff52006-11-08 06:47:33 +00002510
2511/* YY_LOCATION_PRINT -- Print the location on the stream.
2512 This macro was not mandated originally: define only if we know
2513 we won't break user code: when these are the locations we know. */
2514
2515#ifndef YY_LOCATION_PRINT
2516# if YYLTYPE_IS_TRIVIAL
2517# define YY_LOCATION_PRINT(File, Loc) \
2518 fprintf (File, "%d.%d-%d.%d", \
2519 (Loc).first_line, (Loc).first_column, \
2520 (Loc).last_line, (Loc).last_column)
2521# else
2522# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2523# endif
2524#endif
2525
2526
2527/* YYLEX -- calling `yylex' with the right arguments. */
2528
Reid Spencer68a24bd2005-08-27 18:50:39 +00002529#ifdef YYLEX_PARAM
Reid Spencer3822ff52006-11-08 06:47:33 +00002530# define YYLEX yylex (YYLEX_PARAM)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002531#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002532# define YYLEX yylex ()
Chris Lattnerf49c1762006-11-08 05:58:47 +00002533#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002534
2535/* Enable debugging if requested. */
2536#if YYDEBUG
2537
2538# ifndef YYFPRINTF
2539# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2540# define YYFPRINTF fprintf
2541# endif
2542
2543# define YYDPRINTF(Args) \
2544do { \
2545 if (yydebug) \
2546 YYFPRINTF Args; \
2547} while (0)
2548
2549# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2550do { \
2551 if (yydebug) \
2552 { \
2553 YYFPRINTF (stderr, "%s ", Title); \
2554 yysymprint (stderr, \
2555 Type, Value); \
2556 YYFPRINTF (stderr, "\n"); \
2557 } \
2558} while (0)
2559
2560/*------------------------------------------------------------------.
2561| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2562| TOP (included). |
2563`------------------------------------------------------------------*/
2564
2565#if defined (__STDC__) || defined (__cplusplus)
2566static void
2567yy_stack_print (short int *bottom, short int *top)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002568#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002569static void
2570yy_stack_print (bottom, top)
2571 short int *bottom;
2572 short int *top;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002573#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002574{
2575 YYFPRINTF (stderr, "Stack now");
2576 for (/* Nothing. */; bottom <= top; ++bottom)
2577 YYFPRINTF (stderr, " %d", *bottom);
2578 YYFPRINTF (stderr, "\n");
2579}
2580
2581# define YY_STACK_PRINT(Bottom, Top) \
2582do { \
2583 if (yydebug) \
2584 yy_stack_print ((Bottom), (Top)); \
2585} while (0)
2586
2587
2588/*------------------------------------------------.
2589| Report that the YYRULE is going to be reduced. |
2590`------------------------------------------------*/
2591
2592#if defined (__STDC__) || defined (__cplusplus)
2593static void
2594yy_reduce_print (int yyrule)
2595#else
2596static void
2597yy_reduce_print (yyrule)
2598 int yyrule;
Chris Lattner1ae022f2006-10-22 06:08:13 +00002599#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002600{
2601 int yyi;
2602 unsigned long int yylno = yyrline[yyrule];
2603 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2604 yyrule - 1, yylno);
2605 /* Print the symbols being reduced, and their result. */
2606 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2607 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2608 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2609}
Reid Spencer21be8652006-10-22 07:03:43 +00002610
Reid Spencer3822ff52006-11-08 06:47:33 +00002611# define YY_REDUCE_PRINT(Rule) \
2612do { \
2613 if (yydebug) \
2614 yy_reduce_print (Rule); \
2615} while (0)
Reid Spencer21be8652006-10-22 07:03:43 +00002616
Reid Spencer3822ff52006-11-08 06:47:33 +00002617/* Nonzero means print parse trace. It is left uninitialized so that
2618 multiple parsers can coexist. */
2619int yydebug;
2620#else /* !YYDEBUG */
2621# define YYDPRINTF(Args)
2622# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2623# define YY_STACK_PRINT(Bottom, Top)
2624# define YY_REDUCE_PRINT(Rule)
2625#endif /* !YYDEBUG */
Reid Spencer21be8652006-10-22 07:03:43 +00002626
Reid Spencer21be8652006-10-22 07:03:43 +00002627
Reid Spencer3822ff52006-11-08 06:47:33 +00002628/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002629#ifndef YYINITDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002630# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002631#endif
2632
Reid Spencer3822ff52006-11-08 06:47:33 +00002633/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2634 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002635
Reid Spencer3822ff52006-11-08 06:47:33 +00002636 Do not make this value too large; the results are undefined if
2637 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2638 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002639
2640#ifndef YYMAXDEPTH
Reid Spencer3822ff52006-11-08 06:47:33 +00002641# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002642#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00002643
Reid Spencer68a24bd2005-08-27 18:50:39 +00002644
2645
Reid Spencer3822ff52006-11-08 06:47:33 +00002646#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002647
Reid Spencer3822ff52006-11-08 06:47:33 +00002648# ifndef yystrlen
2649# if defined (__GLIBC__) && defined (_STRING_H)
2650# define yystrlen strlen
2651# else
2652/* Return the length of YYSTR. */
2653static YYSIZE_T
2654# if defined (__STDC__) || defined (__cplusplus)
2655yystrlen (const char *yystr)
2656# else
2657yystrlen (yystr)
2658 const char *yystr;
2659# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002660{
Reid Spencer3822ff52006-11-08 06:47:33 +00002661 const char *yys = yystr;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002662
Reid Spencer3822ff52006-11-08 06:47:33 +00002663 while (*yys++ != '\0')
2664 continue;
2665
2666 return yys - yystr - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002667}
Reid Spencer3822ff52006-11-08 06:47:33 +00002668# endif
2669# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002670
Reid Spencer3822ff52006-11-08 06:47:33 +00002671# ifndef yystpcpy
2672# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2673# define yystpcpy stpcpy
2674# else
2675/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2676 YYDEST. */
2677static char *
2678# if defined (__STDC__) || defined (__cplusplus)
2679yystpcpy (char *yydest, const char *yysrc)
2680# else
2681yystpcpy (yydest, yysrc)
2682 char *yydest;
2683 const char *yysrc;
2684# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002685{
Reid Spencer3822ff52006-11-08 06:47:33 +00002686 char *yyd = yydest;
2687 const char *yys = yysrc;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002688
Reid Spencer3822ff52006-11-08 06:47:33 +00002689 while ((*yyd++ = *yys++) != '\0')
2690 continue;
2691
2692 return yyd - 1;
Chris Lattnerf49c1762006-11-08 05:58:47 +00002693}
Reid Spencer3822ff52006-11-08 06:47:33 +00002694# endif
2695# endif
Chris Lattnerf49c1762006-11-08 05:58:47 +00002696
Reid Spencer3822ff52006-11-08 06:47:33 +00002697# ifndef yytnamerr
2698/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2699 quotes and backslashes, so that it's suitable for yyerror. The
2700 heuristic is that double-quoting is unnecessary unless the string
2701 contains an apostrophe, a comma, or backslash (other than
2702 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2703 null, do not copy; instead, return the length of what the result
2704 would have been. */
2705static YYSIZE_T
2706yytnamerr (char *yyres, const char *yystr)
2707{
2708 if (*yystr == '"')
2709 {
2710 size_t yyn = 0;
2711 char const *yyp = yystr;
2712
2713 for (;;)
2714 switch (*++yyp)
2715 {
2716 case '\'':
2717 case ',':
2718 goto do_not_strip_quotes;
2719
2720 case '\\':
2721 if (*++yyp != '\\')
2722 goto do_not_strip_quotes;
2723 /* Fall through. */
2724 default:
2725 if (yyres)
2726 yyres[yyn] = *yyp;
2727 yyn++;
2728 break;
2729
2730 case '"':
2731 if (yyres)
2732 yyres[yyn] = '\0';
2733 return yyn;
2734 }
2735 do_not_strip_quotes: ;
2736 }
2737
2738 if (! yyres)
2739 return yystrlen (yystr);
2740
2741 return yystpcpy (yyres, yystr) - yyres;
2742}
2743# endif
2744
2745#endif /* YYERROR_VERBOSE */
2746
Reid Spencer21be8652006-10-22 07:03:43 +00002747
2748
Reid Spencer3822ff52006-11-08 06:47:33 +00002749#if YYDEBUG
2750/*--------------------------------.
2751| Print this symbol on YYOUTPUT. |
2752`--------------------------------*/
Reid Spencer21be8652006-10-22 07:03:43 +00002753
Reid Spencer3822ff52006-11-08 06:47:33 +00002754#if defined (__STDC__) || defined (__cplusplus)
2755static void
2756yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Chris Lattnerf49c1762006-11-08 05:58:47 +00002757#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002758static void
2759yysymprint (yyoutput, yytype, yyvaluep)
2760 FILE *yyoutput;
2761 int yytype;
2762 YYSTYPE *yyvaluep;
2763#endif
2764{
2765 /* Pacify ``unused variable'' warnings. */
2766 (void) yyvaluep;
2767
2768 if (yytype < YYNTOKENS)
2769 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2770 else
2771 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2772
2773
2774# ifdef YYPRINT
2775 if (yytype < YYNTOKENS)
2776 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2777# endif
2778 switch (yytype)
2779 {
2780 default:
2781 break;
2782 }
2783 YYFPRINTF (yyoutput, ")");
2784}
2785
2786#endif /* ! YYDEBUG */
2787/*-----------------------------------------------.
2788| Release the memory associated to this symbol. |
2789`-----------------------------------------------*/
2790
2791#if defined (__STDC__) || defined (__cplusplus)
2792static void
2793yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2794#else
2795static void
2796yydestruct (yymsg, yytype, yyvaluep)
2797 const char *yymsg;
2798 int yytype;
2799 YYSTYPE *yyvaluep;
2800#endif
2801{
2802 /* Pacify ``unused variable'' warnings. */
2803 (void) yyvaluep;
2804
2805 if (!yymsg)
2806 yymsg = "Deleting";
2807 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2808
2809 switch (yytype)
2810 {
2811
2812 default:
2813 break;
2814 }
2815}
2816
2817
2818/* Prevent warnings from -Wmissing-prototypes. */
2819
2820#ifdef YYPARSE_PARAM
2821# if defined (__STDC__) || defined (__cplusplus)
2822int yyparse (void *YYPARSE_PARAM);
2823# else
2824int yyparse ();
2825# endif
2826#else /* ! YYPARSE_PARAM */
2827#if defined (__STDC__) || defined (__cplusplus)
Reid Spencere812fb22006-01-19 01:21:04 +00002828int yyparse (void);
Chris Lattnerf49c1762006-11-08 05:58:47 +00002829#else
Reid Spencer3822ff52006-11-08 06:47:33 +00002830int yyparse ();
2831#endif
2832#endif /* ! YYPARSE_PARAM */
2833
2834
2835
2836/* The look-ahead symbol. */
2837int yychar;
2838
2839/* The semantic value of the look-ahead symbol. */
2840YYSTYPE yylval;
2841
2842/* Number of syntax errors so far. */
2843int yynerrs;
2844
2845
2846
2847/*----------.
2848| yyparse. |
2849`----------*/
2850
2851#ifdef YYPARSE_PARAM
2852# if defined (__STDC__) || defined (__cplusplus)
2853int yyparse (void *YYPARSE_PARAM)
2854# else
2855int yyparse (YYPARSE_PARAM)
2856 void *YYPARSE_PARAM;
2857# endif
2858#else /* ! YYPARSE_PARAM */
2859#if defined (__STDC__) || defined (__cplusplus)
2860int
2861yyparse (void)
2862#else
2863int
2864yyparse ()
2865
2866#endif
2867#endif
2868{
2869
2870 int yystate;
2871 int yyn;
2872 int yyresult;
2873 /* Number of tokens to shift before error messages enabled. */
2874 int yyerrstatus;
2875 /* Look-ahead token as an internal (translated) token number. */
2876 int yytoken = 0;
2877
2878 /* Three stacks and their tools:
2879 `yyss': related to states,
2880 `yyvs': related to semantic values,
2881 `yyls': related to locations.
2882
2883 Refer to the stacks thru separate pointers, to allow yyoverflow
2884 to reallocate them elsewhere. */
2885
2886 /* The state stack. */
2887 short int yyssa[YYINITDEPTH];
2888 short int *yyss = yyssa;
2889 short int *yyssp;
2890
2891 /* The semantic value stack. */
2892 YYSTYPE yyvsa[YYINITDEPTH];
2893 YYSTYPE *yyvs = yyvsa;
2894 YYSTYPE *yyvsp;
2895
2896
2897
Reid Spencer5b7e7532006-09-28 19:28:24 +00002898#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002899
Reid Spencer3822ff52006-11-08 06:47:33 +00002900 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002901
Reid Spencer3822ff52006-11-08 06:47:33 +00002902 /* The variables used to return semantic value and location from the
2903 action routines. */
2904 YYSTYPE yyval;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002905
2906
Reid Spencer3822ff52006-11-08 06:47:33 +00002907 /* When reducing, the number of symbols on the RHS of the reduced
2908 rule. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00002909 int yylen;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002910
Reid Spencer3822ff52006-11-08 06:47:33 +00002911 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00002912
Reid Spencer68a24bd2005-08-27 18:50:39 +00002913 yystate = 0;
2914 yyerrstatus = 0;
2915 yynerrs = 0;
2916 yychar = YYEMPTY; /* Cause a token to be read. */
2917
2918 /* Initialize stack pointers.
2919 Waste one element of value and location stack
2920 so that they stay on the same level as the state stack.
2921 The wasted elements are never initialized. */
2922
Reid Spencer3822ff52006-11-08 06:47:33 +00002923 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002924 yyvsp = yyvs;
2925
Reid Spencer3822ff52006-11-08 06:47:33 +00002926 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002927
Reid Spencer3822ff52006-11-08 06:47:33 +00002928/*------------------------------------------------------------.
2929| yynewstate -- Push a new state, which is found in yystate. |
2930`------------------------------------------------------------*/
2931 yynewstate:
2932 /* In all cases, when you get here, the value and location stacks
2933 have just been pushed. so pushing a state here evens the stacks.
2934 */
2935 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002936
Reid Spencer3822ff52006-11-08 06:47:33 +00002937 yysetstate:
2938 *yyssp = yystate;
2939
2940 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002941 {
2942 /* Get the current used size of the three stacks, in elements. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002943 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002944
2945#ifdef yyoverflow
Reid Spencer3822ff52006-11-08 06:47:33 +00002946 {
2947 /* Give user a chance to reallocate the stack. Use copies of
2948 these so that the &'s don't force the real ones into
2949 memory. */
2950 YYSTYPE *yyvs1 = yyvs;
2951 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002952
Reid Spencer3822ff52006-11-08 06:47:33 +00002953
2954 /* Each stack pointer address is followed by the size of the
2955 data in use in that stack, in bytes. This used to be a
2956 conditional around just the two extra args, but that might
2957 be undefined if yyoverflow is a macro. */
2958 yyoverflow (YY_("memory exhausted"),
2959 &yyss1, yysize * sizeof (*yyssp),
2960 &yyvs1, yysize * sizeof (*yyvsp),
2961
2962 &yystacksize);
2963
2964 yyss = yyss1;
2965 yyvs = yyvs1;
2966 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002967#else /* no yyoverflow */
Reid Spencer3822ff52006-11-08 06:47:33 +00002968# ifndef YYSTACK_RELOCATE
2969 goto yyexhaustedlab;
2970# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002971 /* Extend the stack our own way. */
Reid Spencer3822ff52006-11-08 06:47:33 +00002972 if (YYMAXDEPTH <= yystacksize)
2973 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002974 yystacksize *= 2;
Reid Spencer3822ff52006-11-08 06:47:33 +00002975 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002976 yystacksize = YYMAXDEPTH;
Reid Spencer3822ff52006-11-08 06:47:33 +00002977
2978 {
2979 short int *yyss1 = yyss;
2980 union yyalloc *yyptr =
2981 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2982 if (! yyptr)
2983 goto yyexhaustedlab;
2984 YYSTACK_RELOCATE (yyss);
2985 YYSTACK_RELOCATE (yyvs);
2986
2987# undef YYSTACK_RELOCATE
2988 if (yyss1 != yyssa)
2989 YYSTACK_FREE (yyss1);
2990 }
2991# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00002992#endif /* no yyoverflow */
2993
Reid Spencer3822ff52006-11-08 06:47:33 +00002994 yyssp = yyss + yysize - 1;
2995 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002996
2997
Reid Spencer3822ff52006-11-08 06:47:33 +00002998 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
2999 (unsigned long int) yystacksize));
3000
3001 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003002 YYABORT;
3003 }
3004
Reid Spencer3822ff52006-11-08 06:47:33 +00003005 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003006
3007 goto yybackup;
Reid Spencer3822ff52006-11-08 06:47:33 +00003008
3009/*-----------.
3010| yybackup. |
3011`-----------*/
3012yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003013
Reid Spencer5b7e7532006-09-28 19:28:24 +00003014/* Do appropriate processing given the current state. */
Reid Spencer3822ff52006-11-08 06:47:33 +00003015/* Read a look-ahead token if we need one and don't already have one. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00003016/* yyresume: */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003017
Reid Spencer3822ff52006-11-08 06:47:33 +00003018 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer5b7e7532006-09-28 19:28:24 +00003019
Reid Spencer68a24bd2005-08-27 18:50:39 +00003020 yyn = yypact[yystate];
Reid Spencer3822ff52006-11-08 06:47:33 +00003021 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003022 goto yydefault;
3023
Reid Spencer3822ff52006-11-08 06:47:33 +00003024 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003025
Reid Spencer3822ff52006-11-08 06:47:33 +00003026 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003027 if (yychar == YYEMPTY)
3028 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003029 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003030 yychar = YYLEX;
3031 }
3032
Reid Spencer3822ff52006-11-08 06:47:33 +00003033 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003034 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003035 yychar = yytoken = YYEOF;
3036 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003037 }
3038 else
3039 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003040 yytoken = YYTRANSLATE (yychar);
3041 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003042 }
3043
Reid Spencer3822ff52006-11-08 06:47:33 +00003044 /* If the proper action on seeing token YYTOKEN is to reduce or to
3045 detect an error, take that action. */
3046 yyn += yytoken;
3047 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003048 goto yydefault;
3049 yyn = yytable[yyn];
Reid Spencer3822ff52006-11-08 06:47:33 +00003050 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003051 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003052 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003053 goto yyerrlab;
3054 yyn = -yyn;
3055 goto yyreduce;
3056 }
3057
3058 if (yyn == YYFINAL)
3059 YYACCEPT;
3060
Reid Spencer3822ff52006-11-08 06:47:33 +00003061 /* Shift the look-ahead token. */
3062 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Reid Spencer5b7e7532006-09-28 19:28:24 +00003063
3064 /* Discard the token being shifted unless it is eof. */
3065 if (yychar != YYEOF)
3066 yychar = YYEMPTY;
3067
3068 *++yyvsp = yylval;
3069
Reid Spencer3822ff52006-11-08 06:47:33 +00003070
3071 /* Count tokens shifted since error; after three, turn off error
3072 status. */
3073 if (yyerrstatus)
3074 yyerrstatus--;
Chris Lattner224f84f2006-08-18 17:34:45 +00003075
Reid Spencer68a24bd2005-08-27 18:50:39 +00003076 yystate = yyn;
3077 goto yynewstate;
3078
Chris Lattnerf49c1762006-11-08 05:58:47 +00003079
Reid Spencer3822ff52006-11-08 06:47:33 +00003080/*-----------------------------------------------------------.
3081| yydefault -- do the default action for the current state. |
3082`-----------------------------------------------------------*/
3083yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003084 yyn = yydefact[yystate];
3085 if (yyn == 0)
3086 goto yyerrlab;
Reid Spencer3822ff52006-11-08 06:47:33 +00003087 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003088
Reid Spencer3822ff52006-11-08 06:47:33 +00003089
3090/*-----------------------------.
3091| yyreduce -- Do a reduction. |
3092`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003093yyreduce:
Reid Spencer3822ff52006-11-08 06:47:33 +00003094 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003095 yylen = yyr2[yyn];
3096
Reid Spencer3822ff52006-11-08 06:47:33 +00003097 /* If YYLEN is nonzero, implement the default value of the action:
3098 `$$ = $1'.
3099
3100 Otherwise, the following line sets YYVAL to garbage.
3101 This behavior is undocumented and Bison
3102 users should not rely upon it. Assigning to YYVAL
3103 unconditionally makes the parser a bit smaller, and it avoids a
3104 GCC warning that YYVAL may be used uninitialized. */
3105 yyval = yyvsp[1-yylen];
3106
3107
3108 YY_REDUCE_PRINT (yyn);
3109 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003110 {
Reid Spencer3822ff52006-11-08 06:47:33 +00003111 case 3:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003112#line 1104 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003113 {
3114 if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003115 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003116 (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003117 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003118;}
3119 break;
3120
3121 case 5:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003122#line 1113 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003123 {
3124 if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range!
Reid Spencer61c83e02006-08-18 08:43:06 +00003125 GEN_ERROR("Value too large for type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003126 (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003127 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003128;}
3129 break;
3130
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003131 case 39:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003132#line 1130 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003133 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3134 break;
3135
3136 case 40:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003137#line 1130 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003138 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3139 break;
3140
3141 case 41:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003142#line 1131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003143 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3144 break;
3145
3146 case 42:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003147#line 1131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003148 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3149 break;
3150
3151 case 43:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003152#line 1132 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003153 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3154 break;
3155
3156 case 44:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003157#line 1132 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003158 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3159 break;
3160
3161 case 45:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003162#line 1133 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003163 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3164 break;
3165
3166 case 46:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003167#line 1133 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003168 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3169 break;
3170
3171 case 47:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003172#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003173 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3174 break;
3175
3176 case 48:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003177#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003178 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3179 break;
3180
3181 case 49:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003182#line 1138 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003183 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3184 break;
3185
3186 case 50:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003187#line 1138 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003188 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3189 break;
3190
3191 case 51:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003192#line 1139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003193 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3194 break;
3195
3196 case 52:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003197#line 1139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003198 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3199 break;
3200
3201 case 53:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003202#line 1140 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003203 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3204 break;
3205
3206 case 54:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003207#line 1140 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003208 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3209 break;
3210
3211 case 55:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003212#line 1141 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003213 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3214 break;
3215
3216 case 56:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003217#line 1141 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003218 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3219 break;
3220
3221 case 57:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003222#line 1142 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003223 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3224 break;
3225
3226 case 58:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003227#line 1142 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003228 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3229 break;
3230
3231 case 59:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003232#line 1143 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003233 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3234 break;
3235
3236 case 60:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003237#line 1143 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003238 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3239 break;
3240
3241 case 61:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003242#line 1144 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003243 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3244 break;
3245
3246 case 62:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003247#line 1144 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003248 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3249 break;
3250
3251 case 63:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003252#line 1145 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003253 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3254 break;
3255
3256 case 64:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003257#line 1146 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003258 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3259 break;
3260
3261 case 77:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003262#line 1157 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003263 {
3264 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003265 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003266 ;}
3267 break;
3268
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003269 case 78:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003270#line 1161 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003271 {
3272 (yyval.StrVal) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00003273 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003274 ;}
3275 break;
3276
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003277 case 79:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003278#line 1166 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003279 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3280 break;
3281
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003282 case 80:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003283#line 1167 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003284 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3285 break;
3286
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003287 case 81:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003288#line 1168 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003289 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3290 break;
3291
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003292 case 82:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003293#line 1169 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003294 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3295 break;
3296
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003297 case 83:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003298#line 1170 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003299 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3300 break;
3301
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003302 case 84:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003303#line 1171 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003304 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3305 break;
3306
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003307 case 85:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003308#line 1172 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003309 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3310 break;
3311
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003312 case 86:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003313#line 1173 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003314 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3315 break;
3316
Reid Spencera132e042006-12-03 05:46:11 +00003317 case 87:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003318#line 1175 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003319 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003320 break;
3321
Reid Spencera132e042006-12-03 05:46:11 +00003322 case 88:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003323#line 1176 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003324 { (yyval.UIntVal) = CallingConv::C; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003325 break;
3326
Reid Spencera132e042006-12-03 05:46:11 +00003327 case 89:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003328#line 1177 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003329 { (yyval.UIntVal) = CallingConv::CSRet; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003330 break;
3331
Reid Spencera132e042006-12-03 05:46:11 +00003332 case 90:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003333#line 1178 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003334 { (yyval.UIntVal) = CallingConv::Fast; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003335 break;
3336
Reid Spencera132e042006-12-03 05:46:11 +00003337 case 91:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003338#line 1179 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003339 { (yyval.UIntVal) = CallingConv::Cold; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003340 break;
3341
Reid Spencera132e042006-12-03 05:46:11 +00003342 case 92:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003343#line 1180 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003344 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3345 break;
3346
3347 case 93:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003348#line 1181 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003349 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3350 break;
3351
3352 case 94:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003353#line 1182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003354 {
3355 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Reid Spencer61c83e02006-08-18 08:43:06 +00003356 GEN_ERROR("Calling conv too large!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003357 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Reid Spencer61c83e02006-08-18 08:43:06 +00003358 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003359 ;}
3360 break;
3361
Reid Spencera132e042006-12-03 05:46:11 +00003362 case 95:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003363#line 1191 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003364 { (yyval.UIntVal) = 0; ;}
3365 break;
3366
Reid Spencera132e042006-12-03 05:46:11 +00003367 case 96:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003368#line 1192 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003369 {
3370 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3371 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Reid Spencer3ed469c2006-11-02 20:25:50 +00003372 GEN_ERROR("Alignment must be a power of two!");
3373 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003374;}
3375 break;
3376
Reid Spencera132e042006-12-03 05:46:11 +00003377 case 97:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003378#line 1198 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003379 { (yyval.UIntVal) = 0; ;}
3380 break;
3381
3382 case 98:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003383#line 1199 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003384 {
3385 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3386 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
3387 GEN_ERROR("Alignment must be a power of two!");
3388 CHECK_FOR_ERROR
3389;}
3390 break;
3391
3392 case 99:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003393#line 1207 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003394 {
3395 for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
3396 if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
Reid Spencer61c83e02006-08-18 08:43:06 +00003397 GEN_ERROR("Invalid character in section name!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003398 (yyval.StrVal) = (yyvsp[0].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003399 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003400;}
3401 break;
3402
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003403 case 100:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003404#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003405 { (yyval.StrVal) = 0; ;}
3406 break;
3407
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003408 case 101:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003409#line 1216 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003410 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3411 break;
3412
Reid Spencera132e042006-12-03 05:46:11 +00003413 case 102:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003414#line 1221 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003415 {;}
3416 break;
3417
3418 case 103:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003419#line 1222 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003420 {;}
3421 break;
3422
3423 case 104:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003424#line 1223 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003425 {
3426 CurGV->setSection((yyvsp[0].StrVal));
3427 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003428 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003429 ;}
3430 break;
3431
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003432 case 105:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003433#line 1228 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003434 {
3435 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003436 GEN_ERROR("Alignment must be a power of two!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003437 CurGV->setAlignment((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003438 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003439 ;}
3440 break;
3441
Reid Spencera132e042006-12-03 05:46:11 +00003442 case 107:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003443#line 1242 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003444 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003445 break;
3446
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003447 case 109:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003448#line 1243 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003449 { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
3450 break;
3451
3452 case 110:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003453#line 1245 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003454 {
Reid Spencer3da59db2006-11-27 01:05:10 +00003455 if (!UpRefs.empty())
Reid Spencera132e042006-12-03 05:46:11 +00003456 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer3da59db2006-11-27 01:05:10 +00003457 (yyval.TypeVal) = (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003458 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003459 ;}
3460 break;
3461
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003462 case 124:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003463#line 1257 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003464 {
3465 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
3466 CHECK_FOR_ERROR
3467 ;}
3468 break;
3469
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003470 case 125:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003471#line 1261 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00003472 {
3473 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
3474 CHECK_FOR_ERROR
3475 ;}
3476 break;
3477
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003478 case 126:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003479#line 1265 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003480 { // Named types are also simple types...
3481 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
3482 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00003483 (yyval.TypeVal) = new PATypeHolder(tmp);
Reid Spencer3da59db2006-11-27 01:05:10 +00003484;}
Reid Spencer3822ff52006-11-08 06:47:33 +00003485 break;
3486
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003487 case 127:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003488#line 1273 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003489 { // Type UpReference
3490 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
3491 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3492 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
Reid Spencera132e042006-12-03 05:46:11 +00003493 (yyval.TypeVal) = new PATypeHolder(OT);
Reid Spencer3da59db2006-11-27 01:05:10 +00003494 UR_OUT("New Upreference!\n");
Reid Spencer61c83e02006-08-18 08:43:06 +00003495 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003496 ;}
3497 break;
3498
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003499 case 128:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003500#line 1281 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003501 { // Function derived type?
3502 std::vector<const Type*> Params;
Reid Spencera132e042006-12-03 05:46:11 +00003503 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003504 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003505 Params.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003506 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3507 if (isVarArg) Params.pop_back();
3508
Reid Spencera132e042006-12-03 05:46:11 +00003509 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FunctionType::get(*(yyvsp[-3].TypeVal),Params,isVarArg)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003510 delete (yyvsp[-1].TypeList); // Delete the argument list
Reid Spencera132e042006-12-03 05:46:11 +00003511 delete (yyvsp[-3].TypeVal); // Delete the return type handle
Reid Spencer3da59db2006-11-27 01:05:10 +00003512 CHECK_FOR_ERROR
3513 ;}
3514 break;
3515
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003516 case 129:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003517#line 1294 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003518 { // Sized array type?
Reid Spencera132e042006-12-03 05:46:11 +00003519 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3520 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003521 CHECK_FOR_ERROR
3522 ;}
3523 break;
3524
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003525 case 130:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003526#line 1299 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003527 { // Packed array type?
Reid Spencera132e042006-12-03 05:46:11 +00003528 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3529 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
3530 GEN_ERROR("Unsigned result not equal to signed result");
3531 if (!ElemTy->isPrimitiveType())
3532 GEN_ERROR("Elemental type of a PackedType must be primitive");
3533 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
3534 GEN_ERROR("Vector length should be a power of 2!");
3535 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PackedType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3536 delete (yyvsp[-1].TypeVal);
3537 CHECK_FOR_ERROR
Reid Spencer3da59db2006-11-27 01:05:10 +00003538 ;}
3539 break;
3540
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003541 case 131:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003542#line 1311 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003543 { // Structure type?
3544 std::vector<const Type*> Elements;
Reid Spencera132e042006-12-03 05:46:11 +00003545 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
Reid Spencer3da59db2006-11-27 01:05:10 +00003546 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00003547 Elements.push_back(*I);
Reid Spencer3da59db2006-11-27 01:05:10 +00003548
Reid Spencera132e042006-12-03 05:46:11 +00003549 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
Reid Spencer3da59db2006-11-27 01:05:10 +00003550 delete (yyvsp[-1].TypeList);
3551 CHECK_FOR_ERROR
3552 ;}
3553 break;
3554
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003555 case 132:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003556#line 1321 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003557 { // Empty structure type?
Reid Spencera132e042006-12-03 05:46:11 +00003558 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer3da59db2006-11-27 01:05:10 +00003559 CHECK_FOR_ERROR
3560 ;}
3561 break;
3562
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003563 case 133:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003564#line 1325 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003565 { // Pointer type?
Reid Spencera132e042006-12-03 05:46:11 +00003566 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Reid Spencer3da59db2006-11-27 01:05:10 +00003567 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencera132e042006-12-03 05:46:11 +00003568 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3569 delete (yyvsp[-1].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003570 CHECK_FOR_ERROR
3571 ;}
3572 break;
3573
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003574 case 134:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003575#line 1336 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003576 {
Reid Spencera132e042006-12-03 05:46:11 +00003577 (yyval.TypeList) = new std::list<PATypeHolder>();
3578 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003579 CHECK_FOR_ERROR
3580 ;}
3581 break;
3582
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003583 case 135:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003584#line 1341 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003585 {
Reid Spencera132e042006-12-03 05:46:11 +00003586 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003587 CHECK_FOR_ERROR
3588 ;}
3589 break;
3590
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003591 case 137:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003592#line 1348 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003593 {
Reid Spencera132e042006-12-03 05:46:11 +00003594 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003595 CHECK_FOR_ERROR
3596 ;}
3597 break;
3598
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003599 case 138:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003600#line 1352 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003601 {
Reid Spencera132e042006-12-03 05:46:11 +00003602 ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
Reid Spencer3da59db2006-11-27 01:05:10 +00003603 CHECK_FOR_ERROR
3604 ;}
3605 break;
3606
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003607 case 139:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003608#line 1356 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3da59db2006-11-27 01:05:10 +00003609 {
Reid Spencera132e042006-12-03 05:46:11 +00003610 (yyval.TypeList) = new std::list<PATypeHolder>();
Reid Spencer3da59db2006-11-27 01:05:10 +00003611 CHECK_FOR_ERROR
3612 ;}
3613 break;
3614
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003615 case 140:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003616#line 1367 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003617 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003618 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003619 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003620 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003621 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003622 const Type *ETy = ATy->getElementType();
3623 int NumElements = ATy->getNumElements();
3624
3625 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003626 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003627 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003628 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003629 itostr(NumElements) + "!");
3630
3631 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003632 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003633 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003634 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003635 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003636 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003637 }
3638
Reid Spencera132e042006-12-03 05:46:11 +00003639 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3640 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003641 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003642 ;}
3643 break;
3644
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003645 case 141:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003646#line 1393 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003647 {
Reid Spencera132e042006-12-03 05:46:11 +00003648 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003649 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003650 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003651 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003652
3653 int NumElements = ATy->getNumElements();
3654 if (NumElements != -1 && NumElements != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003655 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencer68a24bd2005-08-27 18:50:39 +00003656 " arguments, but has size of " + itostr(NumElements) +"!");
Reid Spencera132e042006-12-03 05:46:11 +00003657 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3658 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003659 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003660 ;}
3661 break;
3662
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003663 case 142:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003664#line 1407 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003665 {
Reid Spencera132e042006-12-03 05:46:11 +00003666 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003667 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003668 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003669 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003670
3671 int NumElements = ATy->getNumElements();
3672 const Type *ETy = ATy->getElementType();
Reid Spencer3822ff52006-11-08 06:47:33 +00003673 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
3674 if (NumElements != -1 && NumElements != (EndStr-(yyvsp[0].StrVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003675 GEN_ERROR("Can't build string constant of size " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003676 itostr((int)(EndStr-(yyvsp[0].StrVal))) +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003677 " when array has size " + itostr(NumElements) + "!");
3678 std::vector<Constant*> Vals;
3679 if (ETy == Type::SByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003680 for (signed char *C = (signed char *)(yyvsp[0].StrVal); C != (signed char *)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003681 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003682 } else if (ETy == Type::UByteTy) {
Reid Spencer3822ff52006-11-08 06:47:33 +00003683 for (unsigned char *C = (unsigned char *)(yyvsp[0].StrVal);
Chris Lattner66316012006-01-24 04:14:29 +00003684 C != (unsigned char*)EndStr; ++C)
Reid Spencerb83eb642006-10-20 07:07:24 +00003685 Vals.push_back(ConstantInt::get(ETy, *C));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003686 } else {
Reid Spencer3822ff52006-11-08 06:47:33 +00003687 free((yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003688 GEN_ERROR("Cannot build string arrays of non byte sized elements!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003689 }
Reid Spencer3822ff52006-11-08 06:47:33 +00003690 free((yyvsp[0].StrVal));
Reid Spencera132e042006-12-03 05:46:11 +00003691 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3692 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003693 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003694 ;}
3695 break;
3696
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003697 case 143:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003698#line 1437 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003699 { // Nonempty unsized arr
Reid Spencera132e042006-12-03 05:46:11 +00003700 const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003701 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003702 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003703 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003704 const Type *ETy = PTy->getElementType();
3705 int NumElements = PTy->getNumElements();
3706
3707 // Verify that we have the correct size...
Reid Spencer3822ff52006-11-08 06:47:33 +00003708 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Reid Spencer61c83e02006-08-18 08:43:06 +00003709 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencer3822ff52006-11-08 06:47:33 +00003710 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003711 itostr(NumElements) + "!");
3712
3713 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00003714 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00003715 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003716 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003717 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencera132e042006-12-03 05:46:11 +00003718 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003719 }
3720
Reid Spencera132e042006-12-03 05:46:11 +00003721 (yyval.ConstVal) = ConstantPacked::get(PTy, *(yyvsp[-1].ConstVector));
3722 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003723 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003724 ;}
3725 break;
3726
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003727 case 144:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003728#line 1463 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003729 {
Reid Spencera132e042006-12-03 05:46:11 +00003730 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Reid Spencer61c83e02006-08-18 08:43:06 +00003731 if (STy == 0)
3732 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003733 (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00003734
Reid Spencer3822ff52006-11-08 06:47:33 +00003735 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencer61c83e02006-08-18 08:43:06 +00003736 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003737
3738 // Check to ensure that constants are compatible with the type initializer!
Reid Spencer3822ff52006-11-08 06:47:33 +00003739 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
Reid Spencera132e042006-12-03 05:46:11 +00003740 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer61c83e02006-08-18 08:43:06 +00003741 GEN_ERROR("Expected type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00003742 STy->getElementType(i)->getDescription() +
3743 "' for element #" + utostr(i) +
3744 " of structure initializer!");
3745
Reid Spencera132e042006-12-03 05:46:11 +00003746 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3747 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00003748 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003749 ;}
3750 break;
3751
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003752 case 145:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003753#line 1484 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003754 {
Reid Spencera132e042006-12-03 05:46:11 +00003755 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003756 if (STy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003757 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003758 (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003759
3760 if (STy->getNumContainedTypes() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003761 GEN_ERROR("Illegal number of initializers for structure type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003762
Reid Spencera132e042006-12-03 05:46:11 +00003763 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
3764 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003765 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003766 ;}
3767 break;
3768
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003769 case 146:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003770#line 1497 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003771 {
Reid Spencera132e042006-12-03 05:46:11 +00003772 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003773 if (PTy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003774 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencera132e042006-12-03 05:46:11 +00003775 (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003776
Reid Spencera132e042006-12-03 05:46:11 +00003777 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
3778 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003779 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003780 ;}
3781 break;
3782
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003783 case 147:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003784#line 1507 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003785 {
Reid Spencera132e042006-12-03 05:46:11 +00003786 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
3787 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003788 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003789 ;}
3790 break;
3791
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003792 case 148:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003793#line 1512 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003794 {
Reid Spencera132e042006-12-03 05:46:11 +00003795 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003796 if (Ty == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003797 GEN_ERROR("Global const reference must be a pointer type!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003798
3799 // ConstExprs can exist in the body of a function, thus creating
3800 // GlobalValues whenever they refer to a variable. Because we are in
3801 // the context of a function, getValNonImprovising will search the functions
3802 // symbol table instead of the module symbol table for the global symbol,
3803 // which throws things all off. To get around this, we just tell
3804 // getValNonImprovising that we are at global scope here.
3805 //
3806 Function *SavedCurFn = CurFun.CurrentFunction;
3807 CurFun.CurrentFunction = 0;
3808
Reid Spencer3822ff52006-11-08 06:47:33 +00003809 Value *V = getValNonImprovising(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00003810 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00003811
3812 CurFun.CurrentFunction = SavedCurFn;
3813
3814 // If this is an initializer for a constant pointer, which is referencing a
3815 // (currently) undefined variable, create a stub now that shall be replaced
3816 // in the future with the right type of variable.
3817 //
3818 if (V == 0) {
3819 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3820 const PointerType *PT = cast<PointerType>(Ty);
3821
3822 // First check to see if the forward references value is already created!
3823 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencer3822ff52006-11-08 06:47:33 +00003824 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003825
3826 if (I != CurModule.GlobalRefs.end()) {
3827 V = I->second; // Placeholder already exists, use it...
Reid Spencer3822ff52006-11-08 06:47:33 +00003828 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003829 } else {
3830 std::string Name;
Reid Spencer3822ff52006-11-08 06:47:33 +00003831 if ((yyvsp[0].ValIDVal).Type == ValID::NameVal) Name = (yyvsp[0].ValIDVal).Name;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003832
3833 // Create the forward referenced global.
3834 GlobalValue *GV;
3835 if (const FunctionType *FTy =
3836 dyn_cast<FunctionType>(PT->getElementType())) {
3837 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3838 CurModule.CurrentModule);
3839 } else {
3840 GV = new GlobalVariable(PT->getElementType(), false,
3841 GlobalValue::ExternalLinkage, 0,
3842 Name, CurModule.CurrentModule);
3843 }
3844
3845 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencer3822ff52006-11-08 06:47:33 +00003846 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003847 V = GV;
3848 }
3849 }
3850
Reid Spencera132e042006-12-03 05:46:11 +00003851 (yyval.ConstVal) = cast<GlobalValue>(V);
3852 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00003853 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003854 ;}
3855 break;
3856
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003857 case 149:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003858#line 1573 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003859 {
Reid Spencera132e042006-12-03 05:46:11 +00003860 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003861 GEN_ERROR("Mismatched types for constant expression!");
Reid Spencer3822ff52006-11-08 06:47:33 +00003862 (yyval.ConstVal) = (yyvsp[0].ConstVal);
Reid Spencera132e042006-12-03 05:46:11 +00003863 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003864 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003865 ;}
3866 break;
3867
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003868 case 150:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003869#line 1580 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003870 {
Reid Spencera132e042006-12-03 05:46:11 +00003871 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer68a24bd2005-08-27 18:50:39 +00003872 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
Reid Spencer61c83e02006-08-18 08:43:06 +00003873 GEN_ERROR("Cannot create a null initialized value of this type!");
Reid Spencera132e042006-12-03 05:46:11 +00003874 (yyval.ConstVal) = Constant::getNullValue(Ty);
3875 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003876 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003877 ;}
3878 break;
3879
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003880 case 151:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003881#line 1588 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003882 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003883 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003884 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003885 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003886 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003887 ;}
3888 break;
3889
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003890 case 152:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003891#line 1594 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003892 { // integral constants
Reid Spencera132e042006-12-03 05:46:11 +00003893 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003894 GEN_ERROR("Constant value doesn't fit in type!");
Reid Spencera132e042006-12-03 05:46:11 +00003895 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00003896 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003897 ;}
3898 break;
3899
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003900 case 153:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003901#line 1600 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003902 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003903 (yyval.ConstVal) = ConstantBool::getTrue();
Reid Spencer61c83e02006-08-18 08:43:06 +00003904 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003905 ;}
3906 break;
3907
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003908 case 154:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003909#line 1604 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003910 { // Boolean constants
Reid Spencera132e042006-12-03 05:46:11 +00003911 (yyval.ConstVal) = ConstantBool::getFalse();
Reid Spencer61c83e02006-08-18 08:43:06 +00003912 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003913 ;}
3914 break;
3915
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003916 case 155:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003917#line 1608 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003918 { // Float & Double constants
Reid Spencera132e042006-12-03 05:46:11 +00003919 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00003920 GEN_ERROR("Floating point constant invalid for type!!");
Reid Spencera132e042006-12-03 05:46:11 +00003921 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003922 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003923 ;}
3924 break;
3925
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003926 case 156:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003927#line 1616 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003928 {
Reid Spencera132e042006-12-03 05:46:11 +00003929 Constant *Val = (yyvsp[-3].ConstVal);
3930 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00003931 if (!Val->getType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003932 GEN_ERROR("cast constant expression from a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003933 Val->getType()->getDescription() + "'!");
3934 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003935 GEN_ERROR("cast constant expression to a non-primitive type: '" +
Reid Spencer3da59db2006-11-27 01:05:10 +00003936 Ty->getDescription() + "'!");
Reid Spencera132e042006-12-03 05:46:11 +00003937 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].TypeVal)->get());
3938 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00003939 ;}
3940 break;
3941
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003942 case 157:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003943#line 1628 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003944 {
Reid Spencera132e042006-12-03 05:46:11 +00003945 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00003946 GEN_ERROR("GetElementPtr requires a pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003947
Reid Spencera132e042006-12-03 05:46:11 +00003948 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte struct
3949 // indices to uint struct indices for compatibility.
3950 generic_gep_type_iterator<std::vector<Value*>::iterator>
3951 GTI = gep_type_begin((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end()),
3952 GTE = gep_type_end((yyvsp[-2].ConstVal)->getType(), (yyvsp[-1].ValueList)->begin(), (yyvsp[-1].ValueList)->end());
3953 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
3954 if (isa<StructType>(*GTI)) // Only change struct indices
3955 if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[-1].ValueList))[i]))
3956 if (CUI->getType() == Type::UByteTy)
3957 (*(yyvsp[-1].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
3958
3959 const Type *IdxTy =
3960 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), *(yyvsp[-1].ValueList), true);
3961 if (!IdxTy)
3962 GEN_ERROR("Index list invalid for constant getelementptr!");
3963
3964 std::vector<Constant*> IdxVec;
3965 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
3966 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Reid Spencer68a24bd2005-08-27 18:50:39 +00003967 IdxVec.push_back(C);
3968 else
Reid Spencer61c83e02006-08-18 08:43:06 +00003969 GEN_ERROR("Indices to constant getelementptr must be constants!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003970
Reid Spencer3822ff52006-11-08 06:47:33 +00003971 delete (yyvsp[-1].ValueList);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003972
Reid Spencera132e042006-12-03 05:46:11 +00003973 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
Reid Spencer61c83e02006-08-18 08:43:06 +00003974 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003975 ;}
3976 break;
3977
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003978 case 158:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003979#line 1660 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003980 {
Reid Spencera132e042006-12-03 05:46:11 +00003981 if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00003982 GEN_ERROR("Select condition must be of boolean type!");
Reid Spencera132e042006-12-03 05:46:11 +00003983 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003984 GEN_ERROR("Select operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00003985 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00003986 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00003987 ;}
3988 break;
3989
Reid Spencer6e18b7d2006-12-03 06:59:29 +00003990 case 159:
Reid Spencer13cf7b62006-12-03 16:20:14 +00003991#line 1668 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00003992 {
Reid Spencera132e042006-12-03 05:46:11 +00003993 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00003994 GEN_ERROR("Binary operator types must match!");
Reid Spencer1628cec2006-10-26 06:15:43 +00003995 CHECK_FOR_ERROR;
3996
Reid Spencer68a24bd2005-08-27 18:50:39 +00003997 // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
3998 // To retain backward compatibility with these early compilers, we emit a
3999 // cast to the appropriate integer type automatically if we are in the
4000 // broken case. See PR424 for more information.
Reid Spencera132e042006-12-03 05:46:11 +00004001 if (!isa<PointerType>((yyvsp[-3].ConstVal)->getType())) {
4002 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004003 } else {
4004 const Type *IntPtrTy = 0;
4005 switch (CurModule.CurrentModule->getPointerSize()) {
4006 case Module::Pointer32: IntPtrTy = Type::IntTy; break;
4007 case Module::Pointer64: IntPtrTy = Type::LongTy; break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004008 default: GEN_ERROR("invalid pointer binary constant expr!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004009 }
Reid Spencera132e042006-12-03 05:46:11 +00004010 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), ConstantExpr::getCast((yyvsp[-3].ConstVal), IntPtrTy),
4011 ConstantExpr::getCast((yyvsp[-1].ConstVal), IntPtrTy));
4012 (yyval.ConstVal) = ConstantExpr::getCast((yyval.ConstVal), (yyvsp[-3].ConstVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004013 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004014 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004015 ;}
4016 break;
4017
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004018 case 160:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004019#line 1692 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004020 {
Reid Spencera132e042006-12-03 05:46:11 +00004021 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004022 GEN_ERROR("Logical operator types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004023 if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
4024 if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
4025 !cast<PackedType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00004026 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00004027 }
Reid Spencera132e042006-12-03 05:46:11 +00004028 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004029 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004030 ;}
4031 break;
4032
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004033 case 161:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004034#line 1703 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004035 {
Reid Spencera132e042006-12-03 05:46:11 +00004036 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Reid Spencer1628cec2006-10-26 06:15:43 +00004037 GEN_ERROR("setcc operand types must match!");
Reid Spencera132e042006-12-03 05:46:11 +00004038 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004039 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004040 ;}
4041 break;
4042
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004043 case 162:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004044#line 1709 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004045 {
Reid Spencera132e042006-12-03 05:46:11 +00004046 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4047 GEN_ERROR("icmp operand types must match!");
4048 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4049 ;}
4050 break;
4051
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004052 case 163:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004053#line 1714 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004054 {
4055 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
4056 GEN_ERROR("fcmp operand types must match!");
4057 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4058 ;}
4059 break;
4060
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004061 case 164:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004062#line 1719 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00004063 {
4064 if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
Reid Spencer1628cec2006-10-26 06:15:43 +00004065 GEN_ERROR("Shift count for shift constant must be unsigned byte!");
Reid Spencera132e042006-12-03 05:46:11 +00004066 if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
Reid Spencer1628cec2006-10-26 06:15:43 +00004067 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00004068 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00004069 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer1628cec2006-10-26 06:15:43 +00004070 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004071 ;}
4072 break;
4073
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004074 case 165:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004075#line 1728 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004076 {
Reid Spencera132e042006-12-03 05:46:11 +00004077 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004078 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004079 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004080 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004081 ;}
4082 break;
4083
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004084 case 166:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004085#line 1734 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004086 {
Reid Spencera132e042006-12-03 05:46:11 +00004087 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004088 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004089 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004090 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004091 ;}
4092 break;
4093
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004094 case 167:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004095#line 1740 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004096 {
Reid Spencera132e042006-12-03 05:46:11 +00004097 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00004098 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00004099 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004100 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004101 ;}
4102 break;
4103
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004104 case 168:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004105#line 1749 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004106 {
4107 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004108 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004109 ;}
4110 break;
4111
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004112 case 169:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004113#line 1753 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004114 {
Reid Spencera132e042006-12-03 05:46:11 +00004115 (yyval.ConstVector) = new std::vector<Constant*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00004116 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004117 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004118 ;}
4119 break;
4120
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004121 case 170:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004122#line 1761 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004123 { (yyval.BoolVal) = false; ;}
4124 break;
4125
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004126 case 171:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004127#line 1761 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004128 { (yyval.BoolVal) = true; ;}
4129 break;
4130
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004131 case 172:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004132#line 1771 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004133 {
4134 (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004135 CurModule.ModuleDone();
Reid Spencerf63697d2006-10-09 17:36:59 +00004136 CHECK_FOR_ERROR;
Reid Spencer3822ff52006-11-08 06:47:33 +00004137;}
4138 break;
4139
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004140 case 173:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004141#line 1779 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004142 {
4143 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004144 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004145 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004146 ;}
4147 break;
4148
Reid Spencera132e042006-12-03 05:46:11 +00004149 case 174:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004150#line 1784 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004151 {
4152 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
Reid Spencer3ed469c2006-11-02 20:25:50 +00004153 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004154 ;}
4155 break;
4156
Reid Spencera132e042006-12-03 05:46:11 +00004157 case 175:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004158#line 1788 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004159 {
4160 (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
4161 CHECK_FOR_ERROR
4162 ;}
4163 break;
4164
4165 case 176:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004166#line 1792 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004167 {
4168 (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
4169 CHECK_FOR_ERROR
4170 ;}
4171 break;
4172
4173 case 177:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004174#line 1796 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004175 {
4176 (yyval.ModuleVal) = CurModule.CurrentModule;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004177 // Emit an error if there are any unresolved types left.
4178 if (!CurModule.LateResolveTypes.empty()) {
4179 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
Reid Spencer61c83e02006-08-18 08:43:06 +00004180 if (DID.Type == ValID::NameVal) {
4181 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
4182 } else {
4183 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
4184 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004185 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004186 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004187 ;}
4188 break;
4189
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004190 case 178:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004191#line 1811 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004192 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004193 // Eagerly resolve types. This is not an optimization, this is a
4194 // requirement that is due to the fact that we could have this:
4195 //
4196 // %list = type { %list * }
4197 // %list = type { %list * } ; repeated type decl
4198 //
4199 // If types are not resolved eagerly, then the two types will not be
4200 // determined to be the same type!
4201 //
Reid Spencera132e042006-12-03 05:46:11 +00004202 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004203
Reid Spencera132e042006-12-03 05:46:11 +00004204 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004205 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004206 // If this is a named type that is not a redefinition, add it to the slot
4207 // table.
Reid Spencera132e042006-12-03 05:46:11 +00004208 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004209 }
Reid Spencera132e042006-12-03 05:46:11 +00004210
4211 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004212 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004213 ;}
4214 break;
4215
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004216 case 179:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004217#line 1833 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004218 { // Function prototypes can be in const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004219 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004220 ;}
4221 break;
4222
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004223 case 180:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004224#line 1836 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004225 { // Asm blocks can be in the const pool
Reid Spencer61c83e02006-08-18 08:43:06 +00004226 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004227 ;}
4228 break;
4229
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004230 case 181:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004231#line 1839 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004232 {
Reid Spencera132e042006-12-03 05:46:11 +00004233 if ((yyvsp[0].ConstVal) == 0)
Reid Spencer5b7e7532006-09-28 19:28:24 +00004234 GEN_ERROR("Global value initializer is not a constant!");
Reid Spencera132e042006-12-03 05:46:11 +00004235 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 +00004236 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004237 ;}
4238 break;
4239
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004240 case 182:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004241#line 1844 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004242 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004243 CurGV = 0;
Reid Spencer3822ff52006-11-08 06:47:33 +00004244 ;}
4245 break;
4246
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004247 case 183:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004248#line 1847 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004249 {
Reid Spencera132e042006-12-03 05:46:11 +00004250 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004251 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004252 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004253 ;}
4254 break;
4255
Reid Spencera132e042006-12-03 05:46:11 +00004256 case 184:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004257#line 1851 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004258 {
Reid Spencer3ed469c2006-11-02 20:25:50 +00004259 CurGV = 0;
4260 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004261 ;}
4262 break;
4263
Reid Spencera132e042006-12-03 05:46:11 +00004264 case 185:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004265#line 1855 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004266 {
4267 CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
4268 CHECK_FOR_ERROR
4269 delete (yyvsp[0].TypeVal);
4270 ;}
4271 break;
4272
4273 case 186:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004274#line 1859 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004275 {
4276 CurGV = 0;
4277 CHECK_FOR_ERROR
4278 ;}
4279 break;
4280
4281 case 187:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004282#line 1863 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004283 {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004284 CurGV =
Reid Spencera132e042006-12-03 05:46:11 +00004285 ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004286 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00004287 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004288 ;}
4289 break;
4290
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004291 case 188:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004292#line 1868 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004293 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004294 CurGV = 0;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004295 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004296 ;}
4297 break;
4298
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004299 case 189:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004300#line 1872 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004301 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004302 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004303 ;}
4304 break;
4305
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004306 case 190:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004307#line 1875 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004308 {
Anton Korobeynikovbcb97702006-09-17 20:25:45 +00004309 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004310 ;}
4311 break;
4312
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004313 case 191:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004314#line 1878 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004315 {
4316 ;}
4317 break;
4318
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004319 case 192:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004320#line 1882 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004321 {
Chris Lattner66316012006-01-24 04:14:29 +00004322 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Reid Spencer3822ff52006-11-08 06:47:33 +00004323 char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
4324 std::string NewAsm((yyvsp[0].StrVal), EndStr);
4325 free((yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004326
4327 if (AsmSoFar.empty())
4328 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4329 else
4330 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
Reid Spencer61c83e02006-08-18 08:43:06 +00004331 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004332;}
4333 break;
4334
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004335 case 193:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004336#line 1895 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004337 { (yyval.Endianness) = Module::BigEndian; ;}
4338 break;
4339
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004340 case 194:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004341#line 1896 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004342 { (yyval.Endianness) = Module::LittleEndian; ;}
4343 break;
4344
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004345 case 195:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004346#line 1898 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004347 {
4348 CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
Reid Spencer61c83e02006-08-18 08:43:06 +00004349 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004350 ;}
4351 break;
4352
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004353 case 196:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004354#line 1902 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004355 {
4356 if ((yyvsp[0].UInt64Val) == 32)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004357 CurModule.CurrentModule->setPointerSize(Module::Pointer32);
Reid Spencer3822ff52006-11-08 06:47:33 +00004358 else if ((yyvsp[0].UInt64Val) == 64)
Reid Spencer68a24bd2005-08-27 18:50:39 +00004359 CurModule.CurrentModule->setPointerSize(Module::Pointer64);
4360 else
Reid Spencer3822ff52006-11-08 06:47:33 +00004361 GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
Reid Spencer61c83e02006-08-18 08:43:06 +00004362 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004363 ;}
4364 break;
4365
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004366 case 197:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004367#line 1911 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004368 {
4369 CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
4370 free((yyvsp[0].StrVal));
4371 ;}
4372 break;
4373
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004374 case 198:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004375#line 1915 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004376 {
4377 CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
4378 free((yyvsp[0].StrVal));
4379 ;}
4380 break;
4381
Reid Spencera132e042006-12-03 05:46:11 +00004382 case 200:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004383#line 1922 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004384 {
4385 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4386 free((yyvsp[0].StrVal));
4387 CHECK_FOR_ERROR
4388 ;}
4389 break;
4390
4391 case 201:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004392#line 1927 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004393 {
4394 CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
4395 free((yyvsp[0].StrVal));
4396 CHECK_FOR_ERROR
4397 ;}
4398 break;
4399
4400 case 202:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004401#line 1932 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004402 {
Reid Spencer61c83e02006-08-18 08:43:06 +00004403 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004404 ;}
4405 break;
4406
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004407 case 206:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004408#line 1942 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004409 { (yyval.StrVal) = 0; ;}
4410 break;
4411
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004412 case 207:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004413#line 1944 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004414 {
Reid Spencera132e042006-12-03 05:46:11 +00004415 if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004416 GEN_ERROR("void typed arguments are invalid!");
Reid Spencera132e042006-12-03 05:46:11 +00004417 (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004418 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004419;}
4420 break;
4421
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004422 case 208:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004423#line 1951 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004424 {
4425 (yyval.ArgList) = (yyvsp[-2].ArgList);
4426 (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
4427 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004428 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004429 ;}
4430 break;
4431
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004432 case 209:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004433#line 1957 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004434 {
Reid Spencera132e042006-12-03 05:46:11 +00004435 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
Reid Spencer3822ff52006-11-08 06:47:33 +00004436 (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
4437 delete (yyvsp[0].ArgVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004438 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004439 ;}
4440 break;
4441
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004442 case 210:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004443#line 1964 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004444 {
4445 (yyval.ArgList) = (yyvsp[0].ArgList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004446 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004447 ;}
4448 break;
4449
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004450 case 211:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004451#line 1968 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004452 {
4453 (yyval.ArgList) = (yyvsp[-2].ArgList);
Reid Spencera132e042006-12-03 05:46:11 +00004454 (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
4455 char*>(new PATypeHolder(Type::VoidTy), 0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004456 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004457 ;}
4458 break;
4459
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004460 case 212:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004461#line 1974 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004462 {
Reid Spencera132e042006-12-03 05:46:11 +00004463 (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
4464 (yyval.ArgList)->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
Reid Spencer61c83e02006-08-18 08:43:06 +00004465 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004466 ;}
4467 break;
4468
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004469 case 213:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004470#line 1979 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004471 {
4472 (yyval.ArgList) = 0;
Reid Spencer61c83e02006-08-18 08:43:06 +00004473 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004474 ;}
4475 break;
4476
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004477 case 214:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004478#line 1985 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004479 {
4480 UnEscapeLexed((yyvsp[-5].StrVal));
4481 std::string FunctionName((yyvsp[-5].StrVal));
4482 free((yyvsp[-5].StrVal)); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004483
Reid Spencera132e042006-12-03 05:46:11 +00004484 if (!(*(yyvsp[-6].TypeVal))->isFirstClassType() && *(yyvsp[-6].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00004485 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004486
4487 std::vector<const Type*> ParamTypeList;
Reid Spencer3822ff52006-11-08 06:47:33 +00004488 if ((yyvsp[-3].ArgList)) { // If there are arguments...
Reid Spencera132e042006-12-03 05:46:11 +00004489 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004490 I != (yyvsp[-3].ArgList)->end(); ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004491 ParamTypeList.push_back(I->first->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004492 }
4493
4494 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4495 if (isVarArg) ParamTypeList.pop_back();
4496
Reid Spencera132e042006-12-03 05:46:11 +00004497 const FunctionType *FT = FunctionType::get(*(yyvsp[-6].TypeVal), ParamTypeList, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004498 const PointerType *PFT = PointerType::get(FT);
Reid Spencera132e042006-12-03 05:46:11 +00004499 delete (yyvsp[-6].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004500
4501 ValID ID;
4502 if (!FunctionName.empty()) {
4503 ID = ValID::create((char*)FunctionName.c_str());
4504 } else {
4505 ID = ValID::create((int)CurModule.Values[PFT].size());
4506 }
4507
4508 Function *Fn = 0;
4509 // See if this function was forward referenced. If so, recycle the object.
4510 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4511 // Move the function to the end of the list, from whereever it was
4512 // previously inserted.
4513 Fn = cast<Function>(FWRef);
4514 CurModule.CurrentModule->getFunctionList().remove(Fn);
4515 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4516 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
4517 (Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) {
4518 // If this is the case, either we need to be a forward decl, or it needs
4519 // to be.
4520 if (!CurFun.isDeclare && !Fn->isExternal())
Reid Spencer61c83e02006-08-18 08:43:06 +00004521 GEN_ERROR("Redefinition of function '" + FunctionName + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004522
4523 // Make sure to strip off any argument names so we can't get conflicts.
4524 if (Fn->isExternal())
4525 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4526 AI != AE; ++AI)
4527 AI->setName("");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004528 } else { // Not already defined?
4529 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
4530 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004531
Reid Spencer68a24bd2005-08-27 18:50:39 +00004532 InsertValue(Fn, CurModule.Values);
4533 }
4534
4535 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004536
4537 if (CurFun.isDeclare) {
4538 // If we have declaration, always overwrite linkage. This will allow us to
4539 // correctly handle cases, when pointer to function is passed as argument to
4540 // another function.
4541 Fn->setLinkage(CurFun.Linkage);
4542 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004543 Fn->setCallingConv((yyvsp[-7].UIntVal));
4544 Fn->setAlignment((yyvsp[0].UIntVal));
4545 if ((yyvsp[-1].StrVal)) {
4546 Fn->setSection((yyvsp[-1].StrVal));
4547 free((yyvsp[-1].StrVal));
Chris Lattnere869eef2005-11-12 00:11:49 +00004548 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004549
4550 // Add all of the arguments we parsed to the function...
Reid Spencer3822ff52006-11-08 06:47:33 +00004551 if ((yyvsp[-3].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004552 if (isVarArg) { // Nuke the last entry
Reid Spencera132e042006-12-03 05:46:11 +00004553 assert((yyvsp[-3].ArgList)->back().first->get() == Type::VoidTy && (yyvsp[-3].ArgList)->back().second == 0&&
4554 "Not a varargs marker!");
4555 delete (yyvsp[-3].ArgList)->back().first;
Reid Spencer3822ff52006-11-08 06:47:33 +00004556 (yyvsp[-3].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004557 }
4558 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spencera132e042006-12-03 05:46:11 +00004559 for (std::vector<std::pair<PATypeHolder*,char*> >::iterator I = (yyvsp[-3].ArgList)->begin();
Reid Spencer3822ff52006-11-08 06:47:33 +00004560 I != (yyvsp[-3].ArgList)->end(); ++I, ++ArgIt) {
Reid Spencera132e042006-12-03 05:46:11 +00004561 delete I->first; // Delete the typeholder...
4562
Reid Spencer68a24bd2005-08-27 18:50:39 +00004563 setValueName(ArgIt, I->second); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004564 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004565 InsertValue(ArgIt);
4566 }
Reid Spencera132e042006-12-03 05:46:11 +00004567
Reid Spencer3822ff52006-11-08 06:47:33 +00004568 delete (yyvsp[-3].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004569 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004570 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004571;}
4572 break;
4573
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004574 case 217:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004575#line 2081 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004576 {
4577 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004578
4579 // Make sure that we keep track of the linkage type even if there was a
4580 // previous "declare".
Reid Spencer3822ff52006-11-08 06:47:33 +00004581 (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
4582;}
4583 break;
4584
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004585 case 220:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004586#line 2091 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004587 {
4588 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004589 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004590;}
4591 break;
4592
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004593 case 222:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004594#line 2097 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004595 { CurFun.Linkage = GlobalValue::DLLImportLinkage; ;}
4596 break;
4597
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004598 case 223:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004599#line 2098 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer481169e2006-12-01 00:33:46 +00004600 { CurFun.Linkage = GlobalValue::ExternalWeakLinkage; ;}
Reid Spencer3822ff52006-11-08 06:47:33 +00004601 break;
4602
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004603 case 224:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004604#line 2100 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004605 { CurFun.isDeclare = true; ;}
4606 break;
4607
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004608 case 225:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004609#line 2100 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004610 {
4611 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004612 CurFun.FunctionDone();
Reid Spencer61c83e02006-08-18 08:43:06 +00004613 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004614 ;}
4615 break;
4616
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004617 case 226:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004618#line 2110 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004619 {
4620 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004621 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004622 ;}
4623 break;
4624
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004625 case 227:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004626#line 2114 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004627 {
4628 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00004629 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004630 ;}
4631 break;
4632
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004633 case 228:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004634#line 2119 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004635 { // A reference to a direct constant
4636 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004637 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004638 ;}
4639 break;
4640
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004641 case 229:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004642#line 2123 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004643 {
4644 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Reid Spencer61c83e02006-08-18 08:43:06 +00004645 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004646 ;}
4647 break;
4648
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004649 case 230:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004650#line 2127 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004651 { // Perhaps it's an FP constant?
4652 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004653 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004654 ;}
4655 break;
4656
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004657 case 231:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004658#line 2131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004659 {
4660 (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
Reid Spencer61c83e02006-08-18 08:43:06 +00004661 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004662 ;}
4663 break;
4664
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004665 case 232:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004666#line 2135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004667 {
4668 (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
Reid Spencer61c83e02006-08-18 08:43:06 +00004669 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004670 ;}
4671 break;
4672
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004673 case 233:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004674#line 2139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004675 {
4676 (yyval.ValIDVal) = ValID::createNull();
Reid Spencer61c83e02006-08-18 08:43:06 +00004677 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004678 ;}
4679 break;
4680
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004681 case 234:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004682#line 2143 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004683 {
4684 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00004685 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004686 ;}
4687 break;
4688
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004689 case 235:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004690#line 2147 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004691 { // A vector zero constant.
4692 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004693 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004694 ;}
4695 break;
4696
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004697 case 236:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004698#line 2151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004699 { // Nonempty unsized packed vector
Reid Spencera132e042006-12-03 05:46:11 +00004700 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
Reid Spencer3822ff52006-11-08 06:47:33 +00004701 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004702
4703 PackedType* pt = PackedType::get(ETy, NumElements);
4704 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00004705 HandleUpRefs(
4706 PackedType::get(
4707 ETy,
4708 NumElements)
4709 )
4710 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00004711
4712 // Verify all elements are correct type!
Reid Spencer3822ff52006-11-08 06:47:33 +00004713 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
Reid Spencera132e042006-12-03 05:46:11 +00004714 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00004715 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00004716 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencera132e042006-12-03 05:46:11 +00004717 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004718 }
4719
Reid Spencera132e042006-12-03 05:46:11 +00004720 (yyval.ValIDVal) = ValID::create(ConstantPacked::get(pt, *(yyvsp[-1].ConstVector)));
Reid Spencer3822ff52006-11-08 06:47:33 +00004721 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer61c83e02006-08-18 08:43:06 +00004722 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004723 ;}
4724 break;
Reid Spencer21be8652006-10-22 07:03:43 +00004725
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004726 case 237:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004727#line 2176 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004728 {
Reid Spencera132e042006-12-03 05:46:11 +00004729 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004730 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004731 ;}
4732 break;
4733
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004734 case 238:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004735#line 2180 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004736 {
4737 char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
4738 std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
4739 End = UnEscapeLexed((yyvsp[0].StrVal), true);
4740 std::string Constraints = std::string((yyvsp[0].StrVal), End);
4741 (yyval.ValIDVal) = ValID::createInlineAsm(AsmStr, Constraints, (yyvsp[-3].BoolVal));
4742 free((yyvsp[-2].StrVal));
4743 free((yyvsp[0].StrVal));
Reid Spencer21be8652006-10-22 07:03:43 +00004744 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004745 ;}
4746 break;
4747
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004748 case 239:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004749#line 2194 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004750 { // Is it an integer reference...?
4751 (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
4752 CHECK_FOR_ERROR
4753 ;}
4754 break;
4755
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004756 case 240:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004757#line 2198 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004758 { // Is it a named reference...?
4759 (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
4760 CHECK_FOR_ERROR
4761 ;}
4762 break;
4763
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004764 case 243:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004765#line 2210 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004766 {
Reid Spencera132e042006-12-03 05:46:11 +00004767 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004768 CHECK_FOR_ERROR
4769 ;}
4770 break;
4771
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004772 case 244:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004773#line 2215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004774 {
4775 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4776 CHECK_FOR_ERROR
4777 ;}
4778 break;
4779
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004780 case 245:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004781#line 2219 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004782 { // Do not allow functions with 0 basic blocks
4783 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
4784 CHECK_FOR_ERROR
4785 ;}
4786 break;
4787
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004788 case 246:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004789#line 2228 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004790 {
4791 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
4792 CHECK_FOR_ERROR
4793 InsertValue((yyvsp[0].TermInstVal));
4794
4795 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
4796 InsertValue((yyvsp[-2].BasicBlockVal));
4797 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
4798 CHECK_FOR_ERROR
4799 ;}
4800 break;
4801
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004802 case 247:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004803#line 2239 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004804 {
Reid Spencer3da59db2006-11-27 01:05:10 +00004805 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
4806 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4807 if (CI2->getParent() == 0)
4808 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
Reid Spencer3822ff52006-11-08 06:47:33 +00004809 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
4810 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
4811 CHECK_FOR_ERROR
4812 ;}
4813 break;
4814
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004815 case 248:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004816#line 2248 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004817 {
4818 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004819 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004820
4821 // Make sure to move the basic block to the correct location in the
4822 // function, instead of leaving it inserted wherever it was first
4823 // referenced.
4824 Function::BasicBlockListType &BBL =
4825 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004826 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004827 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004828 ;}
4829 break;
4830
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004831 case 249:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004832#line 2260 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004833 {
4834 (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
Reid Spencer5b7e7532006-09-28 19:28:24 +00004835 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004836
4837 // Make sure to move the basic block to the correct location in the
4838 // function, instead of leaving it inserted wherever it was first
4839 // referenced.
4840 Function::BasicBlockListType &BBL =
4841 CurFun.CurrentFunction->getBasicBlockList();
Reid Spencer3822ff52006-11-08 06:47:33 +00004842 BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00004843 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004844 ;}
4845 break;
Reid Spencer61c83e02006-08-18 08:43:06 +00004846
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004847 case 250:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004848#line 2273 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004849 { // Return with a result...
Reid Spencera132e042006-12-03 05:46:11 +00004850 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004851 CHECK_FOR_ERROR
4852 ;}
4853 break;
4854
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004855 case 251:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004856#line 2277 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004857 { // Return with no result...
4858 (yyval.TermInstVal) = new ReturnInst();
4859 CHECK_FOR_ERROR
4860 ;}
4861 break;
4862
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004863 case 252:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004864#line 2281 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004865 { // Unconditional Branch...
4866 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
4867 CHECK_FOR_ERROR
4868 (yyval.TermInstVal) = new BranchInst(tmpBB);
4869 ;}
4870 break;
4871
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004872 case 253:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004873#line 2286 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004874 {
4875 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
4876 CHECK_FOR_ERROR
4877 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
4878 CHECK_FOR_ERROR
4879 Value* tmpVal = getVal(Type::BoolTy, (yyvsp[-6].ValIDVal));
4880 CHECK_FOR_ERROR
4881 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4882 ;}
4883 break;
4884
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004885 case 254:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004886#line 2295 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004887 {
Reid Spencera132e042006-12-03 05:46:11 +00004888 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
Reid Spencer3822ff52006-11-08 06:47:33 +00004889 CHECK_FOR_ERROR
4890 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
4891 CHECK_FOR_ERROR
4892 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
4893 (yyval.TermInstVal) = S;
4894
4895 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
4896 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004897 for (; I != E; ++I) {
4898 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4899 S->addCase(CI, I->second);
4900 else
Reid Spencer61c83e02006-08-18 08:43:06 +00004901 GEN_ERROR("Switch case is constant, but not a simple integer!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004902 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004903 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00004904 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004905 ;}
4906 break;
4907
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004908 case 255:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004909#line 2314 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004910 {
Reid Spencera132e042006-12-03 05:46:11 +00004911 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004912 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004913 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004914 CHECK_FOR_ERROR
4915 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencer3822ff52006-11-08 06:47:33 +00004916 (yyval.TermInstVal) = S;
Reid Spencer61c83e02006-08-18 08:43:06 +00004917 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004918 ;}
4919 break;
4920
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004921 case 256:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004922#line 2324 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004923 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00004924 const PointerType *PFTy;
4925 const FunctionType *Ty;
4926
Reid Spencera132e042006-12-03 05:46:11 +00004927 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00004928 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4929 // Pull out the types of all of the arguments...
4930 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00004931 if ((yyvsp[-7].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00004932 for (std::vector<Value*>::iterator I = (yyvsp[-7].ValueList)->begin(), E = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004933 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00004934 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004935 }
4936
4937 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
4938 if (isVarArg) ParamTypes.pop_back();
4939
Reid Spencera132e042006-12-03 05:46:11 +00004940 Ty = FunctionType::get((yyvsp[-10].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004941 PFTy = PointerType::get(Ty);
4942 }
4943
Reid Spencer3822ff52006-11-08 06:47:33 +00004944 Value *V = getVal(PFTy, (yyvsp[-9].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004945 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004946 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004947 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004948 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004949 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004950
4951 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00004952 if (!(yyvsp[-7].ValueList)) { // Has no arguments?
4953 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004954 } else { // Has arguments?
4955 // Loop through FunctionType's arguments and ensure they are specified
4956 // correctly!
4957 //
4958 FunctionType::param_iterator I = Ty->param_begin();
4959 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00004960 std::vector<Value*>::iterator ArgI = (yyvsp[-7].ValueList)->begin(), ArgE = (yyvsp[-7].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004961
Reid Spencera132e042006-12-03 05:46:11 +00004962 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
4963 if ((*ArgI)->getType() != *I)
4964 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
4965 (*I)->getDescription() + "'!");
4966
4967 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
4968 GEN_ERROR("Invalid number of parameters detected!");
4969
4970 (yyval.TermInstVal) = new InvokeInst(V, Normal, Except, *(yyvsp[-7].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004971 }
Reid Spencer3822ff52006-11-08 06:47:33 +00004972 cast<InvokeInst>((yyval.TermInstVal))->setCallingConv((yyvsp[-11].UIntVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004973
Reid Spencera132e042006-12-03 05:46:11 +00004974 delete (yyvsp[-10].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00004975 delete (yyvsp[-7].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00004976 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004977 ;}
4978 break;
4979
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004980 case 257:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004981#line 2379 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004982 {
4983 (yyval.TermInstVal) = new UnwindInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004984 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004985 ;}
4986 break;
4987
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004988 case 258:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004989#line 2383 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004990 {
4991 (yyval.TermInstVal) = new UnreachableInst();
Reid Spencer61c83e02006-08-18 08:43:06 +00004992 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00004993 ;}
4994 break;
4995
Reid Spencer6e18b7d2006-12-03 06:59:29 +00004996 case 259:
Reid Spencer13cf7b62006-12-03 16:20:14 +00004997#line 2390 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00004998 {
4999 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
Reid Spencera132e042006-12-03 05:46:11 +00005000 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005001 CHECK_FOR_ERROR
Reid Spencer61c83e02006-08-18 08:43:06 +00005002 if (V == 0)
5003 GEN_ERROR("May only switch on a constant pool value!");
5004
Reid Spencer3822ff52006-11-08 06:47:33 +00005005 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005006 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005007 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5008 ;}
5009 break;
5010
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005011 case 260:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005012#line 2401 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005013 {
5014 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005015 Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005016 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005017
5018 if (V == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005019 GEN_ERROR("May only switch on a constant pool value!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005020
Reid Spencer3822ff52006-11-08 06:47:33 +00005021 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005022 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005023 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5024 ;}
5025 break;
5026
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005027 case 261:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005028#line 2414 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005029 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005030 // Is this definition named?? if so, assign the name...
Reid Spencer3822ff52006-11-08 06:47:33 +00005031 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005032 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005033 InsertValue((yyvsp[0].InstVal));
5034 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005035 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005036;}
5037 break;
5038
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005039 case 262:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005040#line 2423 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005041 { // Used for PHI nodes
5042 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
Reid Spencera132e042006-12-03 05:46:11 +00005043 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005044 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005045 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005046 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005047 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
Reid Spencera132e042006-12-03 05:46:11 +00005048 delete (yyvsp[-5].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005049 ;}
5050 break;
5051
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005052 case 263:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005053#line 2432 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005054 {
5055 (yyval.PHIList) = (yyvsp[-6].PHIList);
5056 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005057 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005058 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005059 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005060 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5061 ;}
5062 break;
5063
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005064 case 264:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005065#line 2442 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005066 { // Used for call statements, and memory insts...
Reid Spencera132e042006-12-03 05:46:11 +00005067 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer3822ff52006-11-08 06:47:33 +00005068 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
5069 ;}
5070 break;
5071
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005072 case 265:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005073#line 2446 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005074 {
5075 (yyval.ValueList) = (yyvsp[-2].ValueList);
5076 (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005077 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005078 ;}
5079 break;
5080
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005081 case 267:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005082#line 2453 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005083 { (yyval.ValueList) = 0; ;}
Reid Spencer861d9d62006-11-28 07:29:44 +00005084 break;
5085
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005086 case 268:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005087#line 2455 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005088 {
5089 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005090 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005091 ;}
5092 break;
5093
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005094 case 269:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005095#line 2459 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005096 {
5097 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005098 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005099 ;}
5100 break;
5101
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005102 case 270:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005103#line 2464 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005104 {
Reid Spencera132e042006-12-03 05:46:11 +00005105 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5106 !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005107 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005108 "Arithmetic operator requires integer, FP, or packed operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005109 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()) &&
5110 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5111 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5112 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Reid Spencer3ed469c2006-11-02 20:25:50 +00005113 GEN_ERROR("U/S/FRem not supported on packed types!");
Reid Spencera132e042006-12-03 05:46:11 +00005114 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005115 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005116 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005117 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005118 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005119 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005120 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005121 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005122 ;}
5123 break;
5124
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005125 case 271:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005126#line 2483 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005127 {
Reid Spencera132e042006-12-03 05:46:11 +00005128 if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
5129 if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
5130 !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
Reid Spencer61c83e02006-08-18 08:43:06 +00005131 GEN_ERROR("Logical operator requires integral operands!");
Chris Lattner524a1312005-12-21 18:31:50 +00005132 }
Reid Spencera132e042006-12-03 05:46:11 +00005133 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005134 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005135 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005136 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005137 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005138 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005139 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005140 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005141 ;}
5142 break;
5143
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005144 case 272:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005145#line 2498 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005146 {
Reid Spencera132e042006-12-03 05:46:11 +00005147 if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
Reid Spencer61c83e02006-08-18 08:43:06 +00005148 GEN_ERROR(
Reid Spencer68a24bd2005-08-27 18:50:39 +00005149 "PackedTypes currently not supported in setcc instructions!");
5150 }
Reid Spencera132e042006-12-03 05:46:11 +00005151 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005152 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005153 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005154 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005155 (yyval.InstVal) = new SetCondInst((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
Reid Spencer3822ff52006-11-08 06:47:33 +00005156 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005157 GEN_ERROR("binary operator returned null!");
Reid Spencera132e042006-12-03 05:46:11 +00005158 delete (yyvsp[-3].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005159 ;}
5160 break;
5161
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005162 case 273:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005163#line 2512 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005164 {
5165 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5166 GEN_ERROR("Packed types not supported by icmp instruction");
5167 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5168 CHECK_FOR_ERROR
5169 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5170 CHECK_FOR_ERROR
5171 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5172 if ((yyval.InstVal) == 0)
5173 GEN_ERROR("icmp operator returned null!");
5174 ;}
5175 break;
5176
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005177 case 274:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005178#line 2523 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencera132e042006-12-03 05:46:11 +00005179 {
5180 if (isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
5181 GEN_ERROR("Packed types not supported by fcmp instruction");
5182 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
5183 CHECK_FOR_ERROR
5184 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
5185 CHECK_FOR_ERROR
5186 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5187 if ((yyval.InstVal) == 0)
5188 GEN_ERROR("fcmp operator returned null!");
5189 ;}
5190 break;
5191
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005192 case 275:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005193#line 2534 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005194 {
Reid Spencer481169e2006-12-01 00:33:46 +00005195 llvm_cerr << "WARNING: Use of eliminated 'not' instruction:"
Reid Spencer68a24bd2005-08-27 18:50:39 +00005196 << " Replacing with 'xor'.\n";
5197
Reid Spencera132e042006-12-03 05:46:11 +00005198 Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005199 if (Ones == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005200 GEN_ERROR("Expected integral type for not instruction!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005201
Reid Spencera132e042006-12-03 05:46:11 +00005202 (yyval.InstVal) = BinaryOperator::create(Instruction::Xor, (yyvsp[0].ValueVal), Ones);
Reid Spencer3822ff52006-11-08 06:47:33 +00005203 if ((yyval.InstVal) == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005204 GEN_ERROR("Could not create a xor instruction!");
5205 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005206 ;}
5207 break;
5208
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005209 case 276:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005210#line 2547 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005211 {
Reid Spencera132e042006-12-03 05:46:11 +00005212 if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005213 GEN_ERROR("Shift amount must be ubyte!");
Reid Spencera132e042006-12-03 05:46:11 +00005214 if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
Reid Spencer61c83e02006-08-18 08:43:06 +00005215 GEN_ERROR("Shift constant expression requires integer operand!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005216 CHECK_FOR_ERROR;
Reid Spencera132e042006-12-03 05:46:11 +00005217 (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005218 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005219 ;}
5220 break;
5221
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005222 case 277:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005223#line 2556 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005224 {
Reid Spencera132e042006-12-03 05:46:11 +00005225 Value* Val = (yyvsp[-2].ValueVal);
5226 const Type* Ty = (yyvsp[0].TypeVal)->get();
Reid Spencer3da59db2006-11-27 01:05:10 +00005227 if (!Val->getType()->isFirstClassType())
5228 GEN_ERROR("cast from a non-primitive type: '" +
5229 Val->getType()->getDescription() + "'!");
5230 if (!Ty->isFirstClassType())
5231 GEN_ERROR("cast to a non-primitive type: '" + Ty->getDescription() +"'!");
Reid Spencera132e042006-12-03 05:46:11 +00005232 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), (yyvsp[-2].ValueVal), (yyvsp[0].TypeVal)->get());
5233 delete (yyvsp[0].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005234 ;}
5235 break;
5236
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005237 case 278:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005238#line 2567 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005239 {
Reid Spencera132e042006-12-03 05:46:11 +00005240 if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005241 GEN_ERROR("select condition must be boolean!");
Reid Spencera132e042006-12-03 05:46:11 +00005242 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005243 GEN_ERROR("select value types should match!");
Reid Spencera132e042006-12-03 05:46:11 +00005244 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005245 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005246 ;}
5247 break;
5248
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005249 case 279:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005250#line 2575 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005251 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005252 NewVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005253 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5254 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005255 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005256 ;}
5257 break;
5258
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005259 case 280:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005260#line 2581 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005261 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005262 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005263 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005264 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005265 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005266
5267 //b = vaarg a, t ->
5268 //foo = alloca 1 of t
5269 //bar = vacopy a
5270 //store bar -> foo
5271 //b = vaarg foo, t
5272 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
5273 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005274 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005275 CurBB->getInstList().push_back(bar);
5276 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005277 (yyval.InstVal) = new VAArgInst(foo, *(yyvsp[0].TypeVal));
5278 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005279 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005280 ;}
5281 break;
5282
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005283 case 281:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005284#line 2601 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005285 {
Reid Spencer68a24bd2005-08-27 18:50:39 +00005286 ObsoleteVarArgs = true;
Reid Spencera132e042006-12-03 05:46:11 +00005287 const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005288 Function* NF = CurModule.CurrentModule->
Jeff Cohen66c5fd62005-10-23 04:37:20 +00005289 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005290
5291 //b = vanext a, t ->
5292 //foo = alloca 1 of t
5293 //bar = vacopy a
5294 //store bar -> foo
5295 //tmp = vaarg foo, t
5296 //b = load foo
5297 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
5298 CurBB->getInstList().push_back(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005299 CallInst* bar = new CallInst(NF, (yyvsp[-2].ValueVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005300 CurBB->getInstList().push_back(bar);
5301 CurBB->getInstList().push_back(new StoreInst(bar, foo));
Reid Spencera132e042006-12-03 05:46:11 +00005302 Instruction* tmp = new VAArgInst(foo, *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005303 CurBB->getInstList().push_back(tmp);
Reid Spencer3822ff52006-11-08 06:47:33 +00005304 (yyval.InstVal) = new LoadInst(foo);
Reid Spencera132e042006-12-03 05:46:11 +00005305 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005306 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005307 ;}
5308 break;
5309
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005310 case 282:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005311#line 2624 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005312 {
Reid Spencera132e042006-12-03 05:46:11 +00005313 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005314 GEN_ERROR("Invalid extractelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005315 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005316 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005317 ;}
5318 break;
5319
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005320 case 283:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005321#line 2630 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005322 {
Reid Spencera132e042006-12-03 05:46:11 +00005323 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005324 GEN_ERROR("Invalid insertelement operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005325 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005326 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005327 ;}
5328 break;
5329
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005330 case 284:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005331#line 2636 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005332 {
Reid Spencera132e042006-12-03 05:46:11 +00005333 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Reid Spencer61c83e02006-08-18 08:43:06 +00005334 GEN_ERROR("Invalid shufflevector operands!");
Reid Spencera132e042006-12-03 05:46:11 +00005335 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005336 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005337 ;}
5338 break;
5339
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005340 case 285:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005341#line 2642 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005342 {
5343 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005344 if (!Ty->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005345 GEN_ERROR("PHI node operands must be of first class type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005346 (yyval.InstVal) = new PHINode(Ty);
5347 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5348 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5349 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Reid Spencer61c83e02006-08-18 08:43:06 +00005350 GEN_ERROR("All elements of a PHI node must be of the same type!");
Reid Spencer3822ff52006-11-08 06:47:33 +00005351 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5352 (yyvsp[0].PHIList)->pop_front();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005353 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005354 delete (yyvsp[0].PHIList); // Free the list...
Reid Spencer61c83e02006-08-18 08:43:06 +00005355 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005356 ;}
5357 break;
5358
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005359 case 286:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005360#line 2657 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005361 {
Reid Spencer3da59db2006-11-27 01:05:10 +00005362 const PointerType *PFTy = 0;
5363 const FunctionType *Ty = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005364
Reid Spencera132e042006-12-03 05:46:11 +00005365 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005366 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5367 // Pull out the types of all of the arguments...
5368 std::vector<const Type*> ParamTypes;
Reid Spencer3822ff52006-11-08 06:47:33 +00005369 if ((yyvsp[-1].ValueList)) {
Reid Spencera132e042006-12-03 05:46:11 +00005370 for (std::vector<Value*>::iterator I = (yyvsp[-1].ValueList)->begin(), E = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005371 I != E; ++I)
Reid Spencera132e042006-12-03 05:46:11 +00005372 ParamTypes.push_back((*I)->getType());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005373 }
5374
5375 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5376 if (isVarArg) ParamTypes.pop_back();
5377
Reid Spencera132e042006-12-03 05:46:11 +00005378 if (!(*(yyvsp[-4].TypeVal))->isFirstClassType() && *(yyvsp[-4].TypeVal) != Type::VoidTy)
Reid Spencer61c83e02006-08-18 08:43:06 +00005379 GEN_ERROR("LLVM functions cannot return aggregate types!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005380
Reid Spencera132e042006-12-03 05:46:11 +00005381 Ty = FunctionType::get((yyvsp[-4].TypeVal)->get(), ParamTypes, isVarArg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005382 PFTy = PointerType::get(Ty);
5383 }
5384
Reid Spencer3822ff52006-11-08 06:47:33 +00005385 Value *V = getVal(PFTy, (yyvsp[-3].ValIDVal)); // Get the function we're calling...
Reid Spencer5b7e7532006-09-28 19:28:24 +00005386 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005387
5388 // Create the call node...
Reid Spencer3822ff52006-11-08 06:47:33 +00005389 if (!(yyvsp[-1].ValueList)) { // Has no arguments?
Reid Spencer68a24bd2005-08-27 18:50:39 +00005390 // Make sure no arguments is a good thing!
5391 if (Ty->getNumParams() != 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00005392 GEN_ERROR("No arguments passed to a function that "
Reid Spencer68a24bd2005-08-27 18:50:39 +00005393 "expects arguments!");
5394
Reid Spencer3822ff52006-11-08 06:47:33 +00005395 (yyval.InstVal) = new CallInst(V, std::vector<Value*>());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005396 } else { // Has arguments?
5397 // Loop through FunctionType's arguments and ensure they are specified
5398 // correctly!
5399 //
5400 FunctionType::param_iterator I = Ty->param_begin();
5401 FunctionType::param_iterator E = Ty->param_end();
Reid Spencera132e042006-12-03 05:46:11 +00005402 std::vector<Value*>::iterator ArgI = (yyvsp[-1].ValueList)->begin(), ArgE = (yyvsp[-1].ValueList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005403
Reid Spencera132e042006-12-03 05:46:11 +00005404 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5405 if ((*ArgI)->getType() != *I)
5406 GEN_ERROR("Parameter " +(*ArgI)->getName()+ " is not of type '" +
5407 (*I)->getDescription() + "'!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005408
5409 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005410 GEN_ERROR("Invalid number of parameters detected!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005411
Reid Spencera132e042006-12-03 05:46:11 +00005412 (yyval.InstVal) = new CallInst(V, *(yyvsp[-1].ValueList));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005413 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005414 cast<CallInst>((yyval.InstVal))->setTailCall((yyvsp[-6].BoolVal));
5415 cast<CallInst>((yyval.InstVal))->setCallingConv((yyvsp[-5].UIntVal));
Reid Spencera132e042006-12-03 05:46:11 +00005416 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005417 delete (yyvsp[-1].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005418 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005419 ;}
5420 break;
5421
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005422 case 287:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005423#line 2716 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005424 {
5425 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005426 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005427 ;}
5428 break;
5429
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005430 case 288:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005431#line 2723 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005432 {
5433 (yyval.ValueList) = (yyvsp[0].ValueList);
Reid Spencer61c83e02006-08-18 08:43:06 +00005434 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005435 ;}
5436 break;
5437
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005438 case 289:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005439#line 2726 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005440 {
Reid Spencera132e042006-12-03 05:46:11 +00005441 (yyval.ValueList) = new std::vector<Value*>();
Reid Spencer61c83e02006-08-18 08:43:06 +00005442 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005443 ;}
5444 break;
5445
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005446 case 290:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005447#line 2731 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005448 {
5449 (yyval.BoolVal) = true;
Reid Spencer61c83e02006-08-18 08:43:06 +00005450 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005451 ;}
5452 break;
5453
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005454 case 291:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005455#line 2735 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005456 {
5457 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005458 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005459 ;}
5460 break;
5461
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005462 case 292:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005463#line 2742 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005464 {
Reid Spencera132e042006-12-03 05:46:11 +00005465 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5466 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005467 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005468 ;}
5469 break;
5470
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005471 case 293:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005472#line 2747 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005473 {
Reid Spencera132e042006-12-03 05:46:11 +00005474 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005475 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005476 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5477 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005478 ;}
5479 break;
5480
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005481 case 294:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005482#line 2753 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005483 {
Reid Spencera132e042006-12-03 05:46:11 +00005484 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5485 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005486 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005487 ;}
5488 break;
5489
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005490 case 295:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005491#line 2758 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005492 {
Reid Spencera132e042006-12-03 05:46:11 +00005493 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005494 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005495 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5496 delete (yyvsp[-4].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005497 ;}
5498 break;
5499
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005500 case 296:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005501#line 2764 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005502 {
Reid Spencera132e042006-12-03 05:46:11 +00005503 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005504 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencera132e042006-12-03 05:46:11 +00005505 (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
5506 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005507 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005508 ;}
5509 break;
5510
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005511 case 297:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005512#line 2772 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005513 {
Reid Spencera132e042006-12-03 05:46:11 +00005514 if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005515 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005516 (*(yyvsp[-1].TypeVal))->getDescription());
5517 if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005518 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005519 (*(yyvsp[-1].TypeVal))->getDescription());
5520 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005521 CHECK_FOR_ERROR
Reid Spencer3822ff52006-11-08 06:47:33 +00005522 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
Reid Spencera132e042006-12-03 05:46:11 +00005523 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005524 ;}
5525 break;
5526
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005527 case 298:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005528#line 2784 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005529 {
Reid Spencera132e042006-12-03 05:46:11 +00005530 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005531 if (!PT)
Reid Spencer61c83e02006-08-18 08:43:06 +00005532 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencera132e042006-12-03 05:46:11 +00005533 (*(yyvsp[-1].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00005534 const Type *ElTy = PT->getElementType();
Reid Spencera132e042006-12-03 05:46:11 +00005535 if (ElTy != (yyvsp[-3].ValueVal)->getType())
5536 GEN_ERROR("Can't store '" + (yyvsp[-3].ValueVal)->getType()->getDescription() +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005537 "' into space of type '" + ElTy->getDescription() + "'!");
5538
Reid Spencera132e042006-12-03 05:46:11 +00005539 Value* tmpVal = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005540 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005541 (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
5542 delete (yyvsp[-1].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005543 ;}
5544 break;
5545
Reid Spencer6e18b7d2006-12-03 06:59:29 +00005546 case 299:
Reid Spencer13cf7b62006-12-03 16:20:14 +00005547#line 2799 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer3822ff52006-11-08 06:47:33 +00005548 {
Reid Spencera132e042006-12-03 05:46:11 +00005549 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencer61c83e02006-08-18 08:43:06 +00005550 GEN_ERROR("getelementptr insn requires pointer operand!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005551
Reid Spencera132e042006-12-03 05:46:11 +00005552 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte struct
5553 // indices to uint struct indices for compatibility.
5554 generic_gep_type_iterator<std::vector<Value*>::iterator>
5555 GTI = gep_type_begin((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end()),
5556 GTE = gep_type_end((yyvsp[-2].TypeVal)->get(), (yyvsp[0].ValueList)->begin(), (yyvsp[0].ValueList)->end());
5557 for (unsigned i = 0, e = (yyvsp[0].ValueList)->size(); i != e && GTI != GTE; ++i, ++GTI)
5558 if (isa<StructType>(*GTI)) // Only change struct indices
5559 if (ConstantInt *CUI = dyn_cast<ConstantInt>((*(yyvsp[0].ValueList))[i]))
5560 if (CUI->getType() == Type::UByteTy)
5561 (*(yyvsp[0].ValueList))[i] = ConstantExpr::getCast(CUI, Type::UIntTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005562
Reid Spencera132e042006-12-03 05:46:11 +00005563 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), *(yyvsp[0].ValueList), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005564 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencera132e042006-12-03 05:46:11 +00005565 (*(yyvsp[-2].TypeVal))->getDescription()+ "'!");
5566 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005567 CHECK_FOR_ERROR
Reid Spencera132e042006-12-03 05:46:11 +00005568 (yyval.InstVal) = new GetElementPtrInst(tmpVal, *(yyvsp[0].ValueList));
5569 delete (yyvsp[-2].TypeVal);
Reid Spencer3822ff52006-11-08 06:47:33 +00005570 delete (yyvsp[0].ValueList);
5571 ;}
5572 break;
5573
5574
5575 default: break;
5576 }
5577
5578/* Line 1126 of yacc.c. */
Reid Spencer13cf7b62006-12-03 16:20:14 +00005579#line 5580 "llvmAsmParser.tab.c"
Reid Spencer5b7e7532006-09-28 19:28:24 +00005580
5581 yyvsp -= yylen;
5582 yyssp -= yylen;
5583
Reid Spencer3822ff52006-11-08 06:47:33 +00005584
5585 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005586
5587 *++yyvsp = yyval;
5588
5589
Reid Spencer3822ff52006-11-08 06:47:33 +00005590 /* Now `shift' the result of the reduction. Determine what state
5591 that goes to, based on the state we popped back to and the rule
5592 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005593
5594 yyn = yyr1[yyn];
5595
Reid Spencer3822ff52006-11-08 06:47:33 +00005596 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5597 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005598 yystate = yytable[yystate];
5599 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005600 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005601
5602 goto yynewstate;
5603
5604
Reid Spencer3822ff52006-11-08 06:47:33 +00005605/*------------------------------------.
5606| yyerrlab -- here on detecting error |
5607`------------------------------------*/
5608yyerrlab:
5609 /* If not already recovering from an error, report this error. */
5610 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005611 {
5612 ++yynerrs;
Reid Spencer3822ff52006-11-08 06:47:33 +00005613#if YYERROR_VERBOSE
Reid Spencer5b7e7532006-09-28 19:28:24 +00005614 yyn = yypact[yystate];
Chris Lattner224f84f2006-08-18 17:34:45 +00005615
Reid Spencer3822ff52006-11-08 06:47:33 +00005616 if (YYPACT_NINF < yyn && yyn < YYLAST)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005617 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005618 int yytype = YYTRANSLATE (yychar);
5619 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5620 YYSIZE_T yysize = yysize0;
5621 YYSIZE_T yysize1;
5622 int yysize_overflow = 0;
5623 char *yymsg = 0;
5624# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5625 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5626 int yyx;
Reid Spencer5b7e7532006-09-28 19:28:24 +00005627
Reid Spencer3822ff52006-11-08 06:47:33 +00005628#if 0
5629 /* This is so xgettext sees the translatable formats that are
5630 constructed on the fly. */
5631 YY_("syntax error, unexpected %s");
5632 YY_("syntax error, unexpected %s, expecting %s");
5633 YY_("syntax error, unexpected %s, expecting %s or %s");
5634 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5635 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5636#endif
5637 char *yyfmt;
5638 char const *yyf;
5639 static char const yyunexpected[] = "syntax error, unexpected %s";
5640 static char const yyexpecting[] = ", expecting %s";
5641 static char const yyor[] = " or %s";
5642 char yyformat[sizeof yyunexpected
5643 + sizeof yyexpecting - 1
5644 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5645 * (sizeof yyor - 1))];
5646 char const *yyprefix = yyexpecting;
5647
5648 /* Start YYX at -YYN if negative to avoid negative indexes in
5649 YYCHECK. */
5650 int yyxbegin = yyn < 0 ? -yyn : 0;
5651
5652 /* Stay within bounds of both yycheck and yytname. */
5653 int yychecklim = YYLAST - yyn;
5654 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5655 int yycount = 1;
5656
5657 yyarg[0] = yytname[yytype];
5658 yyfmt = yystpcpy (yyformat, yyunexpected);
5659
5660 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5661 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5662 {
5663 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5664 {
5665 yycount = 1;
5666 yysize = yysize0;
5667 yyformat[sizeof yyunexpected - 1] = '\0';
5668 break;
5669 }
5670 yyarg[yycount++] = yytname[yyx];
5671 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5672 yysize_overflow |= yysize1 < yysize;
5673 yysize = yysize1;
5674 yyfmt = yystpcpy (yyfmt, yyprefix);
5675 yyprefix = yyor;
5676 }
5677
5678 yyf = YY_(yyformat);
5679 yysize1 = yysize + yystrlen (yyf);
5680 yysize_overflow |= yysize1 < yysize;
5681 yysize = yysize1;
5682
5683 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5684 yymsg = (char *) YYSTACK_ALLOC (yysize);
5685 if (yymsg)
Reid Spencer5b7e7532006-09-28 19:28:24 +00005686 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005687 /* Avoid sprintf, as that infringes on the user's name space.
5688 Don't have undefined behavior even if the translation
5689 produced a string with the wrong number of "%s"s. */
5690 char *yyp = yymsg;
5691 int yyi = 0;
5692 while ((*yyp = *yyf))
Reid Spencer5b7e7532006-09-28 19:28:24 +00005693 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005694 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5695 {
5696 yyp += yytnamerr (yyp, yyarg[yyi++]);
5697 yyf += 2;
5698 }
5699 else
5700 {
5701 yyp++;
5702 yyf++;
5703 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005704 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005705 yyerror (yymsg);
5706 YYSTACK_FREE (yymsg);
Reid Spencer5b7e7532006-09-28 19:28:24 +00005707 }
5708 else
Reid Spencer3822ff52006-11-08 06:47:33 +00005709 {
5710 yyerror (YY_("syntax error"));
5711 goto yyexhaustedlab;
5712 }
Reid Spencer5b7e7532006-09-28 19:28:24 +00005713 }
5714 else
5715#endif /* YYERROR_VERBOSE */
Reid Spencer3822ff52006-11-08 06:47:33 +00005716 yyerror (YY_("syntax error"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00005717 }
5718
Reid Spencer3822ff52006-11-08 06:47:33 +00005719
Reid Spencer68a24bd2005-08-27 18:50:39 +00005720
5721 if (yyerrstatus == 3)
5722 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005723 /* If just tried and failed to reuse look-ahead token after an
5724 error, discard it. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005725
Reid Spencer3822ff52006-11-08 06:47:33 +00005726 if (yychar <= YYEOF)
5727 {
5728 /* Return failure if at end of input. */
5729 if (yychar == YYEOF)
5730 YYABORT;
5731 }
5732 else
5733 {
5734 yydestruct ("Error: discarding", yytoken, &yylval);
5735 yychar = YYEMPTY;
5736 }
5737 }
5738
5739 /* Else will try to reuse look-ahead token after shifting the error
5740 token. */
5741 goto yyerrlab1;
5742
5743
5744/*---------------------------------------------------.
5745| yyerrorlab -- error raised explicitly by YYERROR. |
5746`---------------------------------------------------*/
5747yyerrorlab:
5748
5749 /* Pacify compilers like GCC when the user code never invokes
5750 YYERROR and the label yyerrorlab therefore never appears in user
5751 code. */
5752 if (0)
5753 goto yyerrorlab;
5754
5755yyvsp -= yylen;
5756 yyssp -= yylen;
5757 yystate = *yyssp;
5758 goto yyerrlab1;
5759
5760
5761/*-------------------------------------------------------------.
5762| yyerrlab1 -- common code for both syntax error and YYERROR. |
5763`-------------------------------------------------------------*/
5764yyerrlab1:
5765 yyerrstatus = 3; /* Each real token shifted decrements this. */
5766
5767 for (;;)
5768 {
5769 yyn = yypact[yystate];
5770 if (yyn != YYPACT_NINF)
5771 {
5772 yyn += YYTERROR;
5773 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5774 {
5775 yyn = yytable[yyn];
5776 if (0 < yyn)
5777 break;
5778 }
5779 }
5780
5781 /* Pop the current state because it cannot handle the error token. */
5782 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005783 YYABORT;
5784
Chris Lattner8335e842006-01-23 23:05:42 +00005785
Reid Spencer3822ff52006-11-08 06:47:33 +00005786 yydestruct ("Error: popping", yystos[yystate], yyvsp);
5787 YYPOPSTACK;
5788 yystate = *yyssp;
5789 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005790 }
5791
5792 if (yyn == YYFINAL)
5793 YYACCEPT;
5794
Reid Spencer68a24bd2005-08-27 18:50:39 +00005795 *++yyvsp = yylval;
Reid Spencer3822ff52006-11-08 06:47:33 +00005796
5797
5798 /* Shift the error token. */
5799 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005800
5801 yystate = yyn;
5802 goto yynewstate;
5803
Chris Lattnerf49c1762006-11-08 05:58:47 +00005804
Reid Spencer3822ff52006-11-08 06:47:33 +00005805/*-------------------------------------.
5806| yyacceptlab -- YYACCEPT comes here. |
5807`-------------------------------------*/
5808yyacceptlab:
5809 yyresult = 0;
5810 goto yyreturn;
5811
5812/*-----------------------------------.
5813| yyabortlab -- YYABORT comes here. |
5814`-----------------------------------*/
5815yyabortlab:
5816 yyresult = 1;
5817 goto yyreturn;
5818
5819#ifndef yyoverflow
5820/*-------------------------------------------------.
5821| yyexhaustedlab -- memory exhaustion comes here. |
5822`-------------------------------------------------*/
5823yyexhaustedlab:
5824 yyerror (YY_("memory exhausted"));
5825 yyresult = 2;
5826 /* Fall through. */
Chris Lattnerf49c1762006-11-08 05:58:47 +00005827#endif
Reid Spencer3822ff52006-11-08 06:47:33 +00005828
5829yyreturn:
5830 if (yychar != YYEOF && yychar != YYEMPTY)
5831 yydestruct ("Cleanup: discarding lookahead",
5832 yytoken, &yylval);
5833 while (yyssp != yyss)
5834 {
5835 yydestruct ("Cleanup: popping",
5836 yystos[*yyssp], yyvsp);
5837 YYPOPSTACK;
Chris Lattnerf49c1762006-11-08 05:58:47 +00005838 }
Reid Spencer3822ff52006-11-08 06:47:33 +00005839#ifndef yyoverflow
5840 if (yyss != yyssa)
5841 YYSTACK_FREE (yyss);
5842#endif
5843 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00005844}
Reid Spencer3822ff52006-11-08 06:47:33 +00005845
5846
Reid Spencer13cf7b62006-12-03 16:20:14 +00005847#line 2825 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00005848
5849
5850void llvm::GenerateError(const std::string &message, int LineNo) {
5851 if (LineNo == -1) LineNo = llvmAsmlineno;
5852 // TODO: column number in exception
5853 if (TheParseError)
5854 TheParseError->setError(CurFilename, message, LineNo);
5855 TriggerError = 1;
5856}
Reid Spencer68a24bd2005-08-27 18:50:39 +00005857
5858int yyerror(const char *ErrorMsg) {
5859 std::string where
5860 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5861 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5862 std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
5863 if (yychar == YYEMPTY || yychar == 0)
5864 errMsg += "end-of-file.";
5865 else
5866 errMsg += "token: '" + std::string(llvmAsmtext, llvmAsmleng) + "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00005867 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005868 return 0;
5869}
Reid Spencer3822ff52006-11-08 06:47:33 +00005870