implement Limbo; #line 2 "limbo.y" include "limbo.m"; include "draw.m"; Limbo: module { init: fn(ctxt: ref Draw->Context, argv: list of string); YYSTYPE: adt{ tok: Tok; ids: ref Decl; node: ref Node; ty: ref Type; types: ref Typelist; }; YYLEX: adt { lval: YYSTYPE; lex: fn(nil: self ref YYLEX): int; error: fn(nil: self ref YYLEX, err: string); }; Landeq: con 57346; Loreq: con 57347; Lxoreq: con 57348; Llsheq: con 57349; Lrsheq: con 57350; Laddeq: con 57351; Lsubeq: con 57352; Lmuleq: con 57353; Ldiveq: con 57354; Lmodeq: con 57355; Lexpeq: con 57356; Ldeclas: con 57357; Lload: con 57358; Loror: con 57359; Landand: con 57360; Lcons: con 57361; Leq: con 57362; Lneq: con 57363; Lleq: con 57364; Lgeq: con 57365; Llsh: con 57366; Lrsh: con 57367; Lexp: con 57368; Lcomm: con 57369; Linc: con 57370; Ldec: con 57371; Lof: con 57372; Lref: con 57373; Lif: con 57374; Lelse: con 57375; Lfn: con 57376; Lexcept: con 57377; Lraises: con 57378; Lmdot: con 57379; Lto: con 57380; Lor: con 57381; Lrconst: con 57382; Lconst: con 57383; Lid: con 57384; Ltid: con 57385; Lsconst: con 57386; Llabs: con 57387; Lnil: con 57388; Llen: con 57389; Lhd: con 57390; Ltl: con 57391; Ltagof: con 57392; Limplement: con 57393; Limport: con 57394; Linclude: con 57395; Lcon: con 57396; Ltype: con 57397; Lmodule: con 57398; Lcyclic: con 57399; Ladt: con 57400; Larray: con 57401; Llist: con 57402; Lchan: con 57403; Lself: con 57404; Ldo: con 57405; Lwhile: con 57406; Lfor: con 57407; Lbreak: con 57408; Lalt: con 57409; Lcase: con 57410; Lpick: con 57411; Lcont: con 57412; Lreturn: con 57413; Lexit: con 57414; Lspawn: con 57415; Lraise: con 57416; Lfix: con 57417; Ldynamic: con 57418; }; #line 27 "limbo.y" # # lex.b # signdump: string; # name of function for sig debugging superwarn: int; debug: array of int; noline: Line; nosrc: Src; arrayz: int; oldcycles: int; emitcode: string; # emit stub routines for system module functions emitdyn: int; # emit as above but for dynamic modules emitsbl: string; # emit symbol file for sysm modules emitstub: int; # emit type and call frames for system modules emittab: string; # emit table of runtime functions for this module errors: int; mustcompile: int; dontcompile: int; asmsym: int; # generate symbols in assembly language? bout: ref Bufio->Iobuf; # output file bsym: ref Bufio->Iobuf; # symbol output file; nil => no sym out gendis: int; # generate dis or asm? fixss: int; newfnptr: int; # ISELF and -ve indices optims: int; # # decls.b # scope: int; # impmod: ref Sym; # name of implementation module impmods: ref Decl; # name of implementation module(s) nildecl: ref Decl; # declaration for limbo's nil selfdecl: ref Decl; # declaration for limbo's self # # types.b # tany: ref Type; tbig: ref Type; tbyte: ref Type; terror: ref Type; tint: ref Type; tnone: ref Type; treal: ref Type; tstring: ref Type; texception: ref Type; tunknown: ref Type; tfnptr: ref Type; rtexception: ref Type; descriptors: ref Desc; # list of all possible descriptors tattr: array of Tattr; # # nodes.b # opcommute: array of int; oprelinvert: array of int; isused: array of int; casttab: array of array of int; # instruction to cast from [1] to [2] nfns: int; # functions defined nfnexp: int; fns: array of ref Decl; # decls for fns defined tree: ref Node; # root of parse tree parset: int; # time to parse checkt: int; # time to typecheck gent: int; # time to generate code writet: int; # time to write out code symt: int; # time to write out symbols YYEOFCODE: con 1; YYERRCODE: con 2; YYMAXDEPTH: con 200; #line 1636 "limbo.y" include "ipints.m"; include "crypt.m"; sys: Sys; print, fprint, sprint: import sys; bufio: Bufio; Iobuf: import bufio; str: String; crypt:Crypt; md5: import crypt; math: Math; import_real, export_real, isnan: import math; yyctxt: ref YYLEX; canonnan: real; debug = array[256] of {* => 0}; noline = -1; nosrc = Src(-1, -1); infile: string; # front end include "arg.m"; include "lex.b"; include "types.b"; include "nodes.b"; include "decls.b"; include "typecheck.b"; # back end include "gen.b"; include "ecom.b"; include "asm.b"; include "dis.b"; include "sbl.b"; include "stubs.b"; include "com.b"; include "optim.b"; init(nil: ref Draw->Context, argv: list of string) { s: string; sys = load Sys Sys->PATH; crypt = load Crypt Crypt->PATH; math = load Math Math->PATH; bufio = load Bufio Bufio->PATH; if(bufio == nil){ sys->print("can't load %s: %r\n", Bufio->PATH); raise("fail:bad module"); } str = load String String->PATH; if(str == nil){ sys->print("can't load %s: %r\n", String->PATH); raise("fail:bad module"); } stderr = sys->fildes(2); yyctxt = ref YYLEX; math->FPcontrol(0, Math->INVAL|Math->ZDIV|Math->OVFL|Math->UNFL|Math->INEX); na := array[1] of {0.}; import_real(array[8] of {byte 16r7f, * => byte 16rff}, na); canonnan = na[0]; if(!isnan(canonnan)) fatal("bad canonical NaN"); lexinit(); typeinit(); optabinit(); gendis = 1; asmsym = 0; maxerr = 20; ofile := ""; ext := ""; arg := Arg.init(argv); while(c := arg.opt()){ case c{ 'Y' => emitsbl = arg.arg(); if(emitsbl == nil) usage(); 'C' => dontcompile = 1; '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 = arg.arg(); for(i := 0; i < len s; i++){ c = s[i]; if(c < len debug) debug[c] = 1; } 'I' => s = arg.arg(); if(s == "") usage(); addinclude(s); 'G' => asmsym = 1; 'S' => gendis = 0; 'a' => emitstub = 1; 'A' => emitstub = emitdyn = 1; 'c' => mustcompile = 1; 'e' => maxerr = 1000; 'f' => fabort = 1; 'F' => newfnptr = 1; 'g' => dosym = 1; 'i' => dontinline = 1; 'o' => ofile = arg.arg(); 'O' => optims = 1; 's' => s = arg.arg(); if(s != nil) fixss = int s; 't' => emittab = arg.arg(); if(emittab == nil) usage(); 'T' => emitcode = arg.arg(); if(emitcode == nil) usage(); 'd' => emitcode = arg.arg(); if(emitcode == nil) usage(); emitdyn = 1; 'w' => superwarn = dowarn; dowarn = 1; 'x' => ext = arg.arg(); 'X' => signdump = arg.arg(); 'z' => arrayz = 1; 'y' => oldcycles = 1; * => usage(); } } addinclude("/module"); argv = arg.argv; arg = nil; if(argv == nil){ usage(); }else if(ofile != nil){ if(len argv != 1) usage(); translate(hd argv, ofile, mkfileext(ofile, ".dis", ".sbl")); }else{ pr := len argv != 1; if(ext == ""){ ext = ".s"; if(gendis) ext = ".dis"; } for(; argv != nil; argv = tl argv){ file := hd argv; (nil, s) = str->splitr(file, "/"); if(pr) print("%s:\n", s); out := mkfileext(s, ".b", ext); translate(file, out, mkfileext(out, ext, ".sbl")); } } if (toterrors > 0) raise("fail:errors"); } usage() { fprint(stderr, "usage: limbo [-GSagwe] [-I incdir] [-o outfile] [-{T|t|d} module] [-D debug] file ...\n"); raise("fail:usage"); } mkfileext(file, oldext, ext: string): string { n := len file; n2 := len oldext; if(n >= n2 && file[n-n2:] == oldext) file = file[:n-n2]; return file + ext; } translate(in, out, dbg: string) { infile = in; outfile = out; errors = 0; bins[0] = bufio->open(in, Bufio->OREAD); if(bins[0] == nil){ fprint(stderr, "can't open %s: %r\n", in); toterrors++; return; } doemit := emitcode != "" || emitstub || emittab != "" || emitsbl != ""; if(!doemit){ bout = bufio->create(out, Bufio->OWRITE, 8r666); if(bout == nil){ fprint(stderr, "can't open %s: %r\n", out); toterrors++; bins[0].close(); return; } if(dosym){ bsym = bufio->create(dbg, Bufio->OWRITE, 8r666); if(bsym == nil) fprint(stderr, "can't open %s: %r\n", dbg); } } lexstart(in); popscopes(); typestart(); declstart(); nfnexp = 0; parset = sys->millisec(); yyparse(yyctxt); parset = sys->millisec() - parset; checkt = sys->millisec(); entry := typecheck(!doemit); checkt = sys->millisec() - checkt; modcom(entry); fns = nil; nfns = 0; descriptors = nil; if(debug['T']) print("times: parse=%d type=%d: gen=%d write=%d symbols=%d\n", parset, checkt, gent, writet, symt); if(bout != nil) bout.close(); if(bsym != nil) bsym.close(); toterrors += errors; if(errors && bout != nil) sys->remove(out); if(errors && bsym != nil) sys->remove(dbg); } pwd(): string { workdir := load Workdir Workdir->PATH; if(workdir == nil) cd := "/"; else cd = workdir->init(); # sys->print("pwd: %s\n", cd); return cd; } cleanname(s: string): string { ls, path: list of string; if(s == nil) return nil; if(s[0] != '/' && s[0] != '\\') (nil, ls) = sys->tokenize(pwd(), "/\\"); for( ; ls != nil; ls = tl ls) path = hd ls :: path; (nil, ls) = sys->tokenize(s, "/\\"); for( ; ls != nil; ls = tl ls){ n := hd ls; if(n == ".") ; else if (n == ".."){ if(path != nil) path = tl path; } else path = n :: path; } p := ""; for( ; path != nil; path = tl path) p = "/" + hd path + p; if(p == nil) p = "/"; # sys->print("cleanname: %s\n", p); return p; } srcpath(): string { srcp := cleanname(infile); # sys->print("srcpath: %s\n", srcp); return srcp; } yyexca := array[] of {-1, 1, 1, -1, -2, 0, -1, 3, 1, 3, -2, 0, -1, 17, 39, 88, 50, 62, 54, 88, 99, 62, -2, 253, -1, 211, 59, 29, 71, 29, -2, 0, -1, 230, 1, 2, -2, 0, -1, 274, 50, 176, -2, 258, -1, 309, 59, 41, 71, 41, 91, 41, -2, 0, -1, 311, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 381, 50, 62, 99, 62, -2, 253, -1, 382, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 388, 53, 71, 54, 71, -2, 110, -1, 390, 53, 72, 54, 72, -2, 112, -1, 422, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 429, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 444, 53, 71, 54, 71, -2, 111, -1, 445, 53, 72, 54, 72, -2, 113, -1, 453, 71, 280, 99, 280, -2, 163, -1, 470, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 487, 50, 126, 99, 126, -2, 240, -1, 492, 71, 277, -2, 0, -1, 504, 59, 47, 71, 47, -2, 0, -1, 509, 59, 41, 71, 41, 91, 41, -2, 0, -1, 515, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 549, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 555, 71, 154, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 563, 56, 59, 62, 59, -2, 62, -1, 569, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 574, 71, 157, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 578, 72, 176, -2, 163, -1, 597, 71, 160, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 603, 71, 168, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 607, 72, 175, 85, 150, 86, 150, 87, 150, 89, 150, 90, 150, 91, 150, -2, 0, -1, 610, 50, 62, 56, 171, 62, 171, 99, 62, -2, 253, }; YYNPROD: con 285; YYPRIVATE: con 57344; yytoknames: array of string; yystates: array of string; yydebug: con 0; YYLAST: con 2705; yyact := array[] of { 380, 592, 454, 365, 506, 385, 413, 311, 370, 315, 360, 452, 450, 185, 84, 83, 433, 299, 271, 15, 8, 49, 213, 102, 321, 12, 42, 110, 48, 78, 79, 80, 4, 35, 198, 51, 23, 492, 364, 6, 424, 3, 6, 545, 487, 401, 366, 14, 460, 21, 14, 87, 331, 287, 383, 459, 354, 351, 85, 294, 286, 90, 118, 226, 223, 112, 46, 225, 31, 466, 309, 92, 82, 186, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 310, 117, 423, 182, 183, 184, 88, 89, 86, 322, 205, 105, 208, 71, 10, 287, 287, 10, 350, 600, 518, 586, 77, 40, 548, 350, 119, 350, 295, 32, 32, 295, 287, 44, 119, 486, 484, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 186, 6, 22, 274, 230, 483, 11, 210, 514, 14, 5, 272, 22, 268, 566, 602, 429, 428, 427, 280, 431, 430, 432, 285, 411, 596, 43, 37, 482, 207, 289, 87, 439, 425, 416, 290, 410, 270, 85, 93, 209, 90, 202, 99, 416, 217, 114, 19, 408, 304, 22, 92, 82, 212, 313, 312, 218, 194, 195, 193, 94, 229, 355, 10, 567, 47, 96, 17, 98, 95, 100, 18, 101, 88, 89, 86, 513, 298, 194, 195, 573, 2, 26, 13, 314, 327, 306, 194, 195, 77, 112, 324, 319, 87, 421, 420, 419, 206, 194, 195, 85, 187, 25, 90, 23, 99, 560, 317, 194, 195, 6, 24, 87, 92, 82, 194, 195, 536, 14, 85, 5, 558, 90, 554, 99, 186, 228, 192, 96, 341, 98, 95, 92, 82, 531, 88, 89, 86, 339, 182, 194, 195, 194, 195, 215, 337, 537, 526, 491, 464, 463, 77, 342, 101, 88, 89, 86, 19, 44, 496, 509, 302, 382, 349, 469, 400, 384, 499, 359, 358, 77, 480, 10, 394, 468, 399, 362, 17, 390, 388, 392, 18, 283, 219, 211, 403, 325, 19, 488, 33, 326, 393, 605, 13, 87, 357, 216, 318, 615, 581, 489, 85, 19, 494, 90, 404, 405, 45, 580, 613, 282, 18, 214, 417, 92, 82, 45, 422, 437, 565, 18, 186, 115, 43, 108, 436, 116, 438, 540, 19, 114, 386, 435, 442, 440, 505, 88, 89, 86, 508, 563, 453, 544, 341, 183, 445, 444, 22, 415, 115, 317, 605, 77, 116, 494, 481, 494, 604, 337, 494, 601, 70, 598, 494, 63, 589, 541, 73, 474, 575, 470, 434, 479, 443, 477, 76, 75, 69, 68, 74, 292, 18, 54, 55, 62, 60, 61, 64, 87, 291, 269, 453, 508, 91, 157, 85, 91, 120, 90, 65, 66, 67, 104, 490, 494, 103, 498, 494, 92, 82, 556, 159, 595, 495, 186, 77, 511, 478, 168, 194, 195, 488, 524, 519, 523, 516, 517, 512, 501, 467, 88, 89, 86, 87, 453, 528, 524, 530, 529, 418, 85, 409, 534, 90, 594, 527, 77, 91, 39, 91, 533, 538, 330, 92, 82, 224, 546, 91, 106, 569, 547, 542, 524, 36, 553, 34, 402, 557, 91, 593, 500, 555, 300, 501, 398, 88, 89, 86, 158, 336, 161, 333, 162, 163, 561, 564, 442, 317, 201, 200, 197, 77, 160, 159, 571, 179, 447, 578, 570, 576, 572, 574, 177, 478, 81, 72, 332, 97, 181, 524, 446, 584, 180, 177, 585, 73, 578, 178, 588, 329, 227, 347, 346, 76, 75, 45, 562, 74, 41, 18, 415, 203, 597, 607, 587, 549, 599, 478, 387, 578, 603, 606, 91, 328, 222, 221, 608, 550, 612, 476, 475, 472, 614, 426, 137, 135, 135, 478, 196, 91, 199, 39, 91, 91, 188, 91, 19, 525, 204, 361, 539, 308, 91, 183, 168, 288, 369, 121, 1, 220, 138, 139, 140, 137, 135, 465, 91, 91, 141, 142, 138, 139, 140, 137, 135, 478, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 273, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 29, 344, 275, 27, 87, 316, 543, 583, 582, 414, 91, 85, 30, 87, 90, 28, 504, 503, 591, 590, 85, 16, 284, 90, 92, 82, 91, 412, 307, 356, 9, 552, 91, 92, 82, 449, 551, 522, 521, 293, 7, 451, 296, 297, 283, 338, 88, 89, 86, 267, 507, 372, 199, 91, 109, 88, 89, 86, 107, 113, 343, 111, 77, 91, 91, 20, 320, 323, 38, 0, 0, 77, 0, 0, 0, 0, 0, 91, 91, 0, 0, 91, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 91, 334, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 91, 0, 0, 50, 348, 91, 0, 91, 0, 0, 352, 0, 0, 0, 0, 0, 91, 568, 52, 53, 56, 0, 91, 0, 59, 72, 0, 0, 281, 57, 58, 391, 63, 0, 0, 73, 0, 0, 0, 0, 0, 396, 397, 76, 75, 69, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 0, 406, 0, 91, 0, 0, 0, 91, 0, 65, 66, 67, 87, 0, 0, 0, 0, 0, 0, 85, 0, 0, 90, 0, 0, 77, 0, 0, 91, 0, 0, 0, 92, 82, 0, 0, 367, 0, 0, 0, 196, 91, 0, 0, 0, 0, 0, 0, 0, 448, 0, 50, 407, 457, 88, 89, 86, 0, 461, 0, 462, 0, 0, 0, 0, 0, 52, 53, 56, 97, 77, 0, 59, 379, 0, 473, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 510, 367, 0, 0, 13, 0, 0, 0, 0, 497, 65, 66, 67, 502, 0, 0, 50, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 0, 52, 53, 56, 502, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 535, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 471, 367, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 441, 367, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 363, 609, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 0, 50, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 0, 52, 53, 611, 0, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 610, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 577, 0, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 50, 0, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 52, 53, 455, 0, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 367, 0, 0, 0, 13, 0, 0, 0, 0, 0, 65, 66, 67, 0, 0, 50, 0, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 379, 0, 0, 0, 57, 58, 0, 63, 371, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 381, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 368, 456, 144, 143, 141, 142, 138, 139, 140, 137, 135, 65, 66, 67, 0, 0, 50, 0, 373, 0, 0, 0, 374, 375, 378, 376, 377, 77, 0, 0, 0, 52, 53, 455, 0, 0, 0, 59, 72, 0, 0, 0, 57, 58, 0, 63, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 69, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 0, 87, 0, 52, 53, 56, 0, 0, 85, 59, 72, 90, 0, 77, 57, 58, 0, 63, 0, 0, 73, 92, 82, 0, 0, 0, 0, 0, 76, 75, 69, 276, 74, 0, 18, 54, 55, 62, 60, 61, 64, 301, 243, 88, 89, 86, 0, 0, 0, 0, 279, 0, 277, 278, 67, 50, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 52, 53, 56, 0, 0, 0, 59, 72, 0, 0, 0, 57, 58, 0, 63, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 69, 68, 74, 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, 77, 57, 58, 0, 63, 0, 0, 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, 69, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, 72, 65, 66, 67, 57, 58, 0, 63, 0, 0, 73, 0, 0, 0, 0, 0, 0, 77, 76, 75, 69, 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 77, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 559, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 532, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 485, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 353, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 345, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 305, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 303, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 191, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 190, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 189, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 87, 0, 0, 0, 87, 0, 0, 85, 0, 0, 90, 389, 0, 0, 90, 0, 0, 0, 0, 0, 92, 395, 0, 0, 92, 82, 0, 0, 0, 0, 0, 0, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 89, 86, 0, 88, 89, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 77, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 579, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 520, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 493, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 340, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 0, 0, 335, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 515, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 0, 458, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 136, 0, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, 156, 155, 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, 140, 137, 135, }; yypact := array[] of { 167,-1000, 347, 277,-1000, 198,-1000,-1000, 189, 169, 689, 686, 18, 287, 474,-1000, 468, 546,-1000, 307, -33, 152,-1000,-1000,-1000,-1000,-1000,1579,1579,1579, 1579, 314, 586, 147, 151, 412, 402, 11, 467, 349, -1000, 347, 22,-1000,-1000,-1000, 397,-1000,2250,-1000, 394, 498,1620,1620,1620,1620,1620,1620,1620,1620, 1620,1620,1620,1620,1620, 531, 509, 526,1620, 377, 1620,-1000,1579, 581,-1000,-1000,-1000, 584,2195,2140, 2085, 214,-1000,-1000,-1000, 314, 504, 314, 503, 502, 546,-1000, 549,-1000,-1000, 314,1579, 184,1579, 127, 273, 546, 301, 316, 546, 272, 314, 564, 563, -35, -1000, 464, 17, -36,-1000,-1000,-1000, 537,-1000, 307, -1000, 277,-1000,1579,1579,1579,1579,1579,1579,1579, 1579,1579,1579,1579,1579,1524,1579,1579,1579,1579, 1579,1579,1579,1579,1579,1579,1579,1579,1579,1579, 1579,1579,1579,1579,1579,1579,1579,1579,1579, 390, 525,1457,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000, 809, 309, 271, 314,1579,-1000,-1000,-1000, 20,2645,-1000,1579,-1000, -1000,-1000,-1000,1579, 389, 380, 425, 314, 19, 425, 314, 314, 581,1448, 248,2030,-1000,1579,1975,-1000, 314, 628, 0,-1000,-1000, 143, 307,-1000,-1000, 347, 425,-1000,-1000, 322, 12, 12, 286,-1000,-1000,-1000, 277,2645,2645,2645,2645,2645,2645,2645,2645,2645, 2645,2645,2645,1579, 577,2645, 576, 576, 576, 576, 605, 605, 615, 615,1375,1375,1375,1375,1988,1988, 1935,1881,1827,1774,1774,1720,2666, 562, -46,-1000, 416, 536, 461, -47,2645,-1000,1620, 520, 495, 314, 2532, 493,1620,1579, 425,2493,-1000,1579, 301, 651, 1920, 540, 539, 425,-1000, 314, 425, 425, 412, 15, 425, 314,-1000,-1000,1865,-1000, 16, 150,-1000, 626, 265,1125,-1000,-1000, 14, 254,-1000, 328, 557,-1000, 425,-1000,2255, 425,-1000,-1000,-1000,2645,-1000,-1000, 1579,1457,2251, 664, 425, 488, 264,-1000, 253, -54, 480,2645,-1000,1579,-1000,-1000,1448,1448, 425,-1000, 854,-1000, 425,-1000, 135,-1000,-1000, 450, 123,-1000, 112,-1000, 347,-1000,-1000,-1000, 448, 183,-1000, -10, 120, 573, 90, 371, 371,1579,1579,1579, 119,1579, 2645, 377,1055,-1000,-1000, 347,-1000,-1000,-1000, 314, -1000, 425, 527, 513,2645,1620, 425, 425, 655,1402, -1000,1579, 314,2608, 13, 6, 425, 314,-1000, 232, -1000, -18,-1000,-1000,-1000, 438, 263, 252, 213,-1000, -1000,-1000, 985, 571, 314,-1000,1579, 570, 569,1333, 1579, 260, 355, 115,-1000, 92, 51,1810, 50,-1000, 4,-1000,-1000, 297,-1000,-1000,-1000,-1000, 425,1402, 236, -62,-1000,2455, 410,1620,-1000, 425,-1000,-1000, -1000, 425, 246, 314,1579,-1000, 256, 453, 392, 249, 915, 424,1579, 163,2571,1579,1579, 21, 432,2402, 1402, 610,-1000,-1000,-1000,-1000,-1000,-1000, 408,-1000, 235,-1000,1402,1579,1402,1579,-1000, 221,1755, 347, 1579, 314, 204, 234, 627,-1000, 325, 369,-1000, 626, -1000, 342, 3,-1000,1579,1333, 39, 554, 567,-1000, 1402, 211,-1000, 407,2455,1579,-1000,-1000,2645,-1000, 2645,-1000,-1000, 209,1700, 193,-1000,-1000, 340, 339, -1000, 319, 102, 153,-1000,-1000, 768, 470,1579,1333, 1579, 168,-1000, 366,-1000,1264,-1000,2349,-1000,-1000, -1000, 305, 430,-1000, 296,-1000,-1000,1402,-1000,1333, 36,-1000, 553,-1000,1264,-1000, 362, 183,2455, 469, -1000,-1000, 113,-1000, 359,-1000,1579, 34, 357,-1000, 103,-1000, 354,-1000,-1000,-1000,-1000,1264,-1000, 552, -1000,-1000,-1000,1195,-1000, 469, 306,1333, 295, 183, 377,1620,-1000,-1000,-1000,-1000, }; yypgo := array[] of { 0, 531, 758, 186, 33, 24, 420, 15, 14, 46, 755, 751, 749, 34, 748, 744, 27, 741, 16, 4, 740, 110, 8, 0, 21, 35, 13, 739, 735, 100, 25, 165, 26, 12, 731, 11, 2, 38, 41, 32, 730, 22, 3, 7, 728, 727, 726, 721, 720, 20, 719, 718, 717, 10, 711, 709, 708, 1, 707, 706, 699, 6, 5, 698, 697, 696, 19, 23, 695, 9, 692, 18, 668, 644, 17, 637, 636, 635, 634, }; yyr1 := array[] of { 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, 78, 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, }; yyr2 := array[] of { 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, 0, 4, 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, }; yychk := array[] of { -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, 49, 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, -3, 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, -78, -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, -41, 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, }; yydef := array[] of { 0, -2, 0, -2, 4, 0, 7, 8, 0, 0, 0, 17, 0, 0, 0, 25, 0, -2, 254, 0, 61, 0, 62, 5, 6, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 95, 93, 97, 121, 0, 0, 266, 267, 253, 0, 1, 0, 177, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 238, 0, 0, 249, 250, 251, 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, 255, 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, 270, 0, 0, 175, 247, 248, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 0, 0, 0, 0, 0, 235, 236, 237, 0, 274, 241, 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, 268, 269, -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, 271, 243, 244, 256, 0, 0, -2, 259, 260, 0, 0, 0, 0, 0, 0, 0, 232, 0, 240, 0, 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, 245, 175, 0, 0, 0, 263, 0, 0, 234, 0, 272, 0, 275, 242, 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, 282, 283, 92, -2, 0, -2, 0, 0, 257, 258, 70, 261, 262, 0, 0, 231, 273, 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, 246, 252, 228, 0, 0, 276, 278, -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, 284, 0, 230, -2, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, -2, 54, 0, 58, 59, -2, 130, 265, 0, 132, 0, -2, 0, 0, 0, 151, 0, 0, 123, 0, 163, 0, 229, 279, 164, 166, 281, 34, 35, 0, 0, 0, 50, 51, 52, 53, 55, 0, 0, 0, 264, 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, }; yytok1 := array[] of { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 64, 3, 3, 3, 36, 23, 3, 39, 40, 34, 32, 99, 33, 54, 35, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 50, 72, 26, 4, 27, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 41, 3, 42, 22, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 70, 21, 71, 65, }; yytok2 := array[] of { 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, }; yytok3 := array[] of { 0 }; YYSys: module { FD: adt { fd: int; }; fildes: fn(fd: int): ref FD; fprint: fn(fd: ref FD, s: string, *): int; }; yysys: YYSys; yystderr: ref YYSys->FD; YYFLAG: con -1000; # parser for yacc output yytokname(yyc: int): string { if(yyc > 0 && yyc <= len yytoknames && yytoknames[yyc-1] != nil) return yytoknames[yyc-1]; return "<"+string yyc+">"; } yystatname(yys: int): string { if(yys >= 0 && yys < len yystates && yystates[yys] != nil) return yystates[yys]; return "<"+string yys+">\n"; } yylex1(yylex: ref YYLEX): int { c : int; yychar := yylex.lex(); if(yychar <= 0) c = yytok1[0]; else if(yychar < len yytok1) c = yytok1[yychar]; else if(yychar >= YYPRIVATE && yychar < YYPRIVATE+len yytok2) c = yytok2[yychar-YYPRIVATE]; else{ n := len yytok3; c = 0; for(i := 0; i < n; i+=2) { if(yytok3[i+0] == yychar) { c = yytok3[i+1]; break; } } if(c == 0) c = yytok2[1]; # unknown char } if(yydebug >= 3) yysys->fprint(yystderr, "lex %.4ux %s\n", yychar, yytokname(c)); return c; } YYS: adt { yyv: YYSTYPE; yys: int; }; yyparse(yylex: ref YYLEX): int { if(yydebug >= 1 && yysys == nil) { yysys = load YYSys "$Sys"; yystderr = yysys->fildes(2); } yys := array[YYMAXDEPTH] of YYS; yyval: YYSTYPE; yystate := 0; yychar := -1; yynerrs := 0; # number of errors yyerrflag := 0; # error recovery flag yyp := -1; yyn := 0; yystack: for(;;){ # put a state and value onto the stack if(yydebug >= 4) yysys->fprint(yystderr, "char %s in %s", yytokname(yychar), yystatname(yystate)); yyp++; if(yyp >= len yys) yys = (array[len yys * 2] of YYS)[0:] = yys; yys[yyp].yys = yystate; yys[yyp].yyv = yyval; for(;;){ yyn = yypact[yystate]; if(yyn > YYFLAG) { # simple state if(yychar < 0) yychar = yylex1(yylex); yyn += yychar; if(yyn >= 0 && yyn < YYLAST) { yyn = yyact[yyn]; if(yychk[yyn] == yychar) { # valid shift yychar = -1; yyp++; if(yyp >= len yys) yys = (array[len yys * 2] of YYS)[0:] = yys; yystate = yyn; yys[yyp].yys = yystate; yys[yyp].yyv = yylex.lval; if(yyerrflag > 0) yyerrflag--; if(yydebug >= 4) yysys->fprint(yystderr, "char %s in %s", yytokname(yychar), yystatname(yystate)); continue; } } } # default state action yyn = yydef[yystate]; if(yyn == -2) { if(yychar < 0) yychar = yylex1(yylex); # look through exception table for(yyxi:=0;; yyxi+=2) if(yyexca[yyxi] == -1 && yyexca[yyxi+1] == yystate) break; for(yyxi += 2;; yyxi += 2) { yyn = yyexca[yyxi]; if(yyn < 0 || yyn == yychar) break; } yyn = yyexca[yyxi+1]; if(yyn < 0){ yyn = 0; break yystack; } } if(yyn != 0) break; # error ... attempt to resume parsing if(yyerrflag == 0) { # brand new error yylex.error("syntax error"); yynerrs++; if(yydebug >= 1) { yysys->fprint(yystderr, "%s", yystatname(yystate)); yysys->fprint(yystderr, "saw %s\n", yytokname(yychar)); } } if(yyerrflag != 3) { # incompletely recovered error ... try again yyerrflag = 3; # find a state where "error" is a legal shift action while(yyp >= 0) { yyn = yypact[yys[yyp].yys] + YYERRCODE; if(yyn >= 0 && yyn < YYLAST) { yystate = yyact[yyn]; # simulate a shift of "error" if(yychk[yystate] == YYERRCODE) continue yystack; } # the current yyp has no shift onn "error", pop stack if(yydebug >= 2) yysys->fprint(yystderr, "error recovery pops state %d, uncovers %d\n", yys[yyp].yys, yys[yyp-1].yys ); yyp--; } # there is no state on the stack with an error shift ... abort yyn = 1; break yystack; } # no shift yet; clobber input char if(yydebug >= 2) yysys->fprint(yystderr, "error recovery discards %s\n", yytokname(yychar)); if(yychar == YYEOFCODE) { yyn = 1; break yystack; } yychar = -1; # try again in the same state } # reduction by production yyn if(yydebug >= 2) yysys->fprint(yystderr, "reduce %d in:\n\t%s", yyn, yystatname(yystate)); yypt := yyp; yyp -= yyr2[yyn]; # yyval = yys[yyp+1].yyv; yym := yyn; # consult goto table to find next state yyn = yyr1[yyn]; yyg := yypgo[yyn]; yyj := yyg + yys[yyp].yys + 1; if(yyj >= YYLAST || yychk[yystate=yyact[yyj]] != -yyn) yystate = yyact[yyg]; case yym { 1=> #line 153 "limbo.y" { impmods = yys[yypt-1].yyv.ids; } 2=> #line 156 "limbo.y" { tree = rotater(yys[yypt-0].yyv.node); } 3=> #line 160 "limbo.y" { impmods = nil; tree = rotater(yys[yypt-0].yyv.node); } 4=> yyval.node = yys[yyp+1].yyv.node; 5=> #line 168 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else if(yys[yypt-0].yyv.node == nil) yyval.node = yys[yypt-1].yyv.node; else yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 6=> #line 179 "limbo.y" { yyval.node = nil; } 7=> yyval.node = yys[yyp+1].yyv.node; 8=> yyval.node = yys[yyp+1].yyv.node; 9=> yyval.node = yys[yyp+1].yyv.node; 10=> yyval.node = yys[yyp+1].yyv.node; 11=> #line 187 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 12=> #line 191 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 13=> #line 195 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 14=> #line 199 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 15=> #line 203 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; } 16=> #line 208 "limbo.y" { yyerror("illegal declaration"); yyval.node = nil; } 17=> yyval.node = yys[yyp+1].yyv.node; 18=> #line 216 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 19=> #line 222 "limbo.y" { includef(yys[yypt-1].yyv.tok.v.idval); yyval.node = nil; } 20=> #line 227 "limbo.y" { yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); } 21=> #line 231 "limbo.y" { yyval.node = importdecl(yys[yypt-1].yyv.node, yys[yypt-4].yyv.ids); yyval.node.src.start = yys[yypt-4].yyv.ids.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 22=> #line 237 "limbo.y" { yyval.node = vardecl(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty); } 23=> #line 241 "limbo.y" { yyval.node = mkbin(Ovardecli, vardecl(yys[yypt-5].yyv.ids, yys[yypt-3].yyv.ty), varinit(yys[yypt-5].yyv.ids, yys[yypt-1].yyv.node)); } 24=> #line 245 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 25=> yyval.node = yys[yyp+1].yyv.node; 26=> #line 252 "limbo.y" { yyval.node = exdecl(yys[yypt-3].yyv.ids, nil); } 27=> #line 256 "limbo.y" { yyval.node = exdecl(yys[yypt-6].yyv.ids, revids(yys[yypt-2].yyv.ids)); } 28=> #line 262 "limbo.y" { yys[yypt-5].yyv.ids.src.stop = yys[yypt-0].yyv.tok.src.stop; yyval.node = moddecl(yys[yypt-5].yyv.ids, rotater(yys[yypt-1].yyv.node)); } 29=> #line 269 "limbo.y" { yyval.node = nil; } 30=> #line 273 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else if(yys[yypt-0].yyv.node == nil) yyval.node = yys[yypt-1].yyv.node; else yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 31=> #line 282 "limbo.y" { yyval.node = nil; } 32=> #line 288 "limbo.y" { yyval.node = fielddecl(Dglobal, typeids(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty)); } 33=> yyval.node = yys[yyp+1].yyv.node; 34=> #line 293 "limbo.y" { yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); } 35=> #line 297 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 36=> yyval.node = yys[yyp+1].yyv.node; 37=> #line 304 "limbo.y" { yys[yypt-7].yyv.ids.src.stop = yys[yypt-1].yyv.tok.src.stop; yyval.node = adtdecl(yys[yypt-7].yyv.ids, rotater(yys[yypt-2].yyv.node)); yyval.node.ty.polys = yys[yypt-4].yyv.ids; yyval.node.ty.val = rotater(yys[yypt-0].yyv.node); } 38=> #line 311 "limbo.y" { yys[yypt-10].yyv.ids.src.stop = yys[yypt-0].yyv.tok.src.stop; yyval.node = adtdecl(yys[yypt-10].yyv.ids, rotater(yys[yypt-1].yyv.node)); yyval.node.ty.polys = yys[yypt-7].yyv.ids; yyval.node.ty.val = rotater(yys[yypt-4].yyv.node); } 39=> #line 320 "limbo.y" { yyval.node = nil; } 40=> #line 324 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 41=> #line 330 "limbo.y" { yyval.node = nil; } 42=> #line 334 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else if(yys[yypt-0].yyv.node == nil) yyval.node = yys[yypt-1].yyv.node; else yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 43=> #line 343 "limbo.y" { yyval.node = nil; } 44=> yyval.node = yys[yyp+1].yyv.node; 45=> yyval.node = yys[yyp+1].yyv.node; 46=> #line 351 "limbo.y" { yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); } 47=> #line 357 "limbo.y" { yyval.node = nil; } 48=> #line 361 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else if(yys[yypt-0].yyv.node == nil) yyval.node = yys[yypt-1].yyv.node; else yyval.node = mkn(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 49=> #line 372 "limbo.y" { for(d := yys[yypt-4].yyv.ids; d != nil; d = d.next) d.cyc = byte 1; yyval.node = fielddecl(Dfield, typeids(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty)); } 50=> #line 378 "limbo.y" { yyval.node = fielddecl(Dfield, typeids(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty)); } 51=> #line 384 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 52=> #line 390 "limbo.y" { yys[yypt-1].yyv.node.right.right = yys[yypt-0].yyv.node; yyval.node = yys[yypt-1].yyv.node; } 53=> #line 395 "limbo.y" { yyval.node = nil; } 54=> #line 399 "limbo.y" { yyval.node = nil; } 55=> #line 405 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 56=> #line 410 "limbo.y" { yys[yypt-3].yyv.node.right.right = yys[yypt-2].yyv.node; yyval.node = mkn(Opickdecl, yys[yypt-3].yyv.node, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 57=> #line 416 "limbo.y" { yyval.node = mkn(Opickdecl, nil, mkn(Oseq, fielddecl(Dtag, yys[yypt-1].yyv.ids), nil)); typeids(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-1].yyv.ids.src.stop, Tadtpick, nil, nil)); } 58=> #line 423 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 59=> #line 429 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 60=> #line 433 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); } 61=> #line 439 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 62=> #line 445 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 63=> #line 449 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); } 64=> #line 455 "limbo.y" { yyval.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.ty.val = mkbin(Oseq, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); } 65=> #line 460 "limbo.y" { yyval.ty = mktype(yys[yypt-3].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfix, nil, nil); yyval.ty.val = yys[yypt-1].yyv.node; } 66=> #line 467 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, nil); } 67=> #line 471 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, nil); yys[yypt-0].yyv.ty.flags |= CYCLIC; } 68=> #line 476 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-2].yyv.types); } 69=> #line 480 "limbo.y" { yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-3].yyv.types); yys[yypt-0].yyv.ty.flags |= CYCLIC; } 70=> #line 487 "limbo.y" { yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 71=> #line 491 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 72=> #line 495 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 73=> #line 499 "limbo.y" { yyval.ty = mkarrowtype(yys[yypt-2].yyv.ty.src.start, yys[yypt-0].yyv.tok.src.stop, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.tok.v.idval); } 74=> #line 503 "limbo.y" { yyval.ty = mkarrowtype(yys[yypt-5].yyv.ty.src.start, yys[yypt-3].yyv.tok.src.stop, yys[yypt-5].yyv.ty, yys[yypt-3].yyv.tok.v.idval); yyval.ty = mkinsttype(yys[yypt-5].yyv.ty.src, yyval.ty, yys[yypt-1].yyv.types); } 75=> #line 508 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 76=> #line 512 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); } 77=> #line 516 "limbo.y" { if(yys[yypt-1].yyv.ids.next == nil) yyval.ty = yys[yypt-1].yyv.ids.ty; else yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Ttuple, nil, revids(yys[yypt-1].yyv.ids)); } 78=> #line 523 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); } 79=> #line 527 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tlist, yys[yypt-0].yyv.ty, nil); } 80=> #line 531 "limbo.y" { yys[yypt-1].yyv.ty.src.start = yys[yypt-3].yyv.tok.src.start; yys[yypt-1].yyv.ty.polys = yys[yypt-2].yyv.ids; yys[yypt-1].yyv.ty.eraises = yys[yypt-0].yyv.node; yyval.ty = yys[yypt-1].yyv.ty; } 81=> yyval.ty = yys[yyp+1].yyv.ty; 82=> #line 551 "limbo.y" { yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 83=> #line 555 "limbo.y" { yyval.ty = mkinsttype(yys[yypt-3].yyv.tok.src, mkidtype(yys[yypt-3].yyv.tok.src, yys[yypt-3].yyv.tok.v.idval), yys[yypt-1].yyv.types); } 84=> #line 561 "limbo.y" { yyval.ty = mkdottype(yys[yypt-2].yyv.ty.src.start, yys[yypt-0].yyv.tok.src.stop, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.tok.v.idval); } 85=> #line 565 "limbo.y" { yyval.ty = mkdottype(yys[yypt-5].yyv.ty.src.start, yys[yypt-3].yyv.tok.src.stop, yys[yypt-5].yyv.ty, yys[yypt-3].yyv.tok.v.idval); yyval.ty = mkinsttype(yys[yypt-5].yyv.ty.src, yyval.ty, yys[yypt-1].yyv.types); } 86=> #line 572 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.ty.src, nil, yys[yypt-0].yyv.ty, nil); } 87=> #line 576 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.ids.src, nil, yys[yypt-0].yyv.ty, yys[yypt-2].yyv.ids); } 88=> #line 582 "limbo.y" { yyval.ids = nil; } 89=> #line 586 "limbo.y" { yyval.ids = polydecl(yys[yypt-1].yyv.ids); } 90=> #line 592 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, yys[yypt-1].yyv.ids); } 91=> #line 596 "limbo.y" { yyval.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, nil); yyval.ty.varargs = byte 1; } 92=> #line 601 "limbo.y" { yyval.ty = mktype(yys[yypt-4].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tfn, tnone, yys[yypt-3].yyv.ids); yyval.ty.varargs = byte 1; } 93=> #line 608 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 94=> #line 612 "limbo.y" { yys[yypt-2].yyv.ty.tof = yys[yypt-0].yyv.ty; yys[yypt-2].yyv.ty.src.stop = yys[yypt-0].yyv.ty.src.stop; yyval.ty = yys[yypt-2].yyv.ty; } 95=> #line 620 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 96=> #line 624 "limbo.y" { yyval.ty = yys[yypt-4].yyv.ty; yyval.ty.val = rotater(yys[yypt-1].yyv.node); } 97=> #line 631 "limbo.y" { yyval.ids = nil; } 98=> yyval.ids = yys[yyp+1].yyv.ids; 99=> yyval.ids = yys[yyp+1].yyv.ids; 100=> #line 639 "limbo.y" { yyval.ids = appdecls(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ids); } 101=> #line 645 "limbo.y" { yyval.ids = typeids(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ty); } 102=> #line 649 "limbo.y" { yyval.ids = typeids(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ty); for(d := yyval.ids; d != nil; d = d.next) d.implicit = byte 1; } 103=> #line 655 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.node.src, enter("junk", 0), yys[yypt-0].yyv.ty, nil); yyval.ids.store = Darg; yyerror("illegal argument declaration"); } 104=> #line 661 "limbo.y" { yyval.ids = mkids(yys[yypt-2].yyv.node.src, enter("junk", 0), yys[yypt-0].yyv.ty, nil); yyval.ids.store = Darg; yyerror("illegal argument declaration"); } 105=> #line 669 "limbo.y" { yyval.ids = revids(yys[yypt-0].yyv.ids); } 106=> #line 675 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); yyval.ids.store = Darg; } 107=> #line 680 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, nil); yyval.ids.store = Darg; } 108=> #line 685 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, yys[yypt-2].yyv.ids); yyval.ids.store = Darg; } 109=> #line 690 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, yys[yypt-2].yyv.ids); yyval.ids.store = Darg; } 110=> #line 697 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 111=> #line 701 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 112=> #line 705 "limbo.y" { yyval.ty = yys[yypt-0].yyv.ty; } 113=> #line 709 "limbo.y" { yyval.ty = mktype(yys[yypt-1].yyv.tok.src.start, yys[yypt-0].yyv.tok.src.stop, Tref, yys[yypt-0].yyv.ty, nil); } 114=> #line 715 "limbo.y" { yyval.node = fndecl(yys[yypt-3].yyv.node, yys[yypt-2].yyv.ty, yys[yypt-0].yyv.node); nfns++; # patch up polydecs if(yys[yypt-3].yyv.node.op == Odot){ if(yys[yypt-3].yyv.node.right.left != nil){ yys[yypt-2].yyv.ty.polys = yys[yypt-3].yyv.node.right.left.decl; yys[yypt-3].yyv.node.right.left = nil; } if(yys[yypt-3].yyv.node.left.op == Oname && yys[yypt-3].yyv.node.left.left != nil){ yyval.node.decl = yys[yypt-3].yyv.node.left.left.decl; yys[yypt-3].yyv.node.left.left = nil; } } else{ if(yys[yypt-3].yyv.node.left != nil){ yys[yypt-2].yyv.ty.polys = yys[yypt-3].yyv.node.left.decl; yys[yypt-3].yyv.node.left = nil; } } yys[yypt-2].yyv.ty.eraises = yys[yypt-1].yyv.node; yyval.node.src = yys[yypt-3].yyv.node.src; } 115=> #line 741 "limbo.y" { yyval.node = mkn(Otuple, rotater(yys[yypt-1].yyv.node), nil); yyval.node.src.start = yys[yypt-3].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 116=> #line 747 "limbo.y" { yyval.node = mkn(Otuple, mkunary(Oseq, yys[yypt-0].yyv.node), nil); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 117=> #line 753 "limbo.y" { yyval.node = nil; } 118=> #line 759 "limbo.y" { if(yys[yypt-1].yyv.node == nil){ yys[yypt-1].yyv.node = mkn(Onothing, nil, nil); yys[yypt-1].yyv.node.src.start = curline(); yys[yypt-1].yyv.node.src.stop = yys[yypt-1].yyv.node.src.start; } yyval.node = rotater(yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 119=> #line 770 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } 120=> #line 774 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); } 121=> #line 780 "limbo.y" { yyval.node = mkname(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval); if(yys[yypt-0].yyv.ids != nil){ yyval.node.left = mkn(Onothing, nil ,nil); yyval.node.left.decl = yys[yypt-0].yyv.ids; } } 122=> #line 788 "limbo.y" { yyval.node = mkbin(Odot, yys[yypt-3].yyv.node, mkname(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval)); if(yys[yypt-0].yyv.ids != nil){ yyval.node.right.left = mkn(Onothing, nil ,nil); yyval.node.right.left.decl = yys[yypt-0].yyv.ids; } } 123=> #line 798 "limbo.y" { yyval.node = nil; } 124=> #line 802 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else if(yys[yypt-0].yyv.node == nil) yyval.node = yys[yypt-1].yyv.node; else yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 125=> #line 811 "limbo.y" { if(yys[yypt-1].yyv.node == nil) yyval.node = yys[yypt-0].yyv.node; else yyval.node = mkbin(Oseq, yys[yypt-1].yyv.node, yys[yypt-0].yyv.node); } 128=> #line 824 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 129=> #line 830 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 130=> #line 836 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 131=> #line 842 "limbo.y" { if(yys[yypt-1].yyv.node == nil){ yys[yypt-1].yyv.node = mkn(Onothing, nil, nil); yys[yypt-1].yyv.node.src.start = curline(); yys[yypt-1].yyv.node.src.stop = yys[yypt-1].yyv.node.src.start; } yyval.node = mkscope(rotater(yys[yypt-1].yyv.node)); } 132=> #line 851 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 133=> #line 858 "limbo.y" { yyerror("illegal declaration"); yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 134=> #line 865 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; } 135=> #line 869 "limbo.y" { yyval.node = mkn(Oif, yys[yypt-2].yyv.node, mkunary(Oseq, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 136=> #line 875 "limbo.y" { yyval.node = mkn(Oif, yys[yypt-4].yyv.node, mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-6].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; } 137=> #line 881 "limbo.y" { yyval.node = mkunary(Oseq, yys[yypt-0].yyv.node); if(yys[yypt-2].yyv.node.op != Onothing) yyval.node.right = yys[yypt-2].yyv.node; yyval.node = mkbin(Ofor, yys[yypt-4].yyv.node, yyval.node); yyval.node.decl = yys[yypt-9].yyv.ids; if(yys[yypt-6].yyv.node.op != Onothing) yyval.node = mkbin(Oseq, yys[yypt-6].yyv.node, yyval.node); } 138=> #line 891 "limbo.y" { yyval.node = mkn(Ofor, yys[yypt-2].yyv.node, mkunary(Oseq, yys[yypt-0].yyv.node)); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; yyval.node.decl = yys[yypt-5].yyv.ids; } 139=> #line 898 "limbo.y" { yyval.node = mkn(Odo, yys[yypt-2].yyv.node, yys[yypt-5].yyv.node); yyval.node.src.start = yys[yypt-6].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-1].yyv.tok.src.stop; yyval.node.decl = yys[yypt-7].yyv.ids; } 140=> #line 905 "limbo.y" { yyval.node = mkn(Obreak, nil, nil); yyval.node.decl = yys[yypt-1].yyv.ids; yyval.node.src = yys[yypt-2].yyv.tok.src; } 141=> #line 911 "limbo.y" { yyval.node = mkn(Ocont, nil, nil); yyval.node.decl = yys[yypt-1].yyv.ids; yyval.node.src = yys[yypt-2].yyv.tok.src; } 142=> #line 917 "limbo.y" { yyval.node = mkn(Oret, yys[yypt-1].yyv.node, nil); yyval.node.src = yys[yypt-2].yyv.tok.src; if(yys[yypt-1].yyv.node.op == Onothing) yyval.node.left = nil; else yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 143=> #line 926 "limbo.y" { yyval.node = mkn(Ospawn, yys[yypt-1].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 144=> #line 932 "limbo.y" { yyval.node = mkn(Oraise, yys[yypt-1].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-1].yyv.node.src.stop; } 145=> #line 938 "limbo.y" { yyval.node = mkn(Ocase, yys[yypt-3].yyv.node, caselist(yys[yypt-1].yyv.node, nil)); yyval.node.src = yys[yypt-3].yyv.node.src; yyval.node.decl = yys[yypt-5].yyv.ids; } 146=> #line 944 "limbo.y" { yyval.node = mkn(Oalt, caselist(yys[yypt-1].yyv.node, nil), nil); yyval.node.src = yys[yypt-3].yyv.tok.src; yyval.node.decl = yys[yypt-4].yyv.ids; } 147=> #line 950 "limbo.y" { yyval.node = mkn(Opick, mkbin(Odas, mkname(yys[yypt-5].yyv.tok.src, yys[yypt-5].yyv.tok.v.idval), yys[yypt-3].yyv.node), caselist(yys[yypt-1].yyv.node, nil)); yyval.node.src.start = yys[yypt-5].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-3].yyv.node.src.stop; yyval.node.decl = yys[yypt-7].yyv.ids; } 148=> #line 957 "limbo.y" { yyval.node = mkn(Oexit, nil, nil); yyval.node.src = yys[yypt-1].yyv.tok.src; } 149=> #line 962 "limbo.y" { if(yys[yypt-6].yyv.node == nil){ yys[yypt-6].yyv.node = mkn(Onothing, nil, nil); yys[yypt-6].yyv.node.src.start = yys[yypt-6].yyv.node.src.stop = curline(); } yys[yypt-6].yyv.node = mkscope(rotater(yys[yypt-6].yyv.node)); yyval.node = mkbin(Oexstmt, yys[yypt-6].yyv.node, mkn(Oexcept, yys[yypt-3].yyv.node, caselist(yys[yypt-1].yyv.node, nil))); } 150=> #line 977 "limbo.y" { yyval.ids = nil; } 151=> #line 981 "limbo.y" { if(yys[yypt-1].yyv.ids.next != nil) yyerror("only one identifier allowed in a label"); yyval.ids = yys[yypt-1].yyv.ids; } 152=> #line 989 "limbo.y" { yyval.ids = nil; } 153=> #line 993 "limbo.y" { yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); } 154=> #line 999 "limbo.y" { yys[yypt-1].yyv.node.left.right.right = yys[yypt-0].yyv.node; yyval.node = yys[yypt-1].yyv.node; } 155=> #line 1006 "limbo.y" { yyval.node = mkunary(Oseq, mkscope(mkunary(Olabel, rotater(yys[yypt-1].yyv.node)))); } 156=> #line 1010 "limbo.y" { yys[yypt-3].yyv.node.left.right.right = yys[yypt-2].yyv.node; yyval.node = mkbin(Oseq, mkscope(mkunary(Olabel, rotater(yys[yypt-1].yyv.node))), yys[yypt-3].yyv.node); } 157=> #line 1017 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 158=> #line 1024 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 159=> #line 1028 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); } 160=> #line 1035 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 161=> #line 1042 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 162=> #line 1046 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); } 163=> yyval.node = yys[yyp+1].yyv.node; 164=> #line 1054 "limbo.y" { yyval.node = mkbin(Orange, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 165=> #line 1058 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node.src = yys[yypt-0].yyv.tok.src; } 166=> #line 1063 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 167=> #line 1067 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 168=> #line 1075 "limbo.y" { yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 169=> #line 1082 "limbo.y" { yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); } 170=> #line 1086 "limbo.y" { yys[yypt-3].yyv.node.left.right = mkscope(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node)), yys[yypt-3].yyv.node); } 171=> #line 1093 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 172=> #line 1097 "limbo.y" { yyval.node = mkn(Owild, nil, nil); yyval.node.src = yys[yypt-0].yyv.tok.src; } 173=> #line 1102 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 174=> #line 1106 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 175=> #line 1114 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = curline(); yyval.node.src.stop = yyval.node.src.start; } 176=> yyval.node = yys[yyp+1].yyv.node; 177=> yyval.node = yys[yyp+1].yyv.node; 178=> #line 1124 "limbo.y" { yyval.node = mkbin(Oas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 179=> #line 1128 "limbo.y" { yyval.node = mkbin(Oandas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 180=> #line 1132 "limbo.y" { yyval.node = mkbin(Ooras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 181=> #line 1136 "limbo.y" { yyval.node = mkbin(Oxoras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 182=> #line 1140 "limbo.y" { yyval.node = mkbin(Olshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 183=> #line 1144 "limbo.y" { yyval.node = mkbin(Orshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 184=> #line 1148 "limbo.y" { yyval.node = mkbin(Oaddas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 185=> #line 1152 "limbo.y" { yyval.node = mkbin(Osubas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 186=> #line 1156 "limbo.y" { yyval.node = mkbin(Omulas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 187=> #line 1160 "limbo.y" { yyval.node = mkbin(Odivas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 188=> #line 1164 "limbo.y" { yyval.node = mkbin(Omodas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 189=> #line 1168 "limbo.y" { yyval.node = mkbin(Oexpas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 190=> #line 1172 "limbo.y" { yyval.node = mkbin(Osnd, yys[yypt-3].yyv.node, yys[yypt-0].yyv.node); } 191=> #line 1176 "limbo.y" { yyval.node = mkbin(Osnd, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 192=> #line 1180 "limbo.y" { yyval.node = mkbin(Odas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 193=> #line 1184 "limbo.y" { yyval.node = mkn(Oload, yys[yypt-0].yyv.node, nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.node.src.stop; yyval.node.ty = mkidtype(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval); } 194=> #line 1191 "limbo.y" { yyval.node = yyval.node = mkbin(Oexp, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 195=> #line 1195 "limbo.y" { yyval.node = mkbin(Omul, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 196=> #line 1199 "limbo.y" { yyval.node = mkbin(Odiv, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 197=> #line 1203 "limbo.y" { yyval.node = mkbin(Omod, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 198=> #line 1207 "limbo.y" { yyval.node = mkbin(Oadd, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 199=> #line 1211 "limbo.y" { yyval.node = mkbin(Osub, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 200=> #line 1215 "limbo.y" { yyval.node = mkbin(Orsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 201=> #line 1219 "limbo.y" { yyval.node = mkbin(Olsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 202=> #line 1223 "limbo.y" { yyval.node = mkbin(Olt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 203=> #line 1227 "limbo.y" { yyval.node = mkbin(Ogt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 204=> #line 1231 "limbo.y" { yyval.node = mkbin(Oleq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 205=> #line 1235 "limbo.y" { yyval.node = mkbin(Ogeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 206=> #line 1239 "limbo.y" { yyval.node = mkbin(Oeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 207=> #line 1243 "limbo.y" { yyval.node = mkbin(Oneq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 208=> #line 1247 "limbo.y" { yyval.node = mkbin(Oand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 209=> #line 1251 "limbo.y" { yyval.node = mkbin(Oxor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 210=> #line 1255 "limbo.y" { yyval.node = mkbin(Oor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 211=> #line 1259 "limbo.y" { yyval.node = mkbin(Ocons, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 212=> #line 1263 "limbo.y" { yyval.node = mkbin(Oandand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 213=> #line 1267 "limbo.y" { yyval.node = mkbin(Ooror, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 214=> yyval.node = yys[yyp+1].yyv.node; 215=> #line 1274 "limbo.y" { yys[yypt-0].yyv.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node = yys[yypt-0].yyv.node; } 216=> #line 1279 "limbo.y" { yyval.node = mkunary(Oneg, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 217=> #line 1284 "limbo.y" { yyval.node = mkunary(Onot, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 218=> #line 1289 "limbo.y" { yyval.node = mkunary(Ocomp, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 219=> #line 1294 "limbo.y" { yyval.node = mkunary(Oind, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 220=> #line 1299 "limbo.y" { yyval.node = mkunary(Opreinc, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 221=> #line 1304 "limbo.y" { yyval.node = mkunary(Opredec, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 222=> #line 1309 "limbo.y" { yyval.node = mkunary(Orcv, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 223=> #line 1314 "limbo.y" { yyval.node = mkunary(Ohd, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 224=> #line 1319 "limbo.y" { yyval.node = mkunary(Otl, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 225=> #line 1324 "limbo.y" { yyval.node = mkunary(Olen, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 226=> #line 1329 "limbo.y" { yyval.node = mkunary(Oref, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 227=> #line 1334 "limbo.y" { yyval.node = mkunary(Otagof, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; } 228=> #line 1339 "limbo.y" { yyval.node = mkn(Oarray, yys[yypt-3].yyv.node, nil); yyval.node.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 229=> #line 1345 "limbo.y" { yyval.node = mkn(Oarray, yys[yypt-5].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-7].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 230=> #line 1351 "limbo.y" { yyval.node = mkn(Onothing, nil, nil); yyval.node.src.start = yys[yypt-5].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-4].yyv.tok.src.stop; yyval.node = mkn(Oarray, yyval.node, yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-6].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 231=> #line 1360 "limbo.y" { yyval.node = etolist(yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-4].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 232=> #line 1366 "limbo.y" { yyval.node = mkn(Ochan, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 233=> #line 1372 "limbo.y" { yyval.node = mkn(Ochan, yys[yypt-3].yyv.node, nil); yyval.node.ty = mktype(yys[yypt-5].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tchan, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 234=> #line 1378 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.ty = mktype(yys[yypt-3].yyv.tok.src.start, yys[yypt-0].yyv.node.src.stop, Tarray, mkidtype(yys[yypt-1].yyv.tok.src, yys[yypt-1].yyv.tok.v.idval), nil); yyval.node.src = yyval.node.ty.src; } 235=> #line 1384 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.ty = mkidtype(yyval.node.src, yys[yypt-1].yyv.tok.v.idval); } 236=> #line 1390 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.ty = mkidtype(yyval.node.src, yys[yypt-1].yyv.tok.v.idval); } 237=> #line 1396 "limbo.y" { yyval.node = mkunary(Ocast, yys[yypt-0].yyv.node); yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; yyval.node.ty = yys[yypt-1].yyv.ty; } 238=> yyval.node = yys[yyp+1].yyv.node; 239=> #line 1405 "limbo.y" { yyval.node = mkn(Ocall, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.start = yys[yypt-3].yyv.node.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 240=> #line 1411 "limbo.y" { yyval.node = yys[yypt-1].yyv.node; if(yys[yypt-1].yyv.node.op == Oseq) yyval.node = mkn(Otuple, rotater(yys[yypt-1].yyv.node), nil); else yyval.node.flags |= byte PARENS; yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 241=> #line 1421 "limbo.y" { # n := mkdeclname($1, mkids($1, enter(".fn"+string nfnexp++, 0), nil, nil)); # $$ = fndef(n, $2); # nfns++; } 242=> #line 1426 "limbo.y" { # $$ = fnfinishdef($3, $4); # $$ = mkdeclname($1, $$.left.decl); yyerror("urt unk"); yyval.node = nil; } 243=> #line 1433 "limbo.y" { yyval.node = mkbin(Odot, yys[yypt-2].yyv.node, mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval)); } 244=> #line 1437 "limbo.y" { yyval.node = mkbin(Omdot, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 245=> #line 1441 "limbo.y" { yyval.node = mkbin(Oindex, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 246=> #line 1446 "limbo.y" { if(yys[yypt-3].yyv.node.op == Onothing) yys[yypt-3].yyv.node.src = yys[yypt-2].yyv.tok.src; if(yys[yypt-1].yyv.node.op == Onothing) yys[yypt-1].yyv.node.src = yys[yypt-2].yyv.tok.src; yyval.node = mkbin(Oslice, yys[yypt-5].yyv.node, mkbin(Oseq, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node)); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 247=> #line 1455 "limbo.y" { yyval.node = mkunary(Oinc, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 248=> #line 1460 "limbo.y" { yyval.node = mkunary(Odec, yys[yypt-1].yyv.node); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 249=> #line 1465 "limbo.y" { yyval.node = mksconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 250=> #line 1469 "limbo.y" { yyval.node = mkconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.ival); if(yys[yypt-0].yyv.tok.v.ival > big 16r7fffffff || yys[yypt-0].yyv.tok.v.ival < big -16r7fffffff) yyval.node.ty = tbig; } 251=> #line 1475 "limbo.y" { yyval.node = mkrconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.rval); } 252=> #line 1479 "limbo.y" { yyval.node = mkbin(Oindex, yys[yypt-5].yyv.node, rotater(mkbin(Oseq, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node))); yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 253=> #line 1486 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 254=> #line 1490 "limbo.y" { yyval.node = mknil(yys[yypt-0].yyv.tok.src); } 255=> #line 1496 "limbo.y" { yyval.node = mkn(Otuple, rotater(yys[yypt-1].yyv.node), nil); yyval.node.src.start = yys[yypt-2].yyv.tok.src.start; yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; } 256=> yyval.node = yys[yyp+1].yyv.node; 257=> #line 1505 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 258=> yyval.node = yys[yyp+1].yyv.node; 259=> yyval.node = yys[yyp+1].yyv.node; 260=> #line 1515 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); yyval.node.src = yyval.node.ty.src; } 261=> #line 1521 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tarray, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 262=> #line 1527 "limbo.y" { yyval.node = mkn(Otype, nil, nil); yyval.node.ty = mktype(yys[yypt-2].yyv.tok.src.start, yys[yypt-0].yyv.ty.src.stop, Tlist, yys[yypt-0].yyv.ty, nil); yyval.node.src = yyval.node.ty.src; } 263=> #line 1533 "limbo.y" { yyval.node = mkn(Otype, nil ,nil); yyval.node.ty = yys[yypt-0].yyv.ty; yyval.node.ty.flags |= CYCLIC; yyval.node.src = yyval.node.ty.src; } 264=> #line 1542 "limbo.y" { yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); } 265=> #line 1546 "limbo.y" { yyval.node = nil; } 266=> yyval.node = yys[yyp+1].yyv.node; 267=> yyval.node = yys[yyp+1].yyv.node; 268=> #line 1554 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 269=> #line 1558 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 270=> #line 1564 "limbo.y" { yyval.node = nil; } 271=> #line 1568 "limbo.y" { yyval.node = rotater(yys[yypt-0].yyv.node); } 272=> yyval.node = yys[yyp+1].yyv.node; 273=> yyval.node = yys[yyp+1].yyv.node; 274=> yyval.node = yys[yyp+1].yyv.node; 275=> #line 1579 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 276=> #line 1585 "limbo.y" { yyval.node = rotater(yys[yypt-0].yyv.node); } 277=> #line 1589 "limbo.y" { yyval.node = rotater(yys[yypt-1].yyv.node); } 278=> yyval.node = yys[yyp+1].yyv.node; 279=> #line 1596 "limbo.y" { yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); } 280=> #line 1602 "limbo.y" { yyval.node = mkn(Oelem, nil, yys[yypt-0].yyv.node); yyval.node.src = yys[yypt-0].yyv.node.src; } 281=> #line 1607 "limbo.y" { yyval.node = mkbin(Oelem, rotater(yys[yypt-2].yyv.node), yys[yypt-0].yyv.node); } 282=> #line 1613 "limbo.y" { if(yys[yypt-1].yyv.node.op == Oseq) yys[yypt-1].yyv.node.right.left = rotater(yys[yypt-0].yyv.node); else yys[yypt-1].yyv.node.left = rotater(yys[yypt-0].yyv.node); yyval.node = yys[yypt-1].yyv.node; } 283=> #line 1623 "limbo.y" { yyval.node = typedecl(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-0].yyv.tok.src.stop, Tpoly, nil, nil)); } 284=> #line 1627 "limbo.y" { if(yys[yypt-3].yyv.node.op == Oseq) yys[yypt-3].yyv.node.right.left = rotater(yys[yypt-2].yyv.node); else yys[yypt-3].yyv.node.left = rotater(yys[yypt-2].yyv.node); yyval.node = mkbin(Oseq, yys[yypt-3].yyv.node, typedecl(yys[yypt-1].yyv.ids, mktype(yys[yypt-1].yyv.ids.src.start, yys[yypt-0].yyv.tok.src.stop, Tpoly, nil, nil))); } } } return yyn; }