summaryrefslogtreecommitdiff
path: root/appl/cmd/limbo/limbo.b
diff options
context:
space:
mode:
Diffstat (limited to 'appl/cmd/limbo/limbo.b')
-rw-r--r--appl/cmd/limbo/limbo.b3099
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;
+}