diff options
Diffstat (limited to 'appl/cmd/limbo/limbo.b')
| -rw-r--r-- | appl/cmd/limbo/limbo.b | 3099 |
1 files changed, 3099 insertions, 0 deletions
diff --git a/appl/cmd/limbo/limbo.b b/appl/cmd/limbo/limbo.b new file mode 100644 index 00000000..c8f51779 --- /dev/null +++ b/appl/cmd/limbo/limbo.b @@ -0,0 +1,3099 @@ +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; + +}; + +#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; + 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 1630 "limbo.y" + + +include "keyring.m"; + +sys: Sys; + print, fprint, sprint: import sys; + +bufio: Bufio; + Iobuf: import bufio; + +str: String; + +keyring:Keyring; + md5: import keyring; + +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; + keyring = load Keyring Keyring->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; + * => + 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, + 98, 62, + -2, 252, +-1, 211, + 59, 29, + 71, 29, + -2, 0, +-1, 230, + 1, 2, + -2, 0, +-1, 273, + 50, 176, + -2, 257, +-1, 308, + 59, 41, + 71, 41, + 91, 41, + -2, 0, +-1, 310, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 380, + 50, 62, + 98, 62, + -2, 252, +-1, 381, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 387, + 53, 71, + 54, 71, + -2, 110, +-1, 389, + 53, 72, + 54, 72, + -2, 112, +-1, 421, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 428, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 443, + 53, 71, + 54, 71, + -2, 111, +-1, 444, + 53, 72, + 54, 72, + -2, 113, +-1, 452, + 71, 279, + 98, 279, + -2, 163, +-1, 469, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 486, + 50, 126, + 98, 126, + -2, 239, +-1, 491, + 71, 276, + -2, 0, +-1, 503, + 59, 47, + 71, 47, + -2, 0, +-1, 508, + 59, 41, + 71, 41, + 91, 41, + -2, 0, +-1, 514, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 548, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 554, + 71, 154, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 562, + 56, 59, + 62, 59, + -2, 62, +-1, 568, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 573, + 71, 157, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 577, + 72, 176, + -2, 163, +-1, 596, + 71, 160, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 602, + 71, 168, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 606, + 72, 175, + 85, 150, + 86, 150, + 87, 150, + 89, 150, + 90, 150, + 91, 150, + -2, 0, +-1, 609, + 50, 62, + 56, 171, + 62, 171, + 98, 62, + -2, 252, +}; +YYNPROD: con 284; +YYPRIVATE: con 57344; +yytoknames: array of string; +yystates: array of string; +yydebug: con 0; +YYLAST: con 2727; +yyact := array[] of { + 379, 591, 453, 364, 505, 384, 412, 310, 369, 314, + 359, 451, 449, 185, 84, 83, 432, 298, 270, 15, + 8, 49, 213, 102, 320, 12, 42, 110, 48, 78, + 79, 80, 4, 35, 198, 51, 23, 459, 363, 6, + 458, 3, 6, 544, 486, 491, 365, 14, 382, 21, + 14, 353, 400, 293, 350, 423, 225, 285, 118, 330, + 286, 226, 223, 46, 31, 112, 465, 11, 105, 517, + 566, 599, 308, 186, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 43, 117, 309, + 182, 183, 184, 349, 71, 10, 349, 205, 10, 208, + 93, 286, 286, 422, 32, 37, 119, 114, 40, 294, + 349, 294, 32, 585, 44, 286, 119, 428, 427, 426, + 547, 430, 429, 431, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 485, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 186, + 6, 483, 273, 230, 482, 22, 481, 438, 14, 22, + 271, 424, 267, 210, 5, 409, 407, 565, 279, 187, + 513, 410, 284, 87, 420, 419, 418, 228, 94, 288, + 85, 312, 311, 90, 289, 99, 269, 415, 217, 202, + 5, 415, 47, 92, 82, 22, 209, 26, 303, 25, + 212, 19, 24, 218, 229, 508, 10, 354, 96, 601, + 98, 95, 100, 595, 101, 88, 89, 86, 572, 194, + 195, 17, 87, 557, 553, 18, 297, 19, 536, 85, + 525, 77, 90, 313, 326, 305, 490, 13, 512, 112, + 323, 318, 92, 82, 468, 207, 399, 17, 87, 383, + 498, 18, 215, 23, 479, 85, 316, 467, 90, 6, + 398, 2, 500, 13, 88, 89, 86, 14, 92, 82, + 194, 195, 361, 186, 43, 282, 219, 340, 194, 195, + 77, 114, 193, 211, 487, 499, 338, 182, 500, 559, + 88, 89, 86, 336, 194, 195, 488, 535, 87, 324, + 341, 44, 87, 325, 580, 85, 77, 579, 90, 85, + 381, 348, 90, 206, 19, 10, 358, 357, 92, 82, + 214, 393, 92, 82, 604, 33, 389, 387, 391, 448, + 614, 194, 195, 402, 45, 539, 194, 195, 18, 392, + 88, 89, 86, 356, 88, 89, 86, 321, 194, 195, + 192, 194, 195, 403, 404, 530, 77, 281, 317, 108, + 77, 416, 493, 19, 19, 421, 436, 495, 612, 186, + 301, 385, 604, 435, 564, 437, 507, 216, 603, 493, + 434, 441, 439, 115, 115, 600, 562, 116, 116, 452, + 543, 340, 183, 444, 443, 504, 414, 45, 316, 493, + 22, 18, 493, 480, 493, 597, 336, 493, 588, 70, + 574, 493, 63, 555, 540, 73, 473, 494, 469, 433, + 478, 442, 476, 76, 75, 69, 68, 74, 291, 18, + 54, 55, 62, 60, 61, 64, 87, 290, 268, 452, + 157, 91, 120, 85, 91, 104, 90, 65, 66, 67, + 159, 489, 507, 39, 497, 103, 92, 82, 194, 195, + 594, 510, 186, 77, 568, 477, 168, 487, 36, 518, + 523, 466, 522, 515, 516, 511, 406, 417, 88, 89, + 86, 87, 452, 527, 523, 529, 528, 408, 85, 329, + 533, 90, 593, 526, 77, 91, 224, 91, 532, 537, + 106, 92, 82, 34, 545, 91, 401, 177, 546, 541, + 523, 331, 552, 397, 335, 556, 91, 592, 299, 554, + 332, 300, 201, 88, 89, 86, 158, 200, 161, 197, + 162, 163, 560, 563, 441, 316, 179, 446, 445, 77, + 160, 159, 570, 328, 227, 577, 569, 575, 571, 573, + 81, 477, 181, 97, 177, 346, 180, 523, 178, 583, + 345, 41, 584, 203, 577, 606, 587, 138, 139, 140, + 137, 135, 586, 72, 561, 548, 386, 327, 414, 222, + 596, 221, 549, 73, 598, 477, 475, 577, 602, 605, + 91, 76, 75, 45, 607, 74, 611, 18, 474, 471, + 613, 425, 137, 135, 196, 477, 199, 91, 39, 188, + 91, 91, 19, 91, 204, 524, 243, 360, 538, 307, + 91, 183, 168, 287, 29, 220, 141, 142, 138, 139, + 140, 137, 135, 368, 91, 91, 30, 121, 1, 464, + 272, 274, 315, 477, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 136, 542, 156, 155, + 154, 153, 152, 151, 149, 150, 145, 146, 147, 148, + 144, 143, 141, 142, 138, 139, 140, 137, 135, 582, + 343, 581, 413, 503, 502, 590, 27, 589, 91, 144, + 143, 141, 142, 138, 139, 140, 137, 135, 28, 283, + 16, 411, 306, 355, 91, 9, 551, 550, 521, 520, + 91, 7, 450, 337, 266, 506, 292, 371, 109, 295, + 296, 107, 113, 111, 20, 87, 38, 0, 0, 199, + 0, 91, 85, 0, 0, 90, 0, 99, 342, 0, + 0, 91, 91, 319, 322, 92, 82, 0, 0, 0, + 0, 87, 0, 0, 0, 91, 91, 0, 85, 91, + 96, 90, 98, 95, 0, 0, 0, 88, 89, 86, + 0, 92, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 87, 282, 77, 0, 0, 0, 0, 85, 0, + 0, 90, 0, 88, 89, 86, 0, 333, 91, 0, + 455, 92, 82, 0, 0, 0, 0, 91, 0, 77, + 0, 91, 0, 347, 0, 50, 91, 0, 91, 351, + 0, 0, 0, 88, 89, 86, 0, 91, 0, 0, + 52, 53, 454, 91, 0, 0, 59, 72, 0, 77, + 390, 57, 58, 0, 63, 0, 0, 73, 0, 0, + 395, 396, 0, 0, 0, 76, 75, 69, 68, 74, + 0, 18, 54, 55, 62, 60, 61, 64, 405, 0, + 0, 0, 91, 0, 0, 0, 91, 0, 0, 65, + 66, 67, 145, 146, 147, 148, 144, 143, 141, 142, + 138, 139, 140, 137, 135, 77, 0, 91, 0, 0, + 0, 0, 0, 366, 0, 0, 0, 196, 0, 0, + 91, 0, 0, 0, 0, 0, 447, 0, 50, 0, + 456, 0, 0, 0, 0, 460, 0, 461, 0, 0, + 0, 0, 0, 52, 53, 56, 97, 0, 0, 59, + 378, 0, 472, 0, 57, 58, 0, 63, 370, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, + 380, 68, 74, 0, 18, 54, 55, 62, 60, 61, + 64, 367, 509, 366, 0, 0, 13, 0, 0, 0, + 0, 496, 65, 66, 67, 501, 0, 0, 50, 372, + 0, 0, 0, 373, 374, 377, 375, 376, 77, 0, + 0, 0, 0, 52, 53, 56, 501, 0, 0, 59, + 378, 0, 0, 0, 57, 58, 0, 63, 370, 534, + 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, + 380, 68, 74, 0, 18, 54, 55, 62, 60, 61, + 64, 367, 470, 366, 0, 0, 13, 0, 0, 0, + 0, 0, 65, 66, 67, 0, 0, 0, 50, 372, + 0, 0, 0, 373, 374, 377, 375, 376, 77, 0, + 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, + 378, 0, 0, 0, 57, 58, 0, 63, 370, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, + 380, 68, 74, 0, 18, 54, 55, 62, 60, 61, + 64, 367, 440, 366, 0, 0, 13, 0, 0, 0, + 0, 0, 65, 66, 67, 0, 0, 0, 50, 372, + 0, 0, 0, 373, 374, 377, 375, 376, 77, 0, + 0, 0, 0, 52, 53, 56, 0, 0, 0, 59, + 378, 0, 0, 0, 57, 58, 0, 63, 370, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, + 380, 68, 74, 0, 18, 54, 55, 62, 60, 61, + 64, 367, 362, 608, 0, 0, 13, 0, 0, 0, + 0, 0, 65, 66, 67, 0, 0, 0, 50, 372, + 0, 0, 0, 373, 374, 377, 375, 376, 77, 0, + 0, 0, 0, 52, 53, 610, 0, 0, 0, 59, + 378, 0, 0, 0, 57, 58, 0, 63, 370, 0, + 73, 0, 0, 0, 0, 0, 0, 0, 76, 75, + 609, 68, 74, 0, 18, 54, 55, 62, 60, 61, + 64, 367, 576, 0, 0, 0, 13, 0, 0, 0, + 0, 0, 65, 66, 67, 0, 0, 50, 0, 372, + 0, 0, 0, 373, 374, 377, 375, 376, 77, 0, + 0, 0, 52, 53, 454, 0, 0, 0, 59, 378, + 0, 0, 0, 57, 58, 0, 63, 370, 0, 73, + 0, 0, 0, 0, 0, 0, 0, 76, 75, 380, + 68, 74, 0, 18, 54, 55, 62, 60, 61, 64, + 367, 366, 0, 0, 0, 13, 0, 0, 0, 0, + 0, 65, 66, 67, 0, 0, 50, 0, 372, 0, + 0, 0, 373, 374, 377, 375, 376, 77, 0, 0, + 0, 52, 53, 56, 0, 0, 0, 59, 378, 0, + 0, 0, 57, 58, 0, 63, 370, 0, 73, 0, + 0, 0, 0, 0, 0, 0, 76, 75, 380, 68, + 74, 0, 18, 54, 55, 62, 60, 61, 64, 367, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 65, 66, 67, 50, 0, 0, 0, 372, 0, 0, + 0, 373, 374, 377, 375, 376, 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, 275, 74, 0, 18, + 54, 55, 62, 60, 61, 64, 0, 0, 0, 50, + 0, 0, 0, 0, 0, 278, 0, 276, 277, 67, + 0, 0, 0, 0, 52, 53, 56, 0, 0, 0, + 59, 72, 0, 77, 280, 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, 87, 0, 0, 65, + 66, 67, 0, 85, 0, 0, 90, 0, 99, 0, + 0, 0, 0, 0, 0, 77, 92, 82, 149, 150, + 145, 146, 147, 148, 144, 143, 141, 142, 138, 139, + 140, 137, 135, 463, 462, 0, 0, 101, 88, 89, + 86, 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, 567, + 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, 558, 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, 531, + 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, 484, 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, 352, + 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, 344, 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, 304, + 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, 302, 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, 388, 0, 0, 90, 0, 0, 0, + 0, 0, 92, 394, 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, 578, 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, 519, 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, 492, 156, 155, 154, 153, 152, 151, 149, + 150, 145, 146, 147, 148, 144, 143, 141, 142, 138, + 139, 140, 137, 135, 0, 0, 0, 339, 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, 334, 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, 514, 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, + 457, 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 { + 198,-1000, 351, 172,-1000, 140,-1000,-1000, 137, 135, + 692, 630, 14, 274, 463,-1000, 424, 530,-1000, 285, + -35, 130,-1000,-1000,-1000,-1000,-1000,1507,1507,1507, +1507, 752, 583, 116, 144, 413, 396, -19, 460, 335, +-1000, 351, 18,-1000,-1000,-1000, 393,-1000,2272,-1000, + 391, 497,1548,1548,1548,1548,1548,1548,1548,1548, +1548,1548,1548,1548,1548, 523, 501, 521,1548, 376, +1548,-1000,1507, 579,-1000,-1000,-1000, 580,2217,2162, +2107, 288,-1000,-1000,-1000, 752, 494, 752, 492, 487, + 530,-1000, 532,-1000,-1000, 752,1507, 251,1507, 134, + 223, 530, 260, 348, 530, 216, 752, 551, 549, -36, +-1000, 456, 6, -37,-1000,-1000,-1000, 512,-1000, 285, +-1000, 172,-1000,1507,1507,1507,1507,1507,1507,1507, +1507,1507,1507,1507,1507, 622,1507,1507,1507,1507, +1507,1507,1507,1507,1507,1507,1507,1507,1507,1507, +1507,1507,1507,1507,1507,1507,1507,1507,1507, 389, + 544,1396,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, +-1000,-1000,-1000,-1000,-1000,-1000,-1000,1452, 307, 215, + 752,1507,-1000,-1000,-1000, 17,2667,-1000,1507,-1000, +-1000,-1000,-1000,1507, 388, 379, 415, 752, 13, 415, + 752, 752, 579, 452, 308,2052,-1000,1507,1997,-1000, + 752, 627, 2,-1000,-1000, 121, 285,-1000,-1000, 351, + 415,-1000,-1000, 334, 273, 273, 250,-1000,-1000,-1000, + 172,2667,2667,2667,2667,2667,2667,2667,2667,2667, +2667,2667,2667,1507,2667, 575, 575, 575, 575, 543, + 543, 604, 604, 669, 669, 669, 669, 866, 866,1624, +1848,1794,1741,1741,1687,2688, 547, -38,-1000, 406, + 511, 449, -39,2667,-1000,1548, 476, 485, 752,2554, + 479,1548,1507, 415,2515,-1000,1507, 260, 650,1942, + 529, 524, 415,-1000, 752, 415, 415, 413, 12, 415, + 752,-1000,-1000,1887,-1000, 11, 146,-1000, 625, 212, +1121,-1000,-1000, 8, 188,-1000, 319, 546,-1000, 415, +-1000,2277, 415,-1000,-1000,-1000,2667,-1000,-1000,1507, +1396,2273, 722, 415, 478, 200,-1000, 185, -46, 471, +2667,-1000,1507,-1000,-1000, 452, 452, 415,-1000, 407, +-1000, 415,-1000, 104,-1000,-1000, 447, 103,-1000, 110, +-1000, 351,-1000,-1000,-1000, 437, 114,-1000, 5, 99, + 572, 32, 370, 370,1507,1507,1507, 95,1507,2667, + 376,1051,-1000,-1000, 351,-1000,-1000,-1000, 752,-1000, + 415, 506, 505,2667,1548, 415, 415, 269, 808,-1000, +1507, 752,2630, -2, -5, 415, 752,-1000,1587,-1000, + -21,-1000,-1000,-1000, 431, 197, 183, 696,-1000,-1000, +-1000, 981, 570, 752,-1000,1507, 569, 557,1329,1507, + 194, 354, 94,-1000, 92, 89,1832, 64,-1000, 4, +-1000,-1000, 244,-1000,-1000,-1000,-1000, 415, 808, 175, + -53,-1000,2477, 365,1548,-1000, 415,-1000,-1000,-1000, + 415, 305, 752,1507,-1000, 190, 219, 403, 145, 911, + 420,1507, 176,2593,1507,1507, -17, 429,2424, 808, + 609,-1000,-1000,-1000,-1000,-1000,-1000, 193,-1000, 169, +-1000, 808,1507, 808,1507,-1000, 293,1777, 351,1507, + 752, 235, 167, 626,-1000, 283, 368,-1000, 625,-1000, + 341, 3,-1000,1507,1329, 48, 545, 553,-1000, 808, + 163,-1000, 361,2477,1507,-1000,-1000,2667,-1000,2667, +-1000,-1000, 162,1722, 227,-1000,-1000, 337, 327,-1000, + 325, 106, 0,-1000,-1000,1667, 426,1507,1329,1507, + 157,-1000, 358,-1000,1260,-1000,2371,-1000,-1000,-1000, + 255, 427,-1000, 252,-1000,-1000, 808,-1000,1329, 41, +-1000, 542,-1000,1260,-1000, 356, 114,2477, 468,-1000, +-1000, 152,-1000, 353,-1000,1507, -1, 333,-1000, 148, +-1000, 326,-1000,-1000,-1000,-1000,1260,-1000, 535,-1000, +-1000,-1000,1191,-1000, 468, 316,1329, 278, 114, 376, +1548,-1000,-1000,-1000,-1000, +}; +yypgo := array[] of { + 0, 528, 736, 105, 33, 24, 419, 15, 14, 46, + 734, 733, 732, 34, 731, 728, 27, 727, 16, 4, + 725, 108, 8, 0, 21, 35, 13, 724, 723, 94, + 25, 67, 26, 12, 722, 11, 2, 38, 41, 32, + 721, 22, 3, 7, 719, 718, 717, 716, 715, 20, + 713, 712, 711, 10, 710, 697, 695, 1, 694, 693, + 692, 6, 5, 691, 689, 667, 19, 23, 652, 9, + 651, 18, 650, 649, 17, 648, 647, 643, 633, +}; +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, 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, 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, 98, 61, 50, -4, 54, -3, -2, 39, + -21, 41, -32, -31, -29, 59, 98, 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, 98, + 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, 98, 50, 50, 98, 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, -27, -26, 59, -25, + -71, -22, -72, -23, -70, 60, 81, 82, 79, -23, + 42, 60, 70, -1, -23, 40, 98, -78, -23, -23, + 59, 59, -1, 40, 98, -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, + 98, 45, 45, -1, 42, 45, -24, -28, -26, 42, + -23, -41, 98, 40, 72, 41, 41, -1, -67, 98, + 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, + 98, 45, -23, -74, -74, -1, 79, 72, 50, 72, + 71, -52, -61, -60, -9, 91, -69, 50, 72, 71, + 70, -43, 98, 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, 98, 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, 253, 0, + 61, 0, 62, 5, 6, 9, 10, 0, 0, 0, + 0, 0, 0, 0, 0, 117, 0, 95, 93, 97, + 121, 0, 0, 265, 266, 252, 0, 1, 0, 177, + 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, + 0, 237, 0, 0, 248, 249, 250, 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, 254, 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, 269, 0, + 0, 175, 246, 247, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 0, 0, 0, + 0, 0, 234, 235, 236, 0, 273, 240, 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, 267, 268, + -2, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 0, 191, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 192, 0, 270, 242, 243, + 255, 0, 0, -2, 258, 259, 0, 0, 0, 0, + 0, 0, 0, 231, 0, 239, 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, 238, 244, 175, + 0, 0, 0, 262, 0, 0, 233, 0, 271, 0, + 274, 241, 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, 281, 282, 92, -2, 0, -2, + 0, 0, 256, 257, 70, 260, 261, 0, 0, 230, + 272, 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, 245, 251, 227, 0, 0, + 275, 277, -2, 0, 165, 167, 232, 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, 283, 0, + 229, -2, 0, 0, 0, 32, 0, 0, 0, 0, + 0, 0, 0, -2, 54, 0, 58, 59, -2, 130, + 264, 0, 132, 0, -2, 0, 0, 0, 151, 0, + 0, 123, 0, 163, 0, 228, 278, 164, 166, 280, + 34, 35, 0, 0, 0, 50, 51, 52, 53, 55, + 0, 0, 0, 263, 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, 98, 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, +}; +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 151 "limbo.y" +{ + impmods = yys[yypt-1].yyv.ids; + } +2=> +#line 154 "limbo.y" +{ + tree = rotater(yys[yypt-0].yyv.node); + } +3=> +#line 158 "limbo.y" +{ + impmods = nil; + tree = rotater(yys[yypt-0].yyv.node); + } +4=> +yyval.node = yys[yyp+1].yyv.node; +5=> +#line 166 "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 177 "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 185 "limbo.y" +{ + yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); + } +12=> +#line 189 "limbo.y" +{ + yyval.node = mkbin(Oas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); + } +13=> +#line 193 "limbo.y" +{ + yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); + } +14=> +#line 197 "limbo.y" +{ + yyval.node = mkbin(Odas, yys[yypt-3].yyv.node, yys[yypt-1].yyv.node); + } +15=> +#line 201 "limbo.y" +{ + yyerror("illegal declaration"); + yyval.node = nil; + } +16=> +#line 206 "limbo.y" +{ + yyerror("illegal declaration"); + yyval.node = nil; + } +17=> +yyval.node = yys[yyp+1].yyv.node; +18=> +#line 214 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +19=> +#line 220 "limbo.y" +{ + includef(yys[yypt-1].yyv.tok.v.idval); + yyval.node = nil; + } +20=> +#line 225 "limbo.y" +{ + yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); + } +21=> +#line 229 "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 235 "limbo.y" +{ + yyval.node = vardecl(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty); + } +23=> +#line 239 "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 243 "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 250 "limbo.y" +{ + yyval.node = exdecl(yys[yypt-3].yyv.ids, nil); + } +27=> +#line 254 "limbo.y" +{ + yyval.node = exdecl(yys[yypt-6].yyv.ids, revids(yys[yypt-2].yyv.ids)); + } +28=> +#line 260 "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 267 "limbo.y" +{ + yyval.node = nil; + } +30=> +#line 271 "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 280 "limbo.y" +{ + yyval.node = nil; + } +32=> +#line 286 "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 291 "limbo.y" +{ + yyval.node = typedecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.ty); + } +35=> +#line 295 "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 302 "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 309 "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 318 "limbo.y" +{ + yyval.node = nil; + } +40=> +#line 322 "limbo.y" +{ + yyval.node = yys[yypt-1].yyv.node; + } +41=> +#line 328 "limbo.y" +{ + yyval.node = nil; + } +42=> +#line 332 "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 341 "limbo.y" +{ + yyval.node = nil; + } +44=> +yyval.node = yys[yyp+1].yyv.node; +45=> +yyval.node = yys[yyp+1].yyv.node; +46=> +#line 349 "limbo.y" +{ + yyval.node = condecl(yys[yypt-4].yyv.ids, yys[yypt-1].yyv.node); + } +47=> +#line 355 "limbo.y" +{ + yyval.node = nil; + } +48=> +#line 359 "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 370 "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 376 "limbo.y" +{ + yyval.node = fielddecl(Dfield, typeids(yys[yypt-3].yyv.ids, yys[yypt-1].yyv.ty)); + } +51=> +#line 382 "limbo.y" +{ + yyval.node = yys[yypt-1].yyv.node; + } +52=> +#line 388 "limbo.y" +{ + yys[yypt-1].yyv.node.right.right = yys[yypt-0].yyv.node; + yyval.node = yys[yypt-1].yyv.node; + } +53=> +#line 393 "limbo.y" +{ + yyval.node = nil; + } +54=> +#line 397 "limbo.y" +{ + yyval.node = nil; + } +55=> +#line 403 "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 408 "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 414 "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 421 "limbo.y" +{ + yyval.ids = revids(yys[yypt-0].yyv.ids); + } +59=> +#line 427 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); + } +60=> +#line 431 "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 437 "limbo.y" +{ + yyval.ids = revids(yys[yypt-0].yyv.ids); + } +62=> +#line 443 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); + } +63=> +#line 447 "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 453 "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 458 "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 465 "limbo.y" +{ + yyval.types = addtype(yys[yypt-0].yyv.ty, nil); + } +67=> +#line 469 "limbo.y" +{ + yyval.types = addtype(yys[yypt-0].yyv.ty, nil); + yys[yypt-0].yyv.ty.flags |= CYCLIC; + } +68=> +#line 474 "limbo.y" +{ + yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-2].yyv.types); + } +69=> +#line 478 "limbo.y" +{ + yyval.types = addtype(yys[yypt-0].yyv.ty, yys[yypt-3].yyv.types); + yys[yypt-0].yyv.ty.flags |= CYCLIC; + } +70=> +#line 485 "limbo.y" +{ + yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +71=> +#line 489 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +72=> +#line 493 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +73=> +#line 497 "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 501 "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 506 "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 510 "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 514 "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 521 "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 525 "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 529 "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 549 "limbo.y" +{ + yyval.ty = mkidtype(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +83=> +#line 553 "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 559 "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 563 "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 570 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.ty.src, nil, yys[yypt-0].yyv.ty, nil); + } +87=> +#line 574 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-2].yyv.ids.src, nil, yys[yypt-0].yyv.ty, yys[yypt-2].yyv.ids); + } +88=> +#line 580 "limbo.y" +{ + yyval.ids = nil; + } +89=> +#line 584 "limbo.y" +{ + yyval.ids = polydecl(yys[yypt-1].yyv.ids); + } +90=> +#line 590 "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 594 "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 599 "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 606 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +94=> +#line 610 "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 618 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +96=> +#line 622 "limbo.y" +{ + yyval.ty = yys[yypt-4].yyv.ty; + yyval.ty.val = rotater(yys[yypt-1].yyv.node); + } +97=> +#line 629 "limbo.y" +{ + yyval.ids = nil; + } +98=> +yyval.ids = yys[yyp+1].yyv.ids; +99=> +yyval.ids = yys[yyp+1].yyv.ids; +100=> +#line 637 "limbo.y" +{ + yyval.ids = appdecls(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ids); + } +101=> +#line 643 "limbo.y" +{ + yyval.ids = typeids(yys[yypt-2].yyv.ids, yys[yypt-0].yyv.ty); + } +102=> +#line 647 "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 653 "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 declaraion"); + } +104=> +#line 659 "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 declaraion"); + } +105=> +#line 667 "limbo.y" +{ + yyval.ids = revids(yys[yypt-0].yyv.ids); + } +106=> +#line 673 "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 678 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, nil); + yyval.ids.store = Darg; + } +108=> +#line 683 "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 688 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.tok.src, nil, nil, yys[yypt-2].yyv.ids); + yyval.ids.store = Darg; + } +110=> +#line 695 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +111=> +#line 699 "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 703 "limbo.y" +{ + yyval.ty = yys[yypt-0].yyv.ty; + } +113=> +#line 707 "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 713 "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 739 "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 745 "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 751 "limbo.y" +{ + yyval.node = nil; + } +118=> +#line 757 "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 768 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + } +120=> +#line 772 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + } +121=> +#line 778 "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 786 "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 796 "limbo.y" +{ + yyval.node = nil; + } +124=> +#line 800 "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 809 "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 822 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + yyval.node.src.start = curline(); + yyval.node.src.stop = yyval.node.src.start; + } +129=> +#line 828 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + yyval.node.src.start = curline(); + yyval.node.src.stop = yyval.node.src.start; + } +130=> +#line 834 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + yyval.node.src.start = curline(); + yyval.node.src.stop = yyval.node.src.start; + } +131=> +#line 840 "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 849 "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 856 "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 863 "limbo.y" +{ + yyval.node = yys[yypt-1].yyv.node; + } +135=> +#line 867 "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 873 "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 879 "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 889 "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 896 "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 903 "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 909 "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 915 "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 924 "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 930 "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 936 "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 942 "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 948 "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 955 "limbo.y" +{ + yyval.node = mkn(Oexit, nil, nil); + yyval.node.src = yys[yypt-1].yyv.tok.src; + } +149=> +#line 960 "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 975 "limbo.y" +{ + yyval.ids = nil; + } +151=> +#line 979 "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 987 "limbo.y" +{ + yyval.ids = nil; + } +153=> +#line 991 "limbo.y" +{ + yyval.ids = mkids(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval, nil, nil); + } +154=> +#line 997 "limbo.y" +{ + yys[yypt-1].yyv.node.left.right.right = yys[yypt-0].yyv.node; + yyval.node = yys[yypt-1].yyv.node; + } +155=> +#line 1004 "limbo.y" +{ + yyval.node = mkunary(Oseq, mkscope(mkunary(Olabel, rotater(yys[yypt-1].yyv.node)))); + } +156=> +#line 1008 "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 1015 "limbo.y" +{ + yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); + yyval.node = yys[yypt-1].yyv.node; + } +158=> +#line 1022 "limbo.y" +{ + yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); + } +159=> +#line 1026 "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 1033 "limbo.y" +{ + yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); + yyval.node = yys[yypt-1].yyv.node; + } +161=> +#line 1040 "limbo.y" +{ + yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); + } +162=> +#line 1044 "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 1052 "limbo.y" +{ + yyval.node = mkbin(Orange, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +165=> +#line 1056 "limbo.y" +{ + yyval.node = mkn(Owild, nil, nil); + yyval.node.src = yys[yypt-0].yyv.tok.src; + } +166=> +#line 1061 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +167=> +#line 1065 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + yyval.node.src.start = curline(); + yyval.node.src.stop = yyval.node.src.start; + } +168=> +#line 1073 "limbo.y" +{ + yys[yypt-1].yyv.node.left.right = mkscope(yys[yypt-0].yyv.node); + yyval.node = yys[yypt-1].yyv.node; + } +169=> +#line 1080 "limbo.y" +{ + yyval.node = mkunary(Oseq, mkunary(Olabel, rotater(yys[yypt-1].yyv.node))); + } +170=> +#line 1084 "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 1091 "limbo.y" +{ + yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +172=> +#line 1095 "limbo.y" +{ + yyval.node = mkn(Owild, nil, nil); + yyval.node.src = yys[yypt-0].yyv.tok.src; + } +173=> +#line 1100 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +174=> +#line 1104 "limbo.y" +{ + yyval.node = mkn(Onothing, nil, nil); + yyval.node.src.start = curline(); + yyval.node.src.stop = yyval.node.src.start; + } +175=> +#line 1112 "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 1122 "limbo.y" +{ + yyval.node = mkbin(Oas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +179=> +#line 1126 "limbo.y" +{ + yyval.node = mkbin(Oandas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +180=> +#line 1130 "limbo.y" +{ + yyval.node = mkbin(Ooras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +181=> +#line 1134 "limbo.y" +{ + yyval.node = mkbin(Oxoras, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +182=> +#line 1138 "limbo.y" +{ + yyval.node = mkbin(Olshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +183=> +#line 1142 "limbo.y" +{ + yyval.node = mkbin(Orshas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +184=> +#line 1146 "limbo.y" +{ + yyval.node = mkbin(Oaddas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +185=> +#line 1150 "limbo.y" +{ + yyval.node = mkbin(Osubas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +186=> +#line 1154 "limbo.y" +{ + yyval.node = mkbin(Omulas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +187=> +#line 1158 "limbo.y" +{ + yyval.node = mkbin(Odivas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +188=> +#line 1162 "limbo.y" +{ + yyval.node = mkbin(Omodas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +189=> +#line 1166 "limbo.y" +{ + yyval.node = mkbin(Oexpas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +190=> +#line 1170 "limbo.y" +{ + yyval.node = mkbin(Osnd, yys[yypt-3].yyv.node, yys[yypt-0].yyv.node); + } +191=> +#line 1174 "limbo.y" +{ + yyval.node = mkbin(Odas, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +192=> +#line 1178 "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); + } +193=> +#line 1185 "limbo.y" +{ + yyval.node = yyval.node = mkbin(Oexp, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +194=> +#line 1189 "limbo.y" +{ + yyval.node = mkbin(Omul, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +195=> +#line 1193 "limbo.y" +{ + yyval.node = mkbin(Odiv, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +196=> +#line 1197 "limbo.y" +{ + yyval.node = mkbin(Omod, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +197=> +#line 1201 "limbo.y" +{ + yyval.node = mkbin(Oadd, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +198=> +#line 1205 "limbo.y" +{ + yyval.node = mkbin(Osub, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +199=> +#line 1209 "limbo.y" +{ + yyval.node = mkbin(Orsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +200=> +#line 1213 "limbo.y" +{ + yyval.node = mkbin(Olsh, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +201=> +#line 1217 "limbo.y" +{ + yyval.node = mkbin(Olt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +202=> +#line 1221 "limbo.y" +{ + yyval.node = mkbin(Ogt, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +203=> +#line 1225 "limbo.y" +{ + yyval.node = mkbin(Oleq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +204=> +#line 1229 "limbo.y" +{ + yyval.node = mkbin(Ogeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +205=> +#line 1233 "limbo.y" +{ + yyval.node = mkbin(Oeq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +206=> +#line 1237 "limbo.y" +{ + yyval.node = mkbin(Oneq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +207=> +#line 1241 "limbo.y" +{ + yyval.node = mkbin(Oand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +208=> +#line 1245 "limbo.y" +{ + yyval.node = mkbin(Oxor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +209=> +#line 1249 "limbo.y" +{ + yyval.node = mkbin(Oor, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +210=> +#line 1253 "limbo.y" +{ + yyval.node = mkbin(Ocons, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +211=> +#line 1257 "limbo.y" +{ + yyval.node = mkbin(Oandand, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +212=> +#line 1261 "limbo.y" +{ + yyval.node = mkbin(Ooror, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +213=> +yyval.node = yys[yyp+1].yyv.node; +214=> +#line 1268 "limbo.y" +{ + yys[yypt-0].yyv.node.src.start = yys[yypt-1].yyv.tok.src.start; + yyval.node = yys[yypt-0].yyv.node; + } +215=> +#line 1273 "limbo.y" +{ + yyval.node = mkunary(Oneg, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +216=> +#line 1278 "limbo.y" +{ + yyval.node = mkunary(Onot, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +217=> +#line 1283 "limbo.y" +{ + yyval.node = mkunary(Ocomp, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +218=> +#line 1288 "limbo.y" +{ + yyval.node = mkunary(Oind, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +219=> +#line 1293 "limbo.y" +{ + yyval.node = mkunary(Opreinc, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +220=> +#line 1298 "limbo.y" +{ + yyval.node = mkunary(Opredec, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +221=> +#line 1303 "limbo.y" +{ + yyval.node = mkunary(Orcv, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +222=> +#line 1308 "limbo.y" +{ + yyval.node = mkunary(Ohd, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +223=> +#line 1313 "limbo.y" +{ + yyval.node = mkunary(Otl, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +224=> +#line 1318 "limbo.y" +{ + yyval.node = mkunary(Olen, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +225=> +#line 1323 "limbo.y" +{ + yyval.node = mkunary(Oref, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +226=> +#line 1328 "limbo.y" +{ + yyval.node = mkunary(Otagof, yys[yypt-0].yyv.node); + yyval.node.src.start = yys[yypt-1].yyv.tok.src.start; + } +227=> +#line 1333 "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; + } +228=> +#line 1339 "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; + } +229=> +#line 1345 "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; + } +230=> +#line 1354 "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; + } +231=> +#line 1360 "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; + } +232=> +#line 1366 "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; + } +233=> +#line 1372 "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; + } +234=> +#line 1378 "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); + } +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 = yys[yypt-1].yyv.ty; + } +237=> +yyval.node = yys[yyp+1].yyv.node; +238=> +#line 1399 "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; + } +239=> +#line 1405 "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; + } +240=> +#line 1415 "limbo.y" +{ +# n := mkdeclname($1, mkids($1, enter(".fn"+string nfnexp++, 0), nil, nil)); +# $<node>$ = fndef(n, $2); +# nfns++; + } +241=> +#line 1420 "limbo.y" +{ +# $$ = fnfinishdef($<node>3, $4); +# $$ = mkdeclname($1, $$.left.decl); + yyerror("urt unk"); + yyval.node = nil; + } +242=> +#line 1427 "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)); + } +243=> +#line 1431 "limbo.y" +{ + yyval.node = mkbin(Omdot, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +244=> +#line 1435 "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; + } +245=> +#line 1440 "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; + } +246=> +#line 1449 "limbo.y" +{ + yyval.node = mkunary(Oinc, yys[yypt-1].yyv.node); + yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; + } +247=> +#line 1454 "limbo.y" +{ + yyval.node = mkunary(Odec, yys[yypt-1].yyv.node); + yyval.node.src.stop = yys[yypt-0].yyv.tok.src.stop; + } +248=> +#line 1459 "limbo.y" +{ + yyval.node = mksconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +249=> +#line 1463 "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; + } +250=> +#line 1469 "limbo.y" +{ + yyval.node = mkrconst(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.rval); + } +251=> +#line 1473 "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; + } +252=> +#line 1480 "limbo.y" +{ + yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +253=> +#line 1484 "limbo.y" +{ + yyval.node = mknil(yys[yypt-0].yyv.tok.src); + } +254=> +#line 1490 "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; + } +255=> +yyval.node = yys[yyp+1].yyv.node; +256=> +#line 1499 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +257=> +yyval.node = yys[yyp+1].yyv.node; +258=> +yyval.node = yys[yyp+1].yyv.node; +259=> +#line 1509 "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; + } +260=> +#line 1515 "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; + } +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, Tlist, 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 = yys[yypt-0].yyv.ty; + yyval.node.ty.flags |= CYCLIC; + yyval.node.src = yyval.node.ty.src; + } +263=> +#line 1536 "limbo.y" +{ + yyval.node = mkname(yys[yypt-0].yyv.tok.src, yys[yypt-0].yyv.tok.v.idval); + } +264=> +#line 1540 "limbo.y" +{ + yyval.node = nil; + } +265=> +yyval.node = yys[yyp+1].yyv.node; +266=> +yyval.node = yys[yyp+1].yyv.node; +267=> +#line 1548 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +268=> +#line 1552 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +269=> +#line 1558 "limbo.y" +{ + yyval.node = nil; + } +270=> +#line 1562 "limbo.y" +{ + yyval.node = rotater(yys[yypt-0].yyv.node); + } +271=> +yyval.node = yys[yyp+1].yyv.node; +272=> +yyval.node = yys[yyp+1].yyv.node; +273=> +yyval.node = yys[yyp+1].yyv.node; +274=> +#line 1573 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +275=> +#line 1579 "limbo.y" +{ + yyval.node = rotater(yys[yypt-0].yyv.node); + } +276=> +#line 1583 "limbo.y" +{ + yyval.node = rotater(yys[yypt-1].yyv.node); + } +277=> +yyval.node = yys[yyp+1].yyv.node; +278=> +#line 1590 "limbo.y" +{ + yyval.node = mkbin(Oseq, yys[yypt-2].yyv.node, yys[yypt-0].yyv.node); + } +279=> +#line 1596 "limbo.y" +{ + yyval.node = mkn(Oelem, nil, yys[yypt-0].yyv.node); + yyval.node.src = yys[yypt-0].yyv.node.src; + } +280=> +#line 1601 "limbo.y" +{ + yyval.node = mkbin(Oelem, rotater(yys[yypt-2].yyv.node), yys[yypt-0].yyv.node); + } +281=> +#line 1607 "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; + } +282=> +#line 1617 "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)); + } +283=> +#line 1621 "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; +} |
