#line 2 "limbo.y" #include "limbo.h" #line 5 "limbo.y" typedef union { struct{ Src src; union{ Sym *idval; Long ival; Real rval; }v; }tok; Decl *ids; Node *node; Type *type; Typelist *types; } YYSTYPE; extern int yyerrflag; #ifndef YYMAXDEPTH #define YYMAXDEPTH 150 #endif YYSTYPE yylval; YYSTYPE yyval; #define Landeq 57346 #define Loreq 57347 #define Lxoreq 57348 #define Llsheq 57349 #define Lrsheq 57350 #define Laddeq 57351 #define Lsubeq 57352 #define Lmuleq 57353 #define Ldiveq 57354 #define Lmodeq 57355 #define Lexpeq 57356 #define Ldeclas 57357 #define Lload 57358 #define Loror 57359 #define Landand 57360 #define Lcons 57361 #define Leq 57362 #define Lneq 57363 #define Lleq 57364 #define Lgeq 57365 #define Llsh 57366 #define Lrsh 57367 #define Lexp 57368 #define Lcomm 57369 #define Linc 57370 #define Ldec 57371 #define Lof 57372 #define Lref 57373 #define Lif 57374 #define Lelse 57375 #define Lfn 57376 #define Lexcept 57377 #define Lraises 57378 #define Lmdot 57379 #define Lto 57380 #define Lor 57381 #define Lrconst 57382 #define Lconst 57383 #define Lid 57384 #define Ltid 57385 #define Lsconst 57386 #define Llabs 57387 #define Lnil 57388 #define Llen 57389 #define Lhd 57390 #define Ltl 57391 #define Ltagof 57392 #define Limplement 57393 #define Limport 57394 #define Linclude 57395 #define Lcon 57396 #define Ltype 57397 #define Lmodule 57398 #define Lcyclic 57399 #define Ladt 57400 #define Larray 57401 #define Llist 57402 #define Lchan 57403 #define Lself 57404 #define Ldo 57405 #define Lwhile 57406 #define Lfor 57407 #define Lbreak 57408 #define Lalt 57409 #define Lcase 57410 #define Lpick 57411 #define Lcont 57412 #define Lreturn 57413 #define Lexit 57414 #define Lspawn 57415 #define Lraise 57416 #define Lfix 57417 #define Ldynamic 57418 #define YYEOFCODE 1 #define YYERRCODE 2 #line 1600 "limbo.y" static char *mkfileext(char*, char*, char*); static void usage(void); static int dosym; static int toterrors; static ulong canonnanbits[] = { 0x7fffffff, 0xffffffff}; static char* infile; #define SLASHMOD "/module" static char* getroot(void) { int n; char *e, *l, *s; if((e = getenv("EMU")) != nil){ for(s = e; *e != '\0'; e++){ if(*e == '-' && *(e+1) == 'r' && (e == s || *(e-1) == ' ' || *(e-1) == '\t')){ e += 2; l = strchr(e, ' '); if(l != nil) *l = '\0'; if((n = strlen(e)) > 0){ s = malloc(n+1); strcpy(s, e); return s; } } } } if((e = getenv("ROOT")) != nil) return strdup(e); return nil; } void main(int argc, char *argv[]) { char *s, *ofile, *ext, *root; int i; FPinit(); FPcontrol(0, INVAL|ZDIV|OVFL|UNFL|INEX); canonnan = canontod(canonnanbits); fmtinstall('D', dotconv); fmtinstall('I', instconv); fmtinstall('K', declconv); fmtinstall('k', storeconv); fmtinstall('L', lineconv); fmtinstall('M', mapconv); fmtinstall('n', nodeconv); /* exp structure */ fmtinstall('O', opconv); fmtinstall('g', gfltconv); fmtinstall('Q', etconv); /* src expression with type */ fmtinstall('R', ctypeconv); /* c equivalent type */ fmtinstall('P', ctypeconv); /* c equivalent type - pointer type */ fmtinstall('T', typeconv); /* source style types */ fmtinstall('t', stypeconv); /* structurally descriptive type */ fmtinstall('U', srcconv); fmtinstall('v', expconv); /* src expression */ fmtinstall('V', expconv); /* src expression in '' */ lexinit(); typeinit(); optabinit(); gendis = 1; asmsym = 0; maxerr = 20; ofile = nil; ext = nil; ARGBEGIN{ case 'D': /* * debug flags: * * a alt compilation * A array constructor compilation * b boolean and branch compilation * c case compilation * d function declaration * D descriptor generation * e expression compilation * E addressable expression compilation * f print arguments for compiled functions * F constant folding * g print out globals * m module declaration and type checking * n nil references * s print sizes of output file sections * S type signing * t type checking function bodies * T timing * v global var and constant compilation * x adt verification * Y tuple compilation * z Z bug fixes */ s = ARGF(); while(s && *s) debug[*s++] = 1; break; case 'I': s = ARGF(); if(s == nil) usage(); addinclude(s); break; case 'G': asmsym = 1; break; case 'S': gendis = 0; break; case 'a': emitstub = 1; break; case 'A': emitstub = emitdyn = 1; break; case 'c': mustcompile = 1; break; case 'C': dontcompile = 1; break; case 'e': maxerr = 1000; break; case 'f': isfatal = 1; break; case 'F': newfnptr = 1; break; case 'g': dosym = 1; break; case 'i': dontinline = 1; break; case 'o': ofile = ARGF(); break; case 'O': optims = 1; break; case 's': s = ARGF(); if(s != nil) fixss = atoi(s); break; case 't': emittab = ARGF(); if(emittab == nil) usage(); break; case 'T': emitcode = ARGF(); if(emitcode == nil) usage(); break; case 'd': emitcode = ARGF(); if(emitcode == nil) usage(); emitdyn = 1; break; case 'w': superwarn = dowarn; dowarn = 1; break; case 'x': ext = ARGF(); break; case 'X': signdump = ARGF(); break; case 'y': oldcycles = 1; break; case 'z': arrayz = 1; break; default: usage(); break; }ARGEND if((root = getroot()) != nil){ char *r; r = malloc(strlen(root)+strlen(SLASHMOD)+1); strcpy(r, root); strcat(r, SLASHMOD); addinclude(r); free(root); } else addinclude(INCPATH); if(argc == 0){ usage(); }else if(ofile != nil){ if(argc != 1) usage(); translate(argv[0], ofile, mkfileext(ofile, ".dis", ".sbl")); }else{ if(ext == nil){ ext = ".s"; if(gendis) ext = ".dis"; } for(i = 0; i < argc; i++){ s = strrchr(argv[i], '/'); if(s == nil) s = argv[i]; else s++; if(argc > 1) print("%s:\n", argv[i]); ofile = mkfileext(s, ".b", ext); translate(argv[i], ofile, mkfileext(ofile, ext, ".sbl")); } } if(toterrors) exits("errors"); exits(0); } static void usage(void) { fprint(2, "usage: limbo [-CGSacgwe] [-I incdir] [-o outfile] [-{T|t|d} module] [-D debug] file ...\n"); exits("usage"); } static char* mkfileext(char *file, char *oldext, char *ext) { char *ofile; int n, n2; n = strlen(file); n2 = strlen(oldext); if(n >= n2 && strcmp(&file[n-n2], oldext) == 0) n -= n2; ofile = malloc(n + strlen(ext) + 1); memmove(ofile, file, n); strcpy(ofile+n, ext); return ofile; } void translate(char *in, char *out, char *dbg) { Decl *entry; int doemit; infile = in; outfile = out; symfile = dbg; errors = 0; bins[0] = Bopen(in, OREAD); if(bins[0] == nil){ fprint(2, "can't open %s: %r\n", in); toterrors++; return; } doemit = emitstub || emittab || emitcode; if(!doemit){ bout = Bopen(out, OWRITE); if(bout == nil){ fprint(2, "can't open %s: %r\n", out); toterrors++; Bterm(bins[0]); return; } if(dosym){ bsym = Bopen(dbg, OWRITE); if(bsym == nil) fprint(2, "can't open %s: %r\n", dbg); } } lexstart(in); popscopes(); typestart(); declstart(); yyparse(); entry = typecheck(!doemit); modcom(entry); fns = nil; nfns = 0; descriptors = nil; if(bout != nil) Bterm(bout); if(bsym != nil) Bterm(bsym); toterrors += errors; if(errors && bout != nil) remove(out); if(errors && bsym != nil) remove(dbg); } void trapFPE(unsigned exception[5], int value[2]) { /* can't happen; it's just here to keep FPinit happy. */ USED(exception); USED(value); } static char * win2inf(char *s) { int nt = 0; char *t; if(strlen(s) > 1 && s[1] == ':'){ s[1] = '/'; s++; nt = 1; } for(t = s; *t != '\0'; t++){ if(*t == '\\') *t = '/'; if(nt) *t = tolower(*t); } return s; } static char * cleann(char *s) { char *p, *r, *t; char buf[256]; r = t = malloc(strlen(s)+1); strcpy(t, s); t = win2inf(t); if(*t != '/'){ p = win2inf(getwd(buf, sizeof(buf))); s = malloc(strlen(p)+strlen(t)+2); strcpy(s, p); strcat(s, "/"); strcat(s, t); } else{ s = malloc(strlen(t)+1); strcpy(s, t); } free(r); /* print("cleann: %s\n", p); */ return cleanname(s); } char * srcpath(char *name, int nlen) { int l1, l2; char *r, *srcp, *t; srcp = cleann(infile); r = getroot(); if(r == nil){ l1 = strlen(INCPATH); r = malloc(l1+1); strcpy(r, INCPATH); if(l1 >= strlen(SLASHMOD) && strcmp(r+l1-strlen(SLASHMOD), SLASHMOD) == 0) r[l1-strlen(SLASHMOD)] = '\0'; } t = cleann(r); free(r); r = t; /* srcp relative to r */ l1 = strlen(srcp); l2 = strlen(r); if(l1 >= l2 && strncmp(srcp, r, l2) == 0){ /* nothing to do */ }else l2 = 0; strncpy(name, srcp+l2, nlen); name[nlen-1] = '\0'; free(r); free(srcp); /* print("srcpath: %s\n", name); */ return name; } short yyexca[] = {-1, 1, 1, -1, -2, 0, -1, 3, 1, 3, -2, 0, -1, 17, 39, 88, 50, 62, 54, 88, 99, 62, -2, 251, -1, 209, 59, 29, 71, 29, -2, 0, -1, 228, 1, 2, -2, 0, -1, 272, 50, 176, -2, 256, -1, 306, 59, 41, 71, 41, 91, 41, -2, 0, -1, 308, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 377, 50, 62, 99, 62, -2, 251, -1, 378, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 384, 53, 71, 54, 71, -2, 110, -1, 386, 53, 72, 54, 72, -2, 112, -1, 418, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 425, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 440, 53, 71, 54, 71, -2, 111, -1, 441, 53, 72, 54, 72, -2, 113, -1, 449, 71, 278, 99, 278, -2, 163, -1, 466, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 483, 50, 126, 99, 126, -2, 240, -1, 488, 71, 275, -2, 0, -1, 500, 59, 47, 71, 47, -2, 0, -1, 505, 59, 41, 71, 41, 91, 41, -2, 0, -1, 511, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 545, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 551, 71, 154, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 559, 56, 59, 62, 59, -2, 62, -1, 565, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 570, 71, 157, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 574, 72, 176, -2, 163, -1, 593, 71, 160, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 599, 71, 168, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 603, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 606, 50, 62, 56, 171, 62, 171, 99, 62, -2, 251, }; #define YYNPROD 283 #define YYPRIVATE 57344 #define YYLAST 2707 short yyact[] = { 376, 588, 450, 361, 502, 381, 409, 308, 366, 312, 356, 448, 446, 184, 83, 82, 429, 296, 269, 15, 8, 49, 4, 101, 318, 12, 23, 109, 48, 77, 78, 79, 196, 35, 51, 42, 541, 488, 360, 6, 397, 3, 6, 456, 483, 379, 362, 14, 455, 21, 14, 350, 420, 291, 347, 284, 117, 223, 31, 328, 285, 224, 221, 46, 462, 111, 425, 424, 423, 11, 427, 426, 428, 185, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 104, 116, 43, 181, 182, 183, 71, 10, 285, 203, 10, 206, 40, 346, 419, 92, 285, 118, 346, 32, 32, 514, 113, 292, 346, 292, 44, 285, 118, 417, 416, 415, 596, 582, 544, 482, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 185, 6, 480, 272, 228, 306, 192, 193, 22, 14, 208, 270, 479, 266, 22, 478, 192, 193, 435, 278, 562, 598, 307, 283, 421, 556, 407, 563, 406, 286, 226, 200, 192, 193, 287, 532, 268, 86, 215, 404, 412, 22, 210, 207, 84, 216, 412, 89, 301, 98, 63, 527, 93, 351, 227, 47, 10, 91, 81, 310, 309, 75, 74, 69, 68, 73, 26, 18, 54, 55, 62, 60, 61, 64, 460, 459, 295, 25, 100, 87, 88, 85, 24, 303, 324, 65, 66, 67, 592, 111, 321, 316, 311, 23, 569, 76, 554, 192, 193, 550, 533, 76, 510, 522, 487, 465, 314, 396, 380, 6, 505, 86, 213, 205, 577, 86, 492, 14, 84, 495, 476, 89, 84, 98, 185, 89, 43, 464, 338, 395, 358, 91, 81, 113, 281, 91, 81, 336, 181, 217, 209, 322, 576, 536, 334, 323, 95, 382, 97, 94, 44, 192, 193, 87, 88, 85, 33, 87, 88, 85, 378, 345, 192, 193, 10, 86, 355, 354, 19, 76, 509, 390, 84, 76, 214, 89, 386, 384, 388, 501, 212, 204, 399, 280, 601, 91, 81, 484, 45, 389, 611, 561, 18, 353, 45, 5, 537, 504, 18, 485, 192, 193, 400, 401, 559, 497, 86, 87, 88, 85, 413, 191, 540, 84, 418, 433, 89, 5, 185, 299, 22, 477, 432, 76, 434, 430, 91, 81, 315, 431, 438, 436, 19, 19, 289, 288, 504, 445, 449, 267, 338, 182, 441, 440, 156, 411, 119, 314, 87, 88, 85, 103, 17, 114, 19, 334, 18, 115, 107, 70, 192, 193, 72, 19, 76, 470, 2, 466, 13, 475, 439, 473, 192, 193, 17, 158, 484, 102, 18, 190, 75, 74, 45, 114, 73, 86, 18, 115, 449, 507, 13, 90, 84, 490, 90, 89, 601, 515, 490, 609, 486, 490, 600, 494, 597, 91, 81, 594, 463, 591, 490, 185, 490, 414, 474, 167, 585, 405, 571, 520, 490, 519, 512, 513, 508, 403, 552, 87, 88, 85, 86, 449, 524, 520, 526, 525, 327, 84, 222, 530, 89, 590, 523, 76, 90, 39, 90, 529, 534, 490, 91, 81, 105, 542, 90, 491, 565, 543, 538, 520, 36, 549, 34, 398, 553, 90, 589, 496, 551, 394, 497, 333, 87, 88, 85, 157, 330, 160, 199, 161, 162, 557, 560, 438, 314, 198, 195, 178, 76, 159, 158, 567, 443, 442, 574, 566, 572, 568, 570, 176, 474, 180, 343, 329, 326, 179, 520, 225, 580, 342, 176, 581, 297, 574, 177, 584, 140, 141, 137, 138, 139, 136, 134, 558, 41, 546, 201, 411, 603, 593, 583, 545, 383, 595, 474, 325, 574, 599, 602, 90, 220, 219, 472, 604, 80, 608, 86, 96, 471, 610, 468, 422, 39, 84, 474, 90, 89, 186, 90, 90, 19, 90, 136, 134, 452, 134, 91, 81, 90, 29, 182, 167, 137, 138, 139, 136, 134, 521, 357, 50, 535, 30, 90, 90, 305, 365, 298, 120, 87, 88, 85, 27, 474, 1, 52, 53, 451, 194, 461, 197, 59, 72, 271, 28, 76, 57, 58, 202, 63, 143, 142, 140, 141, 137, 138, 139, 136, 134, 218, 75, 74, 69, 68, 73, 273, 18, 54, 55, 62, 60, 61, 64, 313, 539, 50, 579, 578, 90, 410, 500, 499, 587, 586, 65, 66, 67, 16, 408, 304, 52, 53, 56, 90, 352, 9, 59, 72, 548, 90, 76, 57, 58, 547, 63, 518, 517, 211, 7, 447, 335, 265, 503, 368, 108, 75, 74, 69, 274, 73, 90, 18, 54, 55, 62, 60, 61, 64, 106, 112, 90, 90, 110, 282, 20, 37, 38, 277, 86, 275, 276, 67, 0, 90, 90, 84, 0, 90, 89, 290, 0, 0, 293, 294, 0, 76, 0, 0, 91, 81, 0, 0, 197, 0, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0, 0, 0, 317, 320, 0, 0, 87, 88, 85, 0, 0, 0, 90, 0, 0, 0, 0, 52, 53, 56, 0, 90, 76, 59, 72, 90, 0, 0, 57, 58, 90, 63, 90, 0, 0, 0, 0, 0, 0, 0, 0, 90, 75, 74, 69, 68, 73, 90, 18, 54, 55, 62, 60, 61, 64, 0, 0, 331, 0, 0, 0, 0, 0, 86, 0, 0, 65, 66, 67, 0, 84, 0, 344, 89, 0, 98, 0, 0, 348, 0, 0, 0, 76, 91, 81, 0, 90, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 95, 387, 97, 94, 99, 0, 100, 87, 88, 85, 0, 392, 393, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 90, 0, 402, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 0, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 340, 0, 194, 86, 0, 0, 0, 86, 0, 0, 84, 444, 0, 89, 84, 453, 0, 89, 0, 0, 457, 0, 458, 91, 81, 0, 363, 91, 391, 0, 0, 96, 0, 0, 0, 0, 0, 469, 0, 0, 0, 50, 0, 0, 0, 87, 88, 85, 319, 87, 88, 85, 0, 0, 0, 0, 52, 53, 56, 339, 0, 76, 59, 375, 0, 76, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 493, 0, 0, 0, 498, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 506, 363, 0, 0, 13, 0, 498, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 369, 0, 531, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 467, 363, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 437, 363, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 359, 605, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 0, 52, 53, 607, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 606, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 573, 0, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 50, 0, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 52, 53, 451, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 363, 0, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 50, 0, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 375, 0, 0, 0, 57, 58, 0, 63, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 377, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 50, 0, 0, 0, 369, 0, 0, 0, 370, 371, 374, 372, 373, 76, 0, 52, 53, 56, 0, 0, 0, 59, 72, 0, 0, 279, 57, 58, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 69, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 0, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 52, 53, 56, 0, 0, 0, 59, 72, 0, 0, 0, 57, 58, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 69, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 72, 0, 0, 76, 57, 58, 0, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 74, 69, 68, 73, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 76, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 564, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 555, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 528, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 481, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 349, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 341, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 302, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 300, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 189, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 188, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 187, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 86, 0, 0, 0, 0, 0, 0, 385, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 88, 85, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 76, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 575, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 516, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 489, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 337, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 0, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 0, 0, 332, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 0, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 511, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 0, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 0, 454, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 135, 0, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134, 155, 154, 153, 152, 151, 150, 148, 149, 144, 145, 146, 147, 143, 142, 140, 141, 137, 138, 139, 136, 134 }; short yypact[] = { 351,-1000, 319, 373,-1000, 168,-1000,-1000, 163, 152, 645, 623, 8, 253, 470,-1000, 464, 541,-1000, 287, -36, 141,-1000,-1000,-1000,-1000,-1000,1585,1585,1585, 1585, 234, 579, 138, 815, 383, 350, 0, 460, 382, -1000, 319, 16,-1000,-1000,-1000, 345,-1000,2270,-1000, 343, 494, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 776, 527, 500, 518, 776, 162, 776,-1000,1585,-1000,-1000,-1000, 576,2215,2160,2105, 365,-1000,-1000,-1000, 234, 499, 234, 498, 491, 541, -1000, 543,-1000,-1000, 234,1585, 267,1585, 129, 228, 541, 268, 293, 541, 227, 234, 559, 558, -37,-1000, 446, 7, -38,-1000,-1000,-1000, 523,-1000, 287,-1000, 373,-1000,1585,1585,1585,1585,1585,1585,1585,1585, 1585,1585,1585,1585,1530,1585,1585,1585,1585,1585, 1585,1585,1585,1585,1585,1585,1585,1585,1585,1585, 1585,1585,1585,1585,1585,1585,1585,1585, 338, 381, 675,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,1463, 281, 222, 234, 1585,-1000,-1000,-1000, 15,2647,1585,-1000,-1000,-1000, -1000,1585, 334, 333, 377, 234, 13, 377, 234, 234, 571, 565, 305,2050,-1000,1585,1995,-1000, 234, 640, 93,-1000,-1000, 147, 287,-1000,-1000, 319, 377,-1000, -1000, 352, 918, 918, 240,-1000,-1000,-1000, 373,2647, 2647,2647,2647,2647,2647,2647,2647,2647,2647,2647, 2647,1585, 585,2647, 583, 583, 583, 583, 596, 596, 542, 542, 637, 637, 637, 637,1953,1953,1900,1846, 1792,1739,1739,1685,2668, 553, -39,-1000, 379, 520, 444, -40,2647,-1000, 776, 516, 489, 234,2534, 484, 776,1585, 377,2495,-1000,1585, 914,1940, 526, 519, 377,-1000, 234, 377, 377, 383, 12, 377, 234,-1000, -1000,1885,-1000, 11, 140,-1000, 634, 218,1188,-1000, -1000, 5, 195,-1000, 243, 550,-1000, 377,-1000,2271, 377,-1000,-1000,-1000,2647,-1000,-1000,1585, 675, 922, 716, 377, 482, 217,-1000, 194, -59, 476,2647,1585, -1000,-1000, 565, 565, 377,-1000, 404,-1000, 377,-1000, 125,-1000,-1000, 425, 114,-1000, 113,-1000, 319,-1000, -1000,-1000, 421, 46,-1000, 2, 110, 570, -19, 324, 324,1585,1585,1585, 104,1585,2647, 162,1118,-1000, -1000, 319,-1000,-1000,-1000, 234,-1000, 377, 509, 508, 2647, 776, 377, 377, 325, 620,-1000,1585, 234,2610, 6, 1, 377, 234,-1000, 156,-1000, -23,-1000,-1000, -1000, 416, 215, 192, 230,-1000,-1000,-1000,1048, 569, 234,-1000,1585, 567, 561,1396,1585, 208, 320, 101, -1000, 98, 88,1830, 50,-1000, 4,-1000,-1000, 295, -1000,-1000,-1000,-1000, 377, 620, 191, -62,-1000,2457, 451, 776,-1000, 377,-1000,-1000,-1000, 377, 202, 234, 1585,-1000, 207, 449, 335, 198, 978, 396,1585, 256, 2573,1585,1585, 22, 405,2404, 620, 619,-1000,-1000, -1000,-1000,-1000,-1000, 284,-1000, 190,-1000, 620,1585, 620,1585,-1000, 137,1775, 319,1585, 234, 121, 187, 636,-1000, 239, 298,-1000, 634,-1000, 311, -4,-1000, 1585,1396, 49, 549, 544,-1000, 620, 186,-1000, 422, 2457,1585,-1000,-1000,2647,-1000,2647,-1000,-1000, 183, 1720, 111,-1000,-1000, 303, 296,-1000, 290, 107, 115, -1000,-1000,1665, 466,1585,1396,1585, 181,-1000, 414, -1000,1327,-1000,2351,-1000,-1000,-1000, 238, 384,-1000, 210,-1000,-1000, 620,-1000,1396, 48,-1000, 548,-1000, 1327,-1000, 412, 46,2457, 465,-1000,-1000, 175,-1000, 403,-1000,1585, 47, 400,-1000, 108,-1000, 398,-1000, -1000,-1000,-1000,1327,-1000, 546,-1000,-1000,-1000,1258, -1000, 465, 395,1396, 286, 46, 162, 776,-1000,-1000, -1000,-1000 }; short yypgo[] = { 0, 570, 753, 752, 33, 24, 417, 15, 14, 46, 751, 749, 746, 32, 745, 731, 27, 730, 16, 4, 729, 99, 8, 0, 21, 34, 13, 728, 727, 93, 25, 69, 35, 12, 726, 11, 2, 38, 41, 22, 725, 724, 3, 7, 723, 722, 720, 715, 712, 20, 711, 706, 705, 10, 704, 700, 699, 1, 698, 697, 696, 6, 5, 694, 693, 691, 19, 23, 690, 9, 682, 18, 660, 656, 17, 651, 645, 643 }; short yyr1[] = { 0, 76, 75, 75, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 30, 30, 37, 37, 37, 37, 37, 37, 37, 66, 66, 48, 51, 51, 51, 50, 50, 50, 50, 50, 49, 49, 73, 73, 53, 53, 53, 52, 52, 52, 62, 62, 61, 61, 60, 58, 58, 58, 59, 59, 59, 19, 20, 20, 9, 10, 10, 6, 6, 74, 74, 74, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 8, 8, 13, 13, 21, 21, 2, 2, 2, 3, 3, 4, 4, 14, 14, 15, 15, 16, 16, 16, 16, 11, 12, 12, 12, 12, 5, 5, 5, 5, 40, 67, 67, 67, 41, 41, 41, 54, 54, 43, 43, 43, 77, 77, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 17, 17, 18, 18, 44, 45, 45, 46, 47, 47, 63, 64, 64, 36, 36, 36, 36, 36, 55, 56, 56, 57, 57, 57, 57, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 29, 29, 31, 72, 72, 71, 71, 70, 70, 70, 70, 65, 65, 32, 32, 32, 32, 27, 27, 28, 28, 26, 26, 33, 33, 34, 34, 35, 35, 69, 68, 68 }; short yyr2[] = { 0, 0, 5, 1, 1, 2, 2, 1, 1, 2, 2, 4, 4, 4, 4, 4, 6, 1, 3, 3, 5, 5, 4, 6, 5, 1, 4, 7, 6, 0, 2, 1, 4, 2, 5, 5, 1, 8, 11, 0, 4, 0, 2, 1, 1, 1, 5, 0, 2, 5, 4, 4, 2, 2, 1, 2, 4, 4, 1, 1, 3, 1, 1, 3, 6, 4, 1, 2, 3, 4, 1, 1, 1, 3, 6, 2, 3, 3, 3, 3, 4, 1, 1, 4, 3, 6, 1, 3, 0, 3, 3, 3, 5, 1, 3, 1, 5, 0, 1, 1, 3, 3, 3, 3, 3, 1, 1, 1, 3, 3, 2, 3, 2, 3, 4, 4, 2, 0, 3, 2, 4, 2, 4, 0, 2, 2, 3, 5, 2, 2, 4, 3, 4, 6, 2, 5, 7, 10, 6, 8, 3, 3, 3, 3, 3, 6, 5, 8, 2, 8, 0, 2, 0, 1, 2, 2, 4, 2, 2, 4, 2, 2, 4, 1, 3, 1, 3, 1, 2, 2, 4, 1, 1, 3, 1, 0, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 8, 7, 5, 3, 6, 4, 2, 2, 2, 1, 4, 3, 3, 3, 4, 6, 2, 2, 1, 1, 1, 6, 1, 1, 3, 1, 3, 1, 1, 1, 3, 3, 2, 1, 0, 1, 1, 3, 3, 0, 1, 1, 2, 1, 3, 1, 2, 1, 3, 1, 3, 2, 2, 4 }; short yychk[] = { -1000, -75, 73, -38, -39, 2, -37, -40, -49, -48, -29, -31, -30, 75, -9, -66, -54, 59, 63, 39, -10, -9, 59, -39, 72, 72, 72, 4, 16, 4, 16, 50, 99, 61, 50, -4, 54, -3, -2, 39, -21, 41, -32, -31, -29, 59, 99, 72, -23, -24, 17, -25, 32, 33, 64, 65, 34, 43, 44, 38, 67, 68, 66, 46, 69, 81, 82, 83, 60, 59, -6, -29, 39, 61, 58, 57, 97, -23, -23, -23, -1, 60, -7, -8, 46, 83, 39, 81, 82, 49, -6, 59, -31, 72, 77, 74, -1, 76, 51, 78, 80, -67, 52, 59, 87, 50, -14, 34, -15, -16, -11, -30, -12, -31, 59, 63, -9, 40, 99, 59, -76, 72, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 38, 16, 37, 34, 35, 36, 32, 33, 31, 30, 26, 27, 28, 29, 24, 25, 23, 22, 21, 20, 19, 18, 59, 39, 54, 53, 41, 43, 44, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, 41, 45, 45, 45, 41, -24, -24, -24, -26, -23, 39, 72, 72, 72, 72, 4, 53, 54, -1, 45, -13, -1, 45, 45, -21, 41, -1, -23, 72, 4, -23, 72, 39, 70, -21, -41, 70, 2, 39, -29, -21, 70, -1, 40, 40, 99, 50, 50, 99, 42, -31, -29, -38, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, 4, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, -27, -26, 59, -25, -71, -22, -72, -23, -70, 60, 81, 82, 79, -23, 42, 60, 70, -1, -23, 40, 99, -23, -23, 59, 59, -1, 40, 99, -1, -1, -4, -74, -1, 79, 72, 72, -23, 72, -13, -51, 2, 70, 87, -43, 71, 70, -32, -69, -68, -9, 34, -16, -1, -5, 84, -1, -5, 59, 63, -23, 40, 42, 50, 99, 45, 45, -1, 42, 45, -24, -28, -26, 42, -23, 99, 40, 72, 41, 41, -1, -67, 99, 42, -1, 72, 40, 71, -50, -9, -49, -66, -53, 2, 70, 71, -37, -42, -9, 2, 70, -77, -22, 47, -17, 88, 92, 93, 95, 96, 94, 39, -23, 59, -43, 40, 71, -62, 62, 40, -7, 46, -8, -1, -22, -71, -23, 60, -1, -1, 45, 70, 71, 99, 45, -23, -74, -74, -1, 79, 72, 50, 72, 71, -52, -61, -60, -9, 91, -69, 50, 72, 71, 70, -43, 99, 50, 72, 39, 87, 86, 85, 90, 89, 91, -18, 59, -18, -22, -23, -22, 72, -26, 71, -61, -9, -7, -8, 42, 42, -1, 70, -33, -34, -35, -23, -36, 34, 2, -1, 40, 42, 42, -1, -1, 77, 76, -73, 87, 50, 70, 71, -43, 71, 39, -1, -23, 39, 39, -42, -9, -23, 70, 59, 72, 72, 72, 72, 72, 40, 50, 62, -33, 71, 99, 55, 56, 62, 72, -1, -23, 70, 76, 79, -1, -58, -59, 2, -19, -20, 59, 70, 71, 51, -26, 72, 4, 40, -22, -22, 86, 50, 70, -44, -45, -36, -23, 16, 71, -35, -23, -36, -23, 72, 72, -69, -23, -1, 72, 71, -62, 2, 62, 56, -53, -65, 59, 40, -23, -42, 72, 40, 39, -46, -47, -36, 71, -43, 62, -23, 71, 72, 72, -19, -9, 59, -19, 59, 71, 70, 72, 48, -22, -42, -22, 71, -43, 62, -36, 2, -23, 70, 62, 62, -63, -64, -36, -42, 72, 40, -36, 62, -55, -56, -57, 59, 34, 2, 71, -43, 62, -22, 72, 62, 71, -43, 62, 56, -36, 40, -57, 2, 59, 34, -57, 62, -42, 62 }; short yydef[] = { 0, -2, 0, -2, 4, 0, 7, 8, 0, 0, 0, 17, 0, 0, 0, 25, 0, -2, 252, 0, 61, 0, 62, 5, 6, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 95, 93, 97, 121, 0, 0, 264, 265, 251, 0, 1, 0, 177, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 238, 0, 247, 248, 249, 0, 0, 0, 0, 0, 70, 71, 72, 0, 0, 0, 0, 0, 88, 81, 82, 18, 19, 0, 0, 0, 0, 0, 0, 88, 0, 0, 88, 0, 0, 0, 0, 98, 99, 0, 0, 105, 17, 106, 107, 0, 253, 0, 63, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 175, 245, 246, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 0, 0, 0, 0, 0, 235, 236, 237, 0, 272, 0, 13, 12, 14, 15, 0, 0, 0, 75, 0, 0, 86, 0, 0, 0, 0, 0, 0, 22, 0, 0, 26, 0, -2, 0, 114, 123, 0, 0, 116, 122, 0, 94, 90, 91, 0, 0, 0, 0, 89, 266, 267, -2, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 0, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 193, 0, 269, 241, 242, 254, 0, 0, -2, 257, 258, 0, 0, 0, 0, 0, 0, 0, 232, 0, 240, 0, 0, 0, 73, 84, 76, 77, 0, 78, 79, 117, 0, 66, 0, 20, 21, 0, 24, 0, 0, 31, -2, 0, -2, 119, 123, 0, 0, 47, 0, 0, 100, 101, 102, 0, 103, 104, 108, 109, 190, 239, 243, 175, 0, 0, 0, 261, 0, 0, 234, 0, 270, 0, 273, 0, 65, 16, 0, 0, 87, 80, 0, 83, 67, 23, 0, 28, 30, 0, 0, 36, 0, 43, 0, 118, 124, 125, 0, 0, 123, 0, 0, 0, 0, 152, 152, 175, 0, 175, 0, 0, 176, -2, -2, 115, 96, 280, 281, 92, -2, 0, -2, 0, 0, 255, 256, 70, 259, 260, 0, 0, 231, 271, 0, 0, 0, 0, 68, 0, 27, 0, 33, 39, 42, 44, 45, 0, 0, 0, 151, 128, 129, 123, -2, 0, 0, 134, 0, 0, 0, -2, 0, 0, 0, 0, 153, 0, 0, 0, 0, 148, 0, 120, 48, 0, -2, -2, 244, 250, 228, 0, 0, 274, 276, -2, 0, 165, 167, 233, 64, 74, 85, 69, 0, 0, 0, 37, 0, 0, 0, 0, -2, 131, 0, 0, 0, 175, 175, 0, 0, 0, 0, 0, 140, 141, 142, 143, 144, -2, 0, 282, 0, 230, -2, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, -2, 54, 0, 58, 59, -2, 130, 263, 0, 132, 0, -2, 0, 0, 0, 151, 0, 0, 123, 0, 163, 0, 229, 277, 164, 166, 279, 34, 35, 0, 0, 0, 50, 51, 52, 53, 55, 0, 0, 0, 262, 127, 0, 135, 175, -2, 175, 0, 123, 0, 146, -2, 155, 0, 40, 46, 49, 0, 0, -2, 0, 60, 38, 0, 133, -2, 0, 138, 0, 145, -2, 158, 0, 167, -2, 0, 56, 57, 0, 123, 0, 136, 175, 0, 0, 156, 0, 123, 0, 171, 172, 174, 149, -2, 161, 0, 139, 159, 147, -2, 169, 0, 0, -2, 0, 174, -2, 172, 173, 162, 137, 170 }; short yytok1[] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 36, 23, 0, 39, 40, 34, 32, 99, 33, 54, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 72, 26, 4, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 42, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 21, 71, 65 }; short yytok2[] = { 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 24, 25, 28, 29, 30, 31, 37, 38, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 66, 67, 68, 69, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98 }; long yytok3[] = { 0 }; #define YYFLAG -1000 #define yyclearin yychar = -1 #define yyerrok yyerrflag = 0 #ifdef yydebug #include "y.debug" #else #define yydebug 0 char* yytoknames[1]; /* for debugging */ char* yystates[1]; /* for debugging */ #endif /* parser for yacc output */ int yynerrs = 0; /* number of errors */ int yyerrflag = 0; /* error recovery flag */ extern int fprint(int, char*, ...); extern int sprint(char*, char*, ...); char* yytokname(int yyc) { static char x[16]; if(yyc > 0 && yyc <= sizeof(yytoknames)/sizeof(yytoknames[0])) if(yytoknames[yyc-1]) return yytoknames[yyc-1]; sprint(x, "<%d>", yyc); return x; } char* yystatname(int yys) { static char x[16]; if(yys >= 0 && yys < sizeof(yystates)/sizeof(yystates[0])) if(yystates[yys]) return yystates[yys]; sprint(x, "<%d>\n", yys); return x; } long yylex1(void) { long yychar; long *t3p; int c; yychar = yylex(); if(yychar <= 0) { c = yytok1[0]; goto out; } if(yychar < sizeof(yytok1)/sizeof(yytok1[0])) { c = yytok1[yychar]; goto out; } if(yychar >= YYPRIVATE) if(yychar < YYPRIVATE+sizeof(yytok2)/sizeof(yytok2[0])) { c = yytok2[yychar-YYPRIVATE]; goto out; } for(t3p=yytok3;; t3p+=2) { c = t3p[0]; if(c == yychar) { c = t3p[1]; goto out; } if(c == 0) break; } c = 0; out: if(c == 0) c = yytok2[1]; /* unknown char */ if(yydebug >= 3) fprint(2, "lex %.4lux %s\n", yychar, yytokname(c)); return c; } int yyparse(void) { struct { YYSTYPE yyv; int yys; } yys[YYMAXDEPTH], *yyp, *yypt; short *yyxi; int yyj, yym, yystate, yyn, yyg; long yychar; YYSTYPE save1, save2; int save3, save4; save1 = yylval; save2 = yyval; save3 = yynerrs; save4 = yyerrflag; yystate = 0; yychar = -1; yynerrs = 0; yyerrflag = 0; yyp = &yys[-1]; goto yystack; ret0: yyn = 0; goto ret; ret1: yyn = 1; goto ret; ret: yylval = save1; yyval = save2; yynerrs = save3; yyerrflag = save4; return yyn; yystack: /* put a state and value onto the stack */ if(yydebug >= 4) fprint(2, "char %s in %s", yytokname(yychar), yystatname(yystate)); yyp++; if(yyp >= &yys[YYMAXDEPTH]) { yyerror("yacc stack overflow"); goto ret1; } yyp->yys = yystate; yyp->yyv = yyval; yynewstate: yyn = yypact[yystate]; if(yyn <= YYFLAG) goto yydefault; /* simple state */ if(yychar < 0) yychar = yylex1(); yyn += yychar; if(yyn < 0 || yyn >= YYLAST) goto yydefault; yyn = yyact[yyn]; if(yychk[yyn] == yychar) { /* valid shift */ yychar = -1; yyval = yylval; yystate = yyn; if(yyerrflag > 0) yyerrflag--; goto yystack; } yydefault: /* default state action */ yyn = yydef[yystate]; if(yyn == -2) { if(yychar < 0) yychar = yylex1(); /* look through exception table */ for(yyxi=yyexca;; yyxi+=2) if(yyxi[0] == -1 && yyxi[1] == yystate) break; for(yyxi += 2;; yyxi += 2) { yyn = yyxi[0]; if(yyn < 0 || yyn == yychar) break; } yyn = yyxi[1]; if(yyn < 0) goto ret0; } if(yyn == 0) { /* error ... attempt to resume parsing */ switch(yyerrflag) { case 0: /* brand new error */ yyerror("syntax error"); yynerrs++; if(yydebug >= 1) { fprint(2, "%s", yystatname(yystate)); fprint(2, "saw %s\n", yytokname(yychar)); } case 1: case 2: /* incompletely recovered error ... try again */ yyerrflag = 3; /* find a state where "error" is a legal shift action */ while(yyp >= yys) { yyn = yypact[yyp->yys] + YYERRCODE; if(yyn >= 0 && yyn < YYLAST) { yystate = yyact[yyn]; /* simulate a shift of "error" */ if(yychk[yystate] == YYERRCODE) goto yystack; } /* the current yyp has no shift onn "error", pop stack */ if(yydebug >= 2) fprint(2, "error recovery pops state %d, uncovers %d\n", yyp->yys, (yyp-1)->yys ); yyp--; } /* there is no state on the stack with an error shift ... abort */ goto ret1; case 3: /* no shift yet; clobber input char */ if(yydebug >= 2) fprint(2, "error recovery discards %s\n", yytokname(yychar)); if(yychar == YYEOFCODE) goto ret1; yychar = -1; goto yynewstate; /* try again in the same state */ } } /* reduction by production yyn */ if(yydebug >= 2) fprint(2, "reduce %d in:\n\t%s", yyn, yystatname(yystate)); yypt = yyp; yyp -= yyr2[yyn]; yyval = (yyp+1)->yyv; yym = yyn; /* consult goto table to find next state */ yyn = yyr1[yyn]; yyg = yypgo[yyn]; yyj = yyg + yyp->yys + 1; if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn) yystate = yyact[yyg]; switch(yym) { case 1: #line 74 "limbo.y" { impmods = yypt[-1].yyv.ids; } break; case 2: #line 77 "limbo.y" { tree = rotater(yypt[-0].yyv.node); } break; case 3: #line 81 "limbo.y" { impmods = nil; tree = rotater(yypt[-0].yyv.node); } break; case 5: #line 89 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else if(yypt[-0].yyv.node == nil) yyval.node = yypt[-1].yyv.node; else yyval.node = mkbin(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 6: #line 100 "limbo.y" { yyval.node = nil; } break; case 11: #line 108 "limbo.y" { yyval.node = mkbin(Oas, yypt[-3].yyv.node, yypt[-1].yyv.node); } break; case 12: #line 112 "limbo.y" { yyval.node = mkbin(Oas, yypt[-3].yyv.node, yypt[-1].yyv.node); } break; case 13: #line 116 "limbo.y" { yyval.node = mkbin(Odas, yypt[-3].yyv.node, yypt[-1].yyv.node); } break; case 14: #line 120 "limbo.y" { yyval.node = mkbin(Odas, yypt[-3].yyv.node, yypt[-1].yyv.node); } break; case 15: #line 124 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; } break; case 16: #line 129 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; } break; case 18: #line 137 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 19: #line 143 "limbo.y" { includef(yypt[-1].yyv.tok.v.idval); yyval.node = nil; } break; case 20: #line 148 "limbo.y" { yyval.node = typedecl(yypt[-4].yyv.ids, yypt[-1].yyv.type); } break; case 21: #line 152 "limbo.y" { yyval.node = importdecl(yypt[-1].yyv.node, yypt[-4].yyv.ids); yyval.node->src.start = yypt[-4].yyv.ids->src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 22: #line 158 "limbo.y" { yyval.node = vardecl(yypt[-3].yyv.ids, yypt[-1].yyv.type); } break; case 23: #line 162 "limbo.y" { yyval.node = mkbin(Ovardecli, vardecl(yypt[-5].yyv.ids, yypt[-3].yyv.type), varinit(yypt[-5].yyv.ids, yypt[-1].yyv.node)); } break; case 24: #line 166 "limbo.y" { yyval.node = condecl(yypt[-4].yyv.ids, yypt[-1].yyv.node); } break; case 26: #line 173 "limbo.y" { yyval.node = exdecl(yypt[-3].yyv.ids, nil); } break; case 27: #line 177 "limbo.y" { yyval.node = exdecl(yypt[-6].yyv.ids, revids(yypt[-2].yyv.ids)); } break; case 28: #line 183 "limbo.y" { yypt[-5].yyv.ids->src.stop = yypt[-0].yyv.tok.src.stop; yyval.node = moddecl(yypt[-5].yyv.ids, rotater(yypt[-1].yyv.node)); } break; case 29: #line 190 "limbo.y" { yyval.node = nil; } break; case 30: #line 194 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else if(yypt[-0].yyv.node == nil) yyval.node = yypt[-1].yyv.node; else yyval.node = mkn(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 31: #line 203 "limbo.y" { yyval.node = nil; } break; case 32: #line 209 "limbo.y" { yyval.node = fielddecl(Dglobal, typeids(yypt[-3].yyv.ids, yypt[-1].yyv.type)); } break; case 34: #line 214 "limbo.y" { yyval.node = typedecl(yypt[-4].yyv.ids, yypt[-1].yyv.type); } break; case 35: #line 218 "limbo.y" { yyval.node = condecl(yypt[-4].yyv.ids, yypt[-1].yyv.node); } break; case 37: #line 225 "limbo.y" { yypt[-7].yyv.ids->src.stop = yypt[-1].yyv.tok.src.stop; yyval.node = adtdecl(yypt[-7].yyv.ids, rotater(yypt[-2].yyv.node)); yyval.node->ty->polys = yypt[-4].yyv.ids; yyval.node->ty->val = rotater(yypt[-0].yyv.node); } break; case 38: #line 232 "limbo.y" { yypt[-10].yyv.ids->src.stop = yypt[-0].yyv.tok.src.stop; yyval.node = adtdecl(yypt[-10].yyv.ids, rotater(yypt[-1].yyv.node)); yyval.node->ty->polys = yypt[-7].yyv.ids; yyval.node->ty->val = rotater(yypt[-4].yyv.node); } break; case 39: #line 241 "limbo.y" { yyval.node = nil; } break; case 40: #line 245 "limbo.y" { yyval.node = yypt[-1].yyv.node; } break; case 41: #line 251 "limbo.y" { yyval.node = nil; } break; case 42: #line 255 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else if(yypt[-0].yyv.node == nil) yyval.node = yypt[-1].yyv.node; else yyval.node = mkn(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 43: #line 264 "limbo.y" { yyval.node = nil; } break; case 46: #line 272 "limbo.y" { yyval.node = condecl(yypt[-4].yyv.ids, yypt[-1].yyv.node); } break; case 47: #line 278 "limbo.y" { yyval.node = nil; } break; case 48: #line 282 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else if(yypt[-0].yyv.node == nil) yyval.node = yypt[-1].yyv.node; else yyval.node = mkn(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 49: #line 293 "limbo.y" { Decl *d; for(d = yypt[-4].yyv.ids; d != nil; d = d->next) d->cyc = 1; yyval.node = fielddecl(Dfield, typeids(yypt[-4].yyv.ids, yypt[-1].yyv.type)); } break; case 50: #line 301 "limbo.y" { yyval.node = fielddecl(Dfield, typeids(yypt[-3].yyv.ids, yypt[-1].yyv.type)); } break; case 51: #line 307 "limbo.y" { yyval.node = yypt[-1].yyv.node; } break; case 52: #line 313 "limbo.y" { yypt[-1].yyv.node->right->right = yypt[-0].yyv.node; yyval.node = yypt[-1].yyv.node; } break; case 53: #line 318 "limbo.y" { yyval.node = nil; } break; case 54: #line 322 "limbo.y" { yyval.node = nil; } break; case 55: #line 328 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yypt[-1].yyv.ids), nil)); typeids(yypt[-1].yyv.ids, mktype(&yypt[-1].yyv.ids->src.start, &yypt[-1].yyv.ids->src.stop, Tadtpick, nil, nil)); } break; case 56: #line 333 "limbo.y" { yypt[-3].yyv.node->right->right = yypt[-2].yyv.node; yyval.node = mkn(Opickdecl, yypt[-3].yyv.node, mkn(Oseq, fielddecl(Dtag, yypt[-1].yyv.ids), nil)); typeids(yypt[-1].yyv.ids, mktype(&yypt[-1].yyv.ids->src.start, &yypt[-1].yyv.ids->src.stop, Tadtpick, nil, nil)); } break; case 57: #line 339 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yypt[-1].yyv.ids), nil)); typeids(yypt[-1].yyv.ids, mktype(&yypt[-1].yyv.ids->src.start, &yypt[-1].yyv.ids->src.stop, Tadtpick, nil, nil)); } break; case 58: #line 346 "limbo.y" { yyval.ids = revids(yypt[-0].yyv.ids); } break; case 59: #line 352 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, nil); } break; case 60: #line 356 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, yypt[-2].yyv.ids); } break; case 61: #line 362 "limbo.y" { yyval.ids = revids(yypt[-0].yyv.ids); } break; case 62: #line 368 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, nil); } break; case 63: #line 372 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, yypt[-2].yyv.ids); } break; case 64: #line 378 "limbo.y" { yyval.type = mktype(&yypt[-5].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.type->val = mkbin(Oseq, yypt[-3].yyv.node, yypt[-1].yyv.node); } break; case 65: #line 383 "limbo.y" { yyval.type = mktype(&yypt[-3].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.type->val = yypt[-1].yyv.node; } break; case 66: #line 390 "limbo.y" { yyval.types = addtype(yypt[-0].yyv.type, nil); } break; case 67: #line 394 "limbo.y" { yyval.types = addtype(yypt[-0].yyv.type, nil); yypt[-0].yyv.type->flags |= CYCLIC; } break; case 68: #line 399 "limbo.y" { yyval.types = addtype(yypt[-0].yyv.type, yypt[-2].yyv.types); } break; case 69: #line 403 "limbo.y" { yyval.types = addtype(yypt[-0].yyv.type, yypt[-3].yyv.types); yypt[-0].yyv.type->flags |= CYCLIC; } break; case 70: #line 410 "limbo.y" { yyval.type = mkidtype(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 71: #line 414 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 72: #line 418 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 73: #line 422 "limbo.y" { yyval.type = mkarrowtype(&yypt[-2].yyv.type->src.start, &yypt[-0].yyv.tok.src.stop, yypt[-2].yyv.type, yypt[-0].yyv.tok.v.idval); } break; case 74: #line 426 "limbo.y" { yyval.type = mkarrowtype(&yypt[-5].yyv.type->src.start, &yypt[-3].yyv.tok.src.stop, yypt[-5].yyv.type, yypt[-3].yyv.tok.v.idval); yyval.type = mkinsttype(&yypt[-5].yyv.type->src, yyval.type, yypt[-1].yyv.types); } break; case 75: #line 431 "limbo.y" { yyval.type = mktype(&yypt[-1].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tref, yypt[-0].yyv.type, nil); } break; case 76: #line 435 "limbo.y" { yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tchan, yypt[-0].yyv.type, nil); } break; case 77: #line 439 "limbo.y" { if(yypt[-1].yyv.ids->next == nil) yyval.type = yypt[-1].yyv.ids->ty; else yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Ttuple, nil, revids(yypt[-1].yyv.ids)); } break; case 78: #line 446 "limbo.y" { yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tarray, yypt[-0].yyv.type, nil); } break; case 79: #line 450 "limbo.y" { yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tlist, yypt[-0].yyv.type, nil); } break; case 80: #line 454 "limbo.y" { yypt[-1].yyv.type->src.start = yypt[-3].yyv.tok.src.start; yypt[-1].yyv.type->polys = yypt[-2].yyv.ids; yypt[-1].yyv.type->u.eraises = yypt[-0].yyv.node; yyval.type = yypt[-1].yyv.type; } break; case 82: #line 476 "limbo.y" { yyval.type = mkidtype(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 83: #line 480 "limbo.y" { yyval.type = mkinsttype(&yypt[-3].yyv.tok.src, mkidtype(&yypt[-3].yyv.tok.src, yypt[-3].yyv.tok.v.idval), yypt[-1].yyv.types); } break; case 84: #line 486 "limbo.y" { yyval.type = mkdottype(&yypt[-2].yyv.type->src.start, &yypt[-0].yyv.tok.src.stop, yypt[-2].yyv.type, yypt[-0].yyv.tok.v.idval); } break; case 85: #line 490 "limbo.y" { yyval.type = mkdottype(&yypt[-5].yyv.type->src.start, &yypt[-3].yyv.tok.src.stop, yypt[-5].yyv.type, yypt[-3].yyv.tok.v.idval); yyval.type = mkinsttype(&yypt[-5].yyv.type->src, yyval.type, yypt[-1].yyv.types); } break; case 86: #line 497 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.type->src, nil, yypt[-0].yyv.type, nil); } break; case 87: #line 501 "limbo.y" { yyval.ids = mkids(&yypt[-2].yyv.ids->src, nil, yypt[-0].yyv.type, yypt[-2].yyv.ids); } break; case 88: #line 507 "limbo.y" { yyval.ids = nil; } break; case 89: #line 511 "limbo.y" { yyval.ids = polydecl(yypt[-1].yyv.ids); } break; case 90: #line 517 "limbo.y" { yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tfn, tnone, yypt[-1].yyv.ids); } break; case 91: #line 521 "limbo.y" { yyval.type = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tfn, tnone, nil); yyval.type->varargs = 1; } break; case 92: #line 526 "limbo.y" { yyval.type = mktype(&yypt[-4].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tfn, tnone, yypt[-3].yyv.ids); yyval.type->varargs = 1; } break; case 93: #line 533 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 94: #line 537 "limbo.y" { yypt[-2].yyv.type->tof = yypt[-0].yyv.type; yypt[-2].yyv.type->src.stop = yypt[-0].yyv.type->src.stop; yyval.type = yypt[-2].yyv.type; } break; case 95: #line 545 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 96: #line 549 "limbo.y" { yyval.type = yypt[-4].yyv.type; yyval.type->val = rotater(yypt[-1].yyv.node); } break; case 97: #line 556 "limbo.y" { yyval.ids = nil; } break; case 100: #line 564 "limbo.y" { yyval.ids = appdecls(yypt[-2].yyv.ids, yypt[-0].yyv.ids); } break; case 101: #line 570 "limbo.y" { yyval.ids = typeids(yypt[-2].yyv.ids, yypt[-0].yyv.type); } break; case 102: #line 574 "limbo.y" { Decl *d; yyval.ids = typeids(yypt[-2].yyv.ids, yypt[-0].yyv.type); for(d = yyval.ids; d != nil; d = d->next) d->implicit = 1; } break; case 103: #line 582 "limbo.y" { yyval.ids = mkids(&yypt[-2].yyv.node->src, enter("junk", 0), yypt[-0].yyv.type, nil); yyval.ids->store = Darg; yyerror("illegal argument declaration"); } break; case 104: #line 588 "limbo.y" { yyval.ids = mkids(&yypt[-2].yyv.node->src, enter("junk", 0), yypt[-0].yyv.type, nil); yyval.ids->store = Darg; yyerror("illegal argument declaration"); } break; case 105: #line 596 "limbo.y" { yyval.ids = revids(yypt[-0].yyv.ids); } break; case 106: #line 602 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, nil); yyval.ids->store = Darg; } break; case 107: #line 607 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, nil, nil, nil); yyval.ids->store = Darg; } break; case 108: #line 612 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, yypt[-2].yyv.ids); yyval.ids->store = Darg; } break; case 109: #line 617 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, nil, nil, yypt[-2].yyv.ids); yyval.ids->store = Darg; } break; case 110: #line 650 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 111: #line 654 "limbo.y" { yyval.type = mktype(&yypt[-1].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tref, yypt[-0].yyv.type, nil); } break; case 112: #line 658 "limbo.y" { yyval.type = yypt[-0].yyv.type; } break; case 113: #line 662 "limbo.y" { yyval.type = mktype(&yypt[-1].yyv.tok.src.start, &yypt[-0].yyv.tok.src.stop, Tref, yypt[-0].yyv.type, nil); } break; case 114: #line 668 "limbo.y" { yyval.node = fndecl(yypt[-3].yyv.node, yypt[-2].yyv.type, yypt[-0].yyv.node); nfns++; /* patch up polydecs */ if(yypt[-3].yyv.node->op == Odot){ if(yypt[-3].yyv.node->right->left != nil){ yypt[-2].yyv.type->polys = yypt[-3].yyv.node->right->left->decl; yypt[-3].yyv.node->right->left = nil; } if(yypt[-3].yyv.node->left->op == Oname && yypt[-3].yyv.node->left->left != nil){ yyval.node->decl = yypt[-3].yyv.node->left->left->decl; yypt[-3].yyv.node->left->left = nil; } } else{ if(yypt[-3].yyv.node->left != nil){ yypt[-2].yyv.type->polys = yypt[-3].yyv.node->left->decl; yypt[-3].yyv.node->left = nil; } } yypt[-2].yyv.type->u.eraises = yypt[-1].yyv.node; yyval.node->src = yypt[-3].yyv.node->src; } break; case 115: #line 694 "limbo.y" { yyval.node = mkn(Otuple, rotater(yypt[-1].yyv.node), nil); yyval.node->src.start = yypt[-3].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 116: #line 700 "limbo.y" { yyval.node = mkn(Otuple, mkunary(Oseq, yypt[-0].yyv.node), nil); yyval.node->src.start = yypt[-1].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.node->src.stop; } break; case 117: #line 706 "limbo.y" { yyval.node = nil; } break; case 118: #line 712 "limbo.y" { if(yypt[-1].yyv.node == nil){ yypt[-1].yyv.node = mkn(Onothing, nil, nil); yypt[-1].yyv.node->src.start = curline(); yypt[-1].yyv.node->src.stop = yypt[-1].yyv.node->src.start; } yyval.node = rotater(yypt[-1].yyv.node); yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 119: #line 723 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } break; case 120: #line 727 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } break; case 121: #line 733 "limbo.y" { yyval.node = mkname(&yypt[-1].yyv.tok.src, yypt[-1].yyv.tok.v.idval); if(yypt[-0].yyv.ids != nil){ yyval.node->left = mkn(Onothing, nil ,nil); yyval.node->left->decl = yypt[-0].yyv.ids; } } break; case 122: #line 741 "limbo.y" { yyval.node = mkbin(Odot, yypt[-3].yyv.node, mkname(&yypt[-1].yyv.tok.src, yypt[-1].yyv.tok.v.idval)); if(yypt[-0].yyv.ids != nil){ yyval.node->right->left = mkn(Onothing, nil ,nil); yyval.node->right->left->decl = yypt[-0].yyv.ids; } } break; case 123: #line 751 "limbo.y" { yyval.node = nil; } break; case 124: #line 755 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else if(yypt[-0].yyv.node == nil) yyval.node = yypt[-1].yyv.node; else yyval.node = mkbin(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 125: #line 764 "limbo.y" { if(yypt[-1].yyv.node == nil) yyval.node = yypt[-0].yyv.node; else yyval.node = mkbin(Oseq, yypt[-1].yyv.node, yypt[-0].yyv.node); } break; case 128: #line 777 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 129: #line 783 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 130: #line 789 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 131: #line 795 "limbo.y" { if(yypt[-1].yyv.node == nil){ yypt[-1].yyv.node = mkn(Onothing, nil, nil); yypt[-1].yyv.node->src.start = curline(); yypt[-1].yyv.node->src.stop = yypt[-1].yyv.node->src.start; } yyval.node = mkscope(rotater(yypt[-1].yyv.node)); } break; case 132: #line 804 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 133: #line 811 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 134: #line 818 "limbo.y" { yyval.node = yypt[-1].yyv.node; } break; case 135: #line 822 "limbo.y" { yyval.node = mkn(Oif, yypt[-2].yyv.node, mkunary(Oseq, yypt[-0].yyv.node)); yyval.node->src.start = yypt[-4].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.node->src.stop; } break; case 136: #line 828 "limbo.y" { yyval.node = mkn(Oif, yypt[-4].yyv.node, mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node)); yyval.node->src.start = yypt[-6].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.node->src.stop; } break; case 137: #line 834 "limbo.y" { yyval.node = mkunary(Oseq, yypt[-0].yyv.node); if(yypt[-2].yyv.node->op != Onothing) yyval.node->right = yypt[-2].yyv.node; yyval.node = mkbin(Ofor, yypt[-4].yyv.node, yyval.node); yyval.node->decl = yypt[-9].yyv.ids; if(yypt[-6].yyv.node->op != Onothing) yyval.node = mkbin(Oseq, yypt[-6].yyv.node, yyval.node); } break; case 138: #line 844 "limbo.y" { yyval.node = mkn(Ofor, yypt[-2].yyv.node, mkunary(Oseq, yypt[-0].yyv.node)); yyval.node->src.start = yypt[-4].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.node->src.stop; yyval.node->decl = yypt[-5].yyv.ids; } break; case 139: #line 851 "limbo.y" { yyval.node = mkn(Odo, yypt[-2].yyv.node, yypt[-5].yyv.node); yyval.node->src.start = yypt[-6].yyv.tok.src.start; yyval.node->src.stop = yypt[-1].yyv.tok.src.stop; yyval.node->decl = yypt[-7].yyv.ids; } break; case 140: #line 858 "limbo.y" { yyval.node = mkn(Obreak, nil, nil); yyval.node->decl = yypt[-1].yyv.ids; yyval.node->src = yypt[-2].yyv.tok.src; } break; case 141: #line 864 "limbo.y" { yyval.node = mkn(Ocont, nil, nil); yyval.node->decl = yypt[-1].yyv.ids; yyval.node->src = yypt[-2].yyv.tok.src; } break; case 142: #line 870 "limbo.y" { yyval.node = mkn(Oret, yypt[-1].yyv.node, nil); yyval.node->src = yypt[-2].yyv.tok.src; if(yypt[-1].yyv.node->op == Onothing) yyval.node->left = nil; else yyval.node->src.stop = yypt[-1].yyv.node->src.stop; } break; case 143: #line 879 "limbo.y" { yyval.node = mkn(Ospawn, yypt[-1].yyv.node, nil); yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-1].yyv.node->src.stop; } break; case 144: #line 885 "limbo.y" { yyval.node = mkn(Oraise, yypt[-1].yyv.node, nil); yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-1].yyv.node->src.stop; } break; case 145: #line 891 "limbo.y" { yyval.node = mkn(Ocase, yypt[-3].yyv.node, caselist(yypt[-1].yyv.node, nil)); yyval.node->src = yypt[-3].yyv.node->src; yyval.node->decl = yypt[-5].yyv.ids; } break; case 146: #line 897 "limbo.y" { yyval.node = mkn(Oalt, caselist(yypt[-1].yyv.node, nil), nil); yyval.node->src = yypt[-3].yyv.tok.src; yyval.node->decl = yypt[-4].yyv.ids; } break; case 147: #line 903 "limbo.y" { yyval.node = mkn(Opick, mkbin(Odas, mkname(&yypt[-5].yyv.tok.src, yypt[-5].yyv.tok.v.idval), yypt[-3].yyv.node), caselist(yypt[-1].yyv.node, nil)); yyval.node->src.start = yypt[-5].yyv.tok.src.start; yyval.node->src.stop = yypt[-3].yyv.node->src.stop; yyval.node->decl = yypt[-7].yyv.ids; } break; case 148: #line 910 "limbo.y" { yyval.node = mkn(Oexit, nil, nil); yyval.node->src = yypt[-1].yyv.tok.src; } break; case 149: #line 915 "limbo.y" { if(yypt[-6].yyv.node == nil){ yypt[-6].yyv.node = mkn(Onothing, nil, nil); yypt[-6].yyv.node->src.start = curline(); yypt[-6].yyv.node->src.stop = curline(); } yypt[-6].yyv.node = mkscope(rotater(yypt[-6].yyv.node)); yyval.node = mkbin(Oexstmt, yypt[-6].yyv.node, mkn(Oexcept, yypt[-3].yyv.node, caselist(yypt[-1].yyv.node, nil))); } break; case 150: #line 933 "limbo.y" { yyval.ids = nil; } break; case 151: #line 937 "limbo.y" { if(yypt[-1].yyv.ids->next != nil) yyerror("only one identifier allowed in a label"); yyval.ids = yypt[-1].yyv.ids; } break; case 152: #line 945 "limbo.y" { yyval.ids = nil; } break; case 153: #line 949 "limbo.y" { yyval.ids = mkids(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval, nil, nil); } break; case 154: #line 955 "limbo.y" { yypt[-1].yyv.node->left->right->right = yypt[-0].yyv.node; yyval.node = yypt[-1].yyv.node; } break; case 155: #line 962 "limbo.y" { yyval.node = mkunary(Oseq, mkscope(mkunary(Olabel, rotater(yypt[-1].yyv.node)))); } break; case 156: #line 966 "limbo.y" { yypt[-3].yyv.node->left->right->right = yypt[-2].yyv.node; yyval.node = mkbin(Oseq, mkscope(mkunary(Olabel, rotater(yypt[-1].yyv.node))), yypt[-3].yyv.node); } break; case 157: #line 973 "limbo.y" { yypt[-1].yyv.node->left->right = mkscope(yypt[-0].yyv.node); yyval.node = yypt[-1].yyv.node; } break; case 158: #line 980 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node))); } break; case 159: #line 984 "limbo.y" { yypt[-3].yyv.node->left->right = mkscope(yypt[-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node)), yypt[-3].yyv.node); } break; case 160: #line 991 "limbo.y" { yypt[-1].yyv.node->left->right = mkscope(yypt[-0].yyv.node); yyval.node = yypt[-1].yyv.node; } break; case 161: #line 998 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node))); } break; case 162: #line 1002 "limbo.y" { yypt[-3].yyv.node->left->right = mkscope(yypt[-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node)), yypt[-3].yyv.node); } break; case 164: #line 1010 "limbo.y" { yyval.node = mkbin(Orange, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 165: #line 1014 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node->src = yypt[-0].yyv.tok.src; } break; case 166: #line 1019 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 167: #line 1023 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 168: #line 1031 "limbo.y" { yypt[-1].yyv.node->left->right = mkscope(yypt[-0].yyv.node); yyval.node = yypt[-1].yyv.node; } break; case 169: #line 1038 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node))); } break; case 170: #line 1042 "limbo.y" { yypt[-3].yyv.node->left->right = mkscope(yypt[-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yypt[-1].yyv.node)), yypt[-3].yyv.node); } break; case 171: #line 1049 "limbo.y" { yyval.node = mkname(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 172: #line 1053 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node->src = yypt[-0].yyv.tok.src; } break; case 173: #line 1058 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 174: #line 1062 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 175: #line 1070 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = curline(); yyval.node->src.stop = yyval.node->src.start; } break; case 178: #line 1080 "limbo.y" { yyval.node = mkbin(Oas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 179: #line 1084 "limbo.y" { yyval.node = mkbin(Oandas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 180: #line 1088 "limbo.y" { yyval.node = mkbin(Ooras, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 181: #line 1092 "limbo.y" { yyval.node = mkbin(Oxoras, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 182: #line 1096 "limbo.y" { yyval.node = mkbin(Olshas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 183: #line 1100 "limbo.y" { yyval.node = mkbin(Orshas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 184: #line 1104 "limbo.y" { yyval.node = mkbin(Oaddas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 185: #line 1108 "limbo.y" { yyval.node = mkbin(Osubas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 186: #line 1112 "limbo.y" { yyval.node = mkbin(Omulas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 187: #line 1116 "limbo.y" { yyval.node = mkbin(Odivas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 188: #line 1120 "limbo.y" { yyval.node = mkbin(Omodas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 189: #line 1124 "limbo.y" { yyval.node = mkbin(Oexpas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 190: #line 1128 "limbo.y" { yyval.node = mkbin(Osnd, yypt[-3].yyv.node, yypt[-0].yyv.node); } break; case 191: #line 1132 "limbo.y" { yyval.node = mkbin(Osnd, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 192: #line 1136 "limbo.y" { yyval.node = mkbin(Odas, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 193: #line 1140 "limbo.y" { yyval.node = mkn(Oload, yypt[-0].yyv.node, nil); yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.node->src.stop; yyval.node->ty = mkidtype(&yypt[-1].yyv.tok.src, yypt[-1].yyv.tok.v.idval); } break; case 194: #line 1147 "limbo.y" { yyval.node = mkbin(Oexp, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 195: #line 1151 "limbo.y" { yyval.node = mkbin(Omul, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 196: #line 1155 "limbo.y" { yyval.node = mkbin(Odiv, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 197: #line 1159 "limbo.y" { yyval.node = mkbin(Omod, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 198: #line 1163 "limbo.y" { yyval.node = mkbin(Oadd, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 199: #line 1167 "limbo.y" { yyval.node = mkbin(Osub, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 200: #line 1171 "limbo.y" { yyval.node = mkbin(Orsh, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 201: #line 1175 "limbo.y" { yyval.node = mkbin(Olsh, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 202: #line 1179 "limbo.y" { yyval.node = mkbin(Olt, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 203: #line 1183 "limbo.y" { yyval.node = mkbin(Ogt, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 204: #line 1187 "limbo.y" { yyval.node = mkbin(Oleq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 205: #line 1191 "limbo.y" { yyval.node = mkbin(Ogeq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 206: #line 1195 "limbo.y" { yyval.node = mkbin(Oeq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 207: #line 1199 "limbo.y" { yyval.node = mkbin(Oneq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 208: #line 1203 "limbo.y" { yyval.node = mkbin(Oand, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 209: #line 1207 "limbo.y" { yyval.node = mkbin(Oxor, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 210: #line 1211 "limbo.y" { yyval.node = mkbin(Oor, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 211: #line 1215 "limbo.y" { yyval.node = mkbin(Ocons, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 212: #line 1219 "limbo.y" { yyval.node = mkbin(Oandand, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 213: #line 1223 "limbo.y" { yyval.node = mkbin(Ooror, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 215: #line 1230 "limbo.y" { yypt[-0].yyv.node->src.start = yypt[-1].yyv.tok.src.start; yyval.node = yypt[-0].yyv.node; } break; case 216: #line 1235 "limbo.y" { yyval.node = mkunary(Oneg, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 217: #line 1240 "limbo.y" { yyval.node = mkunary(Onot, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 218: #line 1245 "limbo.y" { yyval.node = mkunary(Ocomp, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 219: #line 1250 "limbo.y" { yyval.node = mkunary(Oind, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 220: #line 1255 "limbo.y" { yyval.node = mkunary(Opreinc, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 221: #line 1260 "limbo.y" { yyval.node = mkunary(Opredec, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 222: #line 1265 "limbo.y" { yyval.node = mkunary(Orcv, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 223: #line 1270 "limbo.y" { yyval.node = mkunary(Ohd, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 224: #line 1275 "limbo.y" { yyval.node = mkunary(Otl, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 225: #line 1280 "limbo.y" { yyval.node = mkunary(Olen, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 226: #line 1285 "limbo.y" { yyval.node = mkunary(Oref, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 227: #line 1290 "limbo.y" { yyval.node = mkunary(Otagof, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; } break; case 228: #line 1295 "limbo.y" { yyval.node = mkn(Oarray, yypt[-3].yyv.node, nil); yyval.node->ty = mktype(&yypt[-5].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tarray, yypt[-0].yyv.type, nil); yyval.node->src = yyval.node->ty->src; } break; case 229: #line 1301 "limbo.y" { yyval.node = mkn(Oarray, yypt[-5].yyv.node, yypt[-1].yyv.node); yyval.node->src.start = yypt[-7].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 230: #line 1307 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node->src.start = yypt[-5].yyv.tok.src.start; yyval.node->src.stop = yypt[-4].yyv.tok.src.stop; yyval.node = mkn(Oarray, yyval.node, yypt[-1].yyv.node); yyval.node->src.start = yypt[-6].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 231: #line 1316 "limbo.y" { yyval.node = etolist(yypt[-1].yyv.node); yyval.node->src.start = yypt[-4].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 232: #line 1322 "limbo.y" { yyval.node = mkn(Ochan, nil, nil); yyval.node->ty = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tchan, yypt[-0].yyv.type, nil); yyval.node->src = yyval.node->ty->src; } break; case 233: #line 1328 "limbo.y" { yyval.node = mkn(Ochan, yypt[-3].yyv.node, nil); yyval.node->ty = mktype(&yypt[-5].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tchan, yypt[-0].yyv.type, nil); yyval.node->src = yyval.node->ty->src; } break; case 234: #line 1334 "limbo.y" { yyval.node = mkunary(Ocast, yypt[-0].yyv.node); yyval.node->ty = mktype(&yypt[-3].yyv.tok.src.start, &yypt[-0].yyv.node->src.stop, Tarray, mkidtype(&yypt[-1].yyv.tok.src, yypt[-1].yyv.tok.v.idval), nil); yyval.node->src = yyval.node->ty->src; } break; case 235: #line 1340 "limbo.y" { yyval.node = mkunary(Ocast, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; yyval.node->ty = mkidtype(&yyval.node->src, yypt[-1].yyv.tok.v.idval); } break; case 236: #line 1346 "limbo.y" { yyval.node = mkunary(Ocast, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; yyval.node->ty = mkidtype(&yyval.node->src, yypt[-1].yyv.tok.v.idval); } break; case 237: #line 1352 "limbo.y" { yyval.node = mkunary(Ocast, yypt[-0].yyv.node); yyval.node->src.start = yypt[-1].yyv.tok.src.start; yyval.node->ty = yypt[-1].yyv.type; } break; case 239: #line 1361 "limbo.y" { yyval.node = mkn(Ocall, yypt[-3].yyv.node, yypt[-1].yyv.node); yyval.node->src.start = yypt[-3].yyv.node->src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 240: #line 1367 "limbo.y" { yyval.node = yypt[-1].yyv.node; if(yypt[-1].yyv.node->op == Oseq) yyval.node = mkn(Otuple, rotater(yypt[-1].yyv.node), nil); else yyval.node->flags |= PARENS; yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 241: #line 1377 "limbo.y" { yyval.node = mkbin(Odot, yypt[-2].yyv.node, mkname(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval)); } break; case 242: #line 1381 "limbo.y" { yyval.node = mkbin(Omdot, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 243: #line 1385 "limbo.y" { yyval.node = mkbin(Oindex, yypt[-3].yyv.node, yypt[-1].yyv.node); yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 244: #line 1390 "limbo.y" { if(yypt[-3].yyv.node->op == Onothing) yypt[-3].yyv.node->src = yypt[-2].yyv.tok.src; if(yypt[-1].yyv.node->op == Onothing) yypt[-1].yyv.node->src = yypt[-2].yyv.tok.src; yyval.node = mkbin(Oslice, yypt[-5].yyv.node, mkbin(Oseq, yypt[-3].yyv.node, yypt[-1].yyv.node)); yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 245: #line 1399 "limbo.y" { yyval.node = mkunary(Oinc, yypt[-1].yyv.node); yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 246: #line 1404 "limbo.y" { yyval.node = mkunary(Odec, yypt[-1].yyv.node); yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 247: #line 1409 "limbo.y" { yyval.node = mksconst(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 248: #line 1413 "limbo.y" { yyval.node = mkconst(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.ival); if(yypt[-0].yyv.tok.v.ival > 0x7fffffff || yypt[-0].yyv.tok.v.ival < -0x7fffffff) yyval.node->ty = tbig; yyval.node = yyval.node; } break; case 249: #line 1420 "limbo.y" { yyval.node = mkrconst(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.rval); } break; case 250: #line 1424 "limbo.y" { yyval.node = mkbin(Oindex, yypt[-5].yyv.node, rotater(mkbin(Oseq, yypt[-3].yyv.node, yypt[-1].yyv.node))); yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 251: #line 1431 "limbo.y" { yyval.node = mkname(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 252: #line 1435 "limbo.y" { yyval.node = mknil(&yypt[-0].yyv.tok.src); } break; case 253: #line 1441 "limbo.y" { yyval.node = mkn(Otuple, rotater(yypt[-1].yyv.node), nil); yyval.node->src.start = yypt[-2].yyv.tok.src.start; yyval.node->src.stop = yypt[-0].yyv.tok.src.stop; } break; case 255: #line 1450 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 258: #line 1460 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node->ty = mkidtype(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); yyval.node->src = yyval.node->ty->src; } break; case 259: #line 1466 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node->ty = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tarray, yypt[-0].yyv.type, nil); yyval.node->src = yyval.node->ty->src; } break; case 260: #line 1472 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node->ty = mktype(&yypt[-2].yyv.tok.src.start, &yypt[-0].yyv.type->src.stop, Tlist, yypt[-0].yyv.type, nil); yyval.node->src = yyval.node->ty->src; } break; case 261: #line 1478 "limbo.y" { yyval.node = mkn(Otype, nil ,nil); yyval.node->ty = yypt[-0].yyv.type; yyval.node->ty->flags |= CYCLIC; yyval.node->src = yyval.node->ty->src; } break; case 262: #line 1487 "limbo.y" { yyval.node = mkname(&yypt[-0].yyv.tok.src, yypt[-0].yyv.tok.v.idval); } break; case 263: #line 1491 "limbo.y" { yyval.node = nil; } break; case 266: #line 1499 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 267: #line 1503 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 268: #line 1509 "limbo.y" { yyval.node = nil; } break; case 269: #line 1513 "limbo.y" { yyval.node = rotater(yypt[-0].yyv.node); } break; case 273: #line 1524 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 274: #line 1530 "limbo.y" { yyval.node = rotater(yypt[-0].yyv.node); } break; case 275: #line 1534 "limbo.y" { yyval.node = rotater(yypt[-1].yyv.node); } break; case 277: #line 1541 "limbo.y" { yyval.node = mkbin(Oseq, yypt[-2].yyv.node, yypt[-0].yyv.node); } break; case 278: #line 1547 "limbo.y" { yyval.node = mkn(Oelem, nil, yypt[-0].yyv.node); yyval.node->src = yypt[-0].yyv.node->src; } break; case 279: #line 1552 "limbo.y" { yyval.node = mkbin(Oelem, rotater(yypt[-2].yyv.node), yypt[-0].yyv.node); } break; case 280: #line 1577 "limbo.y" { if(yypt[-1].yyv.node->op == Oseq) yypt[-1].yyv.node->right->left = rotater(yypt[-0].yyv.node); else yypt[-1].yyv.node->left = rotater(yypt[-0].yyv.node); yyval.node = yypt[-1].yyv.node; } break; case 281: #line 1587 "limbo.y" { yyval.node = typedecl(yypt[-1].yyv.ids, mktype(&yypt[-1].yyv.ids->src.start, &yypt[-0].yyv.tok.src.stop, Tpoly, nil, nil)); } break; case 282: #line 1591 "limbo.y" { if(yypt[-3].yyv.node->op == Oseq) yypt[-3].yyv.node->right->left = rotater(yypt[-2].yyv.node); else yypt[-3].yyv.node->left = rotater(yypt[-2].yyv.node); yyval.node = mkbin(Oseq, yypt[-3].yyv.node, typedecl(yypt[-1].yyv.ids, mktype(&yypt[-1].yyv.ids->src.start, &yypt[-0].yyv.tok.src.stop, Tpoly, nil, nil))); } break; } goto yystack; /* stack new state and value */ }