code: 9ferno

Download patch

ref: 9661fb64092acfcf370688c5e56934e400965822
parent: 4ee2765c5a3ab2087cbdba63f117b7e1f591bf12
author: joe9 <joe9mail@gmail.com>
date: Sat Apr 3 03:28:49 EDT 2021

added tests

diff: cannot open b/tests//null: file does not exist: 'b/tests//null'
--- /dev/null
+++ b/tests/.gitignore
@@ -1,0 +1,4 @@
+*.dis
+*.out
+6.*
+*.s
--- /dev/null
+++ b/tests/1.b
@@ -1,0 +1,22 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	sys->print("init 1\n");
+	a := 1;
+	b := 3;
+	c : int;
+	d : string;
+
+	d = "string init";
+	c = a*b + b*b*b*b + a;
+	sys->print("Completed running 1.b: c=%d\n", c);
+}
--- /dev/null
+++ b/tests/2.b
@@ -1,0 +1,15 @@
+implement Sample;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	a := 1;
+	b := 3;
+	c : int;
+
+	c = a*b + b*b*b*b + a;
+}
--- /dev/null
+++ b/tests/3.b
@@ -1,0 +1,24 @@
+implement Sample;
+
+Person : adt
+{
+	age : int;
+	name : string;
+};
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	a := 1;
+	b := 3;
+	c : int;
+	d : Person;
+
+	d.age = 10;
+	d.name = "person name";
+	c = a*b + b*b*b*b + a;
+}
--- /dev/null
+++ b/tests/4.b
@@ -1,0 +1,25 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a := 1;
+	b := 3;
+	c : int;
+
+	case a {
+	0 => sys->print("begins with a vowel\n");
+	1 => sys->print("begins with a consonant\n");
+	2 => sys->print("begins with a consonant\n");
+	3 => sys->print("begins with a consonant\n");
+	4 => sys->print("begins with a consonant\n");
+	* => sys->print("sorry don't understand\n");
+	}
+}
--- /dev/null
+++ b/tests/5.b
@@ -1,0 +1,60 @@
+implement Sample;
+
+Person : adt
+{
+	age : int;
+	next : cyclic ref Person;
+	age1 : int;
+	age2 : int;
+};
+
+Sample: module
+{
+	init: fn();
+	fn1: fn();
+	fn2: fn();
+	fn3: fn();
+};
+
+init()
+{
+	a := 1;
+	b := 3;
+	c : int;
+	d : Person;
+
+	d.age = 10;
+	d.next = nil;
+	d.age1 = 20;
+	d.age2 = 30;
+	c = a*b + b*b*b*b + a;
+	fn3();
+	fn1();
+	fn2();
+}
+
+fn1()
+{
+	d: Person;
+
+	d.age=40;
+	d.next = nil;
+	d.age1 = 50;
+	d.age2 = 60;
+}
+
+fn2()
+{
+	s: string;
+
+	s = "testing the string";
+}
+
+fn3()
+{
+	s: string;
+	s1: string;
+
+	s = "testing the string";
+	s1 = "testing again";
+}
--- /dev/null
+++ b/tests/adt.b
@@ -1,0 +1,34 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Person: adt
+{
+	name: string;
+	age: int;
+};
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	d : Person;
+
+	d.name = "Jane";
+	d.age = 20;
+	sys->print("should print Jane result %s\n", d.name);
+	sys->print("should print 20 result %d\n", d.age);
+
+	a := ("Doe", 21);
+	a = d;
+	sys->print("should print Jane result %s\n", d.name);
+
+	p, np : ref Person;
+	p = np = ref Person("Jane", 20);
+	d.name = "Doe";
+	sys->print("should print Jane result %s\n", p.name);
+}
--- /dev/null
+++ b/tests/alt.b
@@ -1,0 +1,42 @@
+implement Fibonacci;
+
+include "sys.m";
+
+sys : Sys;
+MAX : con 50;
+x : chan of int;
+
+Fibonacci : module
+{
+	init : fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+
+	x = chan of int;
+	sys->print("0	.\n	..\n");
+	spawn f(0,1);
+
+	<-x;
+	sys->print("main thread completed.\n");
+}
+
+f(a, b : int)
+{
+	sys->print("%-3d", a + b);
+	for (i := 0; i <= a+b; i++)
+	{
+		sys->print(".");
+	}
+	sys->print("\n");
+
+	if (a+b < MAX)
+	{
+		f(b, a+b);
+	}
+
+	x <-= 0;
+	sys->print("Spawned thread completed.\n");
+}
--- /dev/null
+++ b/tests/alt1.b
@@ -1,0 +1,125 @@
+implement Fibonacci;
+
+include "sys.m";
+
+sys : Sys;
+MAX : con 50;
+chan1, chan2, chan4 : chan of int;
+chan3 : chan of string;
+
+Fibonacci : module
+{
+	init : fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+
+	chan1 = chan of int;
+	chan2 = chan of int;
+	chan4 = chan of int;
+	chan3 = chan of string;
+
+	str := "string test";
+	sys->print("string test: %s %d\n", str, len str);
+	sys->print("0	.\n	..\n");
+	spawn f(0,1);
+	spawn f1(0,1);
+	spawn f3(0,1);
+	spawn f2();
+	for (i := 0; i<10; i++){
+		sys->print("loop counter %d\n", i);
+		alt
+		{
+			a := <- chan1 =>
+			{
+				sys->print("%d: Read from chan1 %d\n", i, a);
+			}
+	
+			b := <- chan2 =>
+			{
+				sys->print("%d: Read from chan2 %d\n", i, b);
+			}
+			c := <- chan4 =>
+			{
+				sys->print("%d: Read from chan4 %d\n", i, c);
+			}
+	
+			chan3 <- = "Orange" =>
+			{
+				sys->print("Send on chan3\n");
+			}
+	
+			* =>
+			{
+				sys->print("Default action\n");
+			}
+		}
+	}
+	sys->print("Spawned threads completed.\n");
+}
+
+f(a, b : int)
+{
+	sys->print("%-3d", a + b);
+	chan1 <-= a+b;
+	for (i := 0; i <= a+b; i++)
+	{
+		sys->print(".");
+	}
+	sys->print("\n");
+
+	if (a+b < MAX)
+	{
+		f(b, a+b);
+	}
+
+	chan1 <-= 0;
+	sys->print("exiting f\n"); 
+}
+
+f1(a, b : int)
+{
+	sys->print("%-3d", a + b);
+	chan2 <-= a+b;
+	for (i := 0; i <= a+b; i++)
+	{
+		sys->print(".");
+	}
+	sys->print("\n");
+
+	if (a+b < MAX)
+	{
+		f(b, a+b);
+	}
+
+	chan2 <-= 1;
+	sys->print("exiting f1\n"); 
+}
+
+f3(a, b : int)
+{
+	sys->print("%-3d", a + b);
+	chan4 <-= a+b;
+	for (i := 0; i <= a+b; i++)
+	{
+		sys->print(".");
+	}
+	sys->print("\n");
+
+	if (a+b < MAX)
+	{
+		f(b, a+b);
+	}
+
+	chan4 <-= 1;
+	sys->print("exiting f3\n"); 
+}
+
+f2()
+{
+	x : string;
+	x = <- chan3;
+	sys->print("exiting f2, received\n"); 
+}
--- /dev/null
+++ b/tests/array.b
@@ -1,0 +1,17 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	c := array [] of {"jimbox", "pip", "squek"};
+
+	sys->print("should print jimbox result %s\n", c[0]);
+	sys->print("should print squek result %s\n", c[2]);
+}
--- /dev/null
+++ b/tests/array1.b
@@ -1,0 +1,21 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	d := array [4] of {* => 3.14};
+	z := array[20] of {0 or 2 or 4 or 6 or 8 => 1,
+			1 or 3 or 5 or 7 or 9 => 0,
+			* => -1
+			};
+
+	sys->print("should print 3.14 result %g %f\n", d[0], d[0]);
+	sys->print("should print -1 result %d\n", z[11]);
+}
--- /dev/null
+++ b/tests/array2.b
@@ -1,0 +1,19 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	z := array[20] of {0 or 2 or 4 or 6 or 8 => 1,
+			1 or 3 or 5 or 7 or 9 => 0,
+			* => -1
+			};
+
+	sys->print("should print -1 result %d\n", z[11]);
+}
--- /dev/null
+++ b/tests/array3.b
@@ -1,0 +1,18 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	z := array[2] of {* => -1};
+	d := array [3] of {* => 3.14};
+
+	sys->print("should print -1 result %d\n", z[1]);
+	sys->print("should print 3.14 result %g %f\n", d[0], d[0]);
+}
--- /dev/null
+++ b/tests/arraybig.b
@@ -1,0 +1,35 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a : array of int;
+	b := array[64] of int;
+	c := array [] of {"jimbox", "pip", "squek"};
+	e := array [4] of {* => 3};
+	d := array [4] of {* => 3.14};
+	w := array [] of {0 or 2 or 4 or 6 or 8 => 1,
+			1 or 3 or 5 or 7 or 9 => 0};
+	z := array[20] of {0 or 2 or 4 or 6 or 8 => 1,
+			1 or 3 or 5 or 7 or 9 => 0,
+			* => -1
+			};
+	y : array of array of big;
+	story := array [] of {"I", "should", "get", "a", "life"};
+	task := story[2:];
+	dream := task[0][:1] + "0" + task[0][2:] + " " +task[1] + " " + task[2];
+
+	sys->print("should print jimbox result %s\n", c[0]);
+	sys->print("should print 3 result %d\n", e[0]);
+	sys->print("should print 3.14 result %g %f\n", d[0], d[0]);
+	sys->print("should print 1 result %d\n", w[0]);
+	sys->print("should print -1 result %-d\n", z[11]);
+	sys->print("should print gOt a life result %s\n", dream);
+}
--- /dev/null
+++ b/tests/arraysimple.b
@@ -1,0 +1,15 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	c := array [1] of {1};
+	sys->print("print the 1st element %d\n", c[0]);
+}
--- /dev/null
+++ b/tests/arraysimpleint.b
@@ -1,0 +1,11 @@
+implement Sample;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	c := array [1] of {1};
+}
--- /dev/null
+++ b/tests/byte.b
@@ -1,0 +1,19 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a := byte 1;
+	b := byte 255;
+
+	a = a + (byte 10);
+	b = b + (byte 10);
+	sys->print("a expected 11 calculated %d, b expected 9 calculated %d\n", (int a), (int b));
+}
--- /dev/null
+++ b/tests/case.b
@@ -1,0 +1,23 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a := 1;
+	b := 3;
+	c : int;
+
+	case a {
+	0 => sys->print("is zero\n");
+	1 => sys->print("is 1\n");
+	2 => sys->print("is 2\n");
+	* => sys->print("is default\n");
+	}
+}
--- /dev/null
+++ b/tests/case1.b
@@ -1,0 +1,23 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a := 15;
+	b := 3;
+	c : int;
+
+	case a {
+	0 => sys->print("is zero\n");
+	1 to 10 => sys->print("is between 1 and 10\n");
+	11 to 20 => sys->print("is between 11 and 20\n");
+	* => sys->print("is default\n");
+	}
+}
--- /dev/null
+++ b/tests/casec.b
@@ -1,0 +1,20 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a : string = "Jane";
+
+	case a {
+	"jane" or "JANE" => sys->print("is jane or JANE\n");
+	"Jane" => sys->print("is Jane\n");
+	* => sys->print("is default\n");
+	}
+}
--- /dev/null
+++ b/tests/drawcontext.b
@@ -1,0 +1,33 @@
+# File: drawcontext.b
+
+implement DrawContext;
+
+include "sys.m";
+include "draw.m";
+
+sys : Sys;
+draw : Draw;
+Screen, Display : import draw;
+
+DrawContext : module
+{
+	init : fn(ctxt : ref Draw->Context, args : list of string);
+};
+
+init (ctxt : ref Draw->Context, nil : list of string)
+{
+	sys = load Sys Sys->PATH;
+	draw = load Draw Draw->PATH;
+	if(draw == nil){
+		sys->fprint(sys->filedes(2), "cannot load Draw module\n");
+		raise "fail: bad module";
+	}
+
+	if (ctxt == nil)
+	{
+		sys->print("No valid graphics contetx, allocating a new one...\n");
+		display := Display.allocate(nil);
+		screen := Screen.allocate(display.image, display.rgb(99,99,99), 1);
+		ctxt = ref (screen, display, nil, nil, nil, nil, nil);
+	}
+}
--- /dev/null
+++ b/tests/drawexample.b
@@ -1,0 +1,50 @@
+# File: draw-example(2)
+
+implement Test;
+
+include "sys.m";
+include "draw.m";
+
+Test: module
+{
+	init:	fn(ctxt: ref Draw->Context, argv: list of string);
+};
+
+init(nil: ref Draw->Context, nil: list of string)
+{
+	sys := load Sys Sys->PATH;
+	draw := load Draw Draw->PATH;
+	Display, Font, Rect, Point, Image, Screen: import draw;
+
+	display := draw->Display.allocate(nil);
+	disp := display.image;
+	red := display.color(Draw->Red);
+	blue := display.color(Draw->Blue);
+	white := display.color(Draw->White);
+	yellow := display.color(Draw->Yellow);
+
+	red.r.max.x = 640;
+	red.r.max.y = 480;
+	red.clipr.min.x = 0;
+	red.clipr.min.y = 0;
+	red.clipr.max.x = 600;
+	red.clipr.max.y = 400;
+	white.r.max.x = 640;
+	white.r.max.y = 480;
+	white.clipr.min.x = 200;
+	white.clipr.min.y = 400;
+	white.clipr.max.x = 640;
+	white.clipr.max.y = 480;
+	sys->print("red r .min.x %d .min.y %d .max.x %d .max.y %d\n",
+		red.r.min.x, red.r.min.y, red.r.max.x, red.r.max.y);
+	#sys->print("red clipr .min.x %d .min.y %d .max.x %d .max.y %d\n",
+	#	red.clipr.min.x, red.clipr.min.y,
+	#	red.clipr.max.x, red.clipr.max.y);
+	sys->print("disp r .min.x %d .min.y %d .max.x %d .max.y %d\n",
+		disp.r.min.x, disp.r.min.y, disp.r.max.x, disp.r.max.y);
+	sys->sleep(5000);
+	disp.draw(disp.r, red, red, disp.r.min);
+	sys->sleep(5000);
+	disp.draw(disp.r, white, white, disp.r.min);
+	sys->sleep(50000);
+}
--- /dev/null
+++ b/tests/drawexample1.b
@@ -1,0 +1,73 @@
+# File: draw-example(2)
+
+implement Test;
+
+include "sys.m";
+include "draw.m";
+
+Test: module
+{
+	init:	fn(ctxt: ref Draw->Context, argv: list of string);
+};
+
+init(nil: ref Draw->Context, nil: list of string)
+{
+	sys := load Sys Sys->PATH;
+	draw := load Draw Draw->PATH;
+	Display, Font, Rect, Point, Image, Screen: import draw;
+
+	display := draw->Display.allocate(nil);
+	disp := display.image;
+	red := display.color(Draw->Red);
+	blue := display.color(Draw->Blue);
+	white := display.color(Draw->White);
+	yellow := display.color(Draw->Yellow);
+
+#	red.r.max.x = 640;
+#	red.r.max.y = 480;
+#	red.clipr.min.x = 0;
+#	red.clipr.min.y = 0;
+#	red.clipr.max.x = 600;
+#	red.clipr.max.y = 400;
+	sys->print("red.clipr.min.x %d\n", red.clipr.min.x);
+	disp.draw(disp.r, red, red, disp.r.min);
+	sys->sleep(5000);
+
+#	texture := display.newimage(((0,0),(2,3)),
+#			disp.chans, 1, Draw->Black);
+#	texture.clipr = ((-10000,-10000),(10000,10000));
+#	texture.draw(((0,0),(1,3)), white, nil, (0,0));
+#	texture.draw(((0,0),(2,1)), white, nil, (0,0));
+#	disp.draw(((100,100),(200,300)), texture, texture, (0,0));
+#	sys->sleep(5000);
+#
+#	stipple := display.newimage(((0,0),(2,2)),
+#			disp.chans, 1, Draw->Transparent);
+#	stipple.draw(((0,0),(1,1)), display.opaque, nil, (0,0));
+#	disp.draw(((100,100),(300,250)), white, stipple, (0,0));
+#	sys->sleep(5000);
+#
+#	font := Font.open(display, "*default*");
+#	disp.text((100,310), texture, (0,0), font, "Hello World");
+#	sys->sleep(5000);
+#
+#	delight := display.open("/icons/delight.bit");
+#	piccenter := delight.r.min.add(delight.r.max).div(2);
+#	disp.fillellipse((250,250), 150, 50, delight, piccenter);
+#	disp.ellipse((250,250), 150, 50, 3, yellow, (0,0));
+#	sys->sleep(5000);
+#
+#	dx : con 15;
+#	dy : con 3;
+#	brush := display.newimage(((0,0),(2*dx+1,2*dy+1)), disp.chans,
+#					0, Draw->Black);
+#	brush.fillellipse((dx,dy), dx, dy, display.white, (0,0));
+#	for(x:=delight.r.min.x; x<delight.r.max.x; x++){
+#		y := (x-piccenter.x)*(x-piccenter.x)/80;
+#		y += 2*dy+1;
+#		xx := x+(250-piccenter.x)-dx;
+#		yy := y+(250-piccenter.y)-dy;
+#		disp.gendraw(((xx,yy),(xx+2*dx+1,yy+2*dy+1)),
+#				delight, (x-dx, y-dy), brush, (0,0));
+#	}
+}
--- /dev/null
+++ b/tests/filepat.debug
@@ -1,0 +1,2679 @@
+declare module Sys
+declare module Readdir
+declare module Filepat
+variable 'SELF' val '"$self"'
+variable 'Sys->PATH' val '"$Sys"'
+variable 'Sys->Maxint' val '2147483647'
+variable 'Sys->QTDIR' val '128'
+variable 'Sys->QTAPPEND' val '64'
+variable 'Sys->QTEXCL' val '32'
+variable 'Sys->QTAUTH' val '8'
+variable 'Sys->QTTMP' val '4'
+variable 'Sys->QTFILE' val '0'
+variable 'Sys->nulldir' val 'Dir(nil, nil, nil, nil, (-1, -1, -1), -1, -1, -1, -1, -1, -1)'
+variable 'Sys->zerodir' val 'Dir(nil, nil, nil, nil, (0, 0, 0), 0, 0, 0, 0, 0, 0)'
+variable 'Sys->ATOMICIO' val '8192'
+variable 'Sys->SEEKSTART' val '0'
+variable 'Sys->SEEKRELA' val '1'
+variable 'Sys->SEEKEND' val '2'
+variable 'Sys->NAMEMAX' val '256'
+variable 'Sys->ERRMAX' val '128'
+variable 'Sys->WAITLEN' val '192'
+variable 'Sys->OREAD' val '0'
+variable 'Sys->OWRITE' val '1'
+variable 'Sys->ORDWR' val '2'
+variable 'Sys->OTRUNC' val '16'
+variable 'Sys->ORCLOSE' val '64'
+variable 'Sys->OEXCL' val '4096'
+variable 'Sys->DMDIR' val '-2147483648'
+variable 'Sys->DMAPPEND' val '1073741824'
+variable 'Sys->DMEXCL' val '536870912'
+variable 'Sys->DMAUTH' val '134217728'
+variable 'Sys->DMTMP' val '67108864'
+variable 'Sys->MREPL' val '0'
+variable 'Sys->MBEFORE' val '1'
+variable 'Sys->MAFTER' val '2'
+variable 'Sys->MCREATE' val '4'
+variable 'Sys->MCACHE' val '16'
+variable 'Sys->NEWFD' val '(1)'
+variable 'Sys->FORKFD' val '(2)'
+variable 'Sys->NEWNS' val '(4)'
+variable 'Sys->FORKNS' val '(8)'
+variable 'Sys->NEWPGRP' val '(16)'
+variable 'Sys->NODEVS' val '(32)'
+variable 'Sys->NEWENV' val '(64)'
+variable 'Sys->FORKENV' val '(128)'
+variable 'Sys->EXPWAIT' val '0'
+variable 'Sys->EXPASYNC' val '1'
+variable 'Sys->UTFmax' val '4'
+variable 'Sys->UTFerror' val '65533'
+variable 'Sys->Runemax' val '1114111'
+variable 'Sys->Runemask' val '2097151'
+variable 'Readdir->PATH' val '"/dis/lib/r..."'
+variable 'Readdir->NAME' val 'iota'
+variable 'Readdir->ATIME' val 'iota'
+variable 'Readdir->MTIME' val 'iota'
+variable 'Readdir->SIZE' val 'iota'
+variable 'Readdir->NONE' val 'iota'
+variable 'Readdir->DESCENDING' val '(32)'
+variable 'Readdir->COMPACT' val '(16)'
+variable 'PATH' val '"/dis/lib/f..."'
+typecheck tree: 
+fn(){} fn(pat: string): list of string 0 0
+  name expand fn(pat: string): list of string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name sys nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name sys nothing 0 0
+              load Sys 0 0
+                -> nothing 0 0
+                  name Sys nothing 0 0
+                  name PATH nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        == nothing 0 0
+          name rdir nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name rdir nothing 0 0
+                load Readdir 0 0
+                  -> nothing 0 0
+                    name Readdir nothing 0 0
+                    name PATH nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          tuple nothing 0 0
+            seq nothing 0 0
+              name nil polymorphic type 0 0
+              seq nothing 0 0
+                name elem nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name sys nothing 0 0
+              name tokenize nothing 0 0
+            seq nothing 0 0
+              name pat nothing 0 0
+              seq nothing 0 0
+                const / string 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              name elem nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                call nothing 0 0
+                  name filepat1 nothing 0 0
+                  seq nothing 0 0
+                    name pat nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        const (0) int 0 0
+          seq nothing 0 0
+            vardecl list of string 0 0
+              seq nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  index nothing 0 0
+                    name pat nothing 0 0
+                    const (0) int 0 0
+                  const (47) int 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name files nothing 0 0
+                    :: nothing 0 0
+                      const / string 0 0
+                      name nil polymorphic type 0 0
+              seq nothing 0 0
+                for nothing 0 0
+                  != nothing 0 0
+                    name elem nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          name files nothing 0 0
+                          call nothing 0 0
+                            name filepat1 nothing 0 0
+                            seq nothing 0 0
+                              hd nothing 0 0
+                                name elem nothing 0 0
+                              seq nothing 0 0
+                                name files nothing 0 0
+                                seq nothing 0 0
+                                  != nothing 0 0
+                                    tl nothing 0 0
+                                      name elem nothing 0 0
+                                    name nil polymorphic type 0 0
+                        seq nothing 0 0
+                          if nothing 0 0
+                            == nothing 0 0
+                              name files nothing 0 0
+                              name nil polymorphic type 0 0
+                            seq nothing 0 0
+                              break nothing 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name elem nothing 0 0
+                              tl nothing 0 0
+                                name elem nothing 0 0
+                seq nothing 0
+typecheck tree: 
+fn(){} fn(pat: string, files: list of string, mustbedir: int): list of string 0 0
+  name filepat1 fn(pat: string, files: list of string, mustbedir: int): list of string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name files nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          call nothing 0 0
+            name filepatdir nothing 0 0
+            seq nothing 0 0
+              name pat nothing 0 0
+              seq nothing 0 0
+                const  string 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    name mustbedir nothing 0 0
+    seq nothing 0 0
+      vardecl list of string 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name files nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name r nothing 0 0
+                  :: nothing 0 0
+                    hd nothing 0 0
+                      name files nothing 0 0
+                    name r nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name files nothing 0 0
+                    tl nothing 0 0
+                      name files nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name files nothing 0 0
+            name r nothing 0 0
+          seq nothing 0 0
+            vardecli nothing 0 0
+              vardecl list of string 0 0
+                seq nothing 0 0
+              = nothing 0 0
+                name nfiles nothing 0 0
+                name nil polymorphic type 0 0
+            seq nothing 0 0
+              for nothing 0 0
+                != nothing 0 0
+                  name files nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name nfiles nothing 0 0
+                        call nothing 0 0
+                          name filepatdir nothing 0 0
+                          seq nothing 0 0
+                            name pat nothing 0 0
+                            seq nothing 0 0
+                              hd nothing 0 0
+                                name files nothing 0 0
+                              seq nothing 0 0
+                                name nfiles nothing 0 0
+                                seq nothing 0 0
+                                  name mustbedir nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          name files nothing 0 0
+                          tl nothing 0 0
+                            name files nothing 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name nfiles nothing 0 0
+typecheck tree: 
+fn(){} fn(pat: string, dir: string, files: list of string, mustbedir: int): list of string 0 0
+  name filepatdir fn(pat: string, dir: string, files: list of string, mustbedir: int): list of string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name pat nothing 0 0
+          const . string 0 0
+        == nothing 0 0
+          name pat nothing 0 0
+          const .. string 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              || nothing 0 0
+                == nothing 0 0
+                  name dir nothing 0 0
+                  const / string 0 0
+                == nothing 0 0
+                  name dir nothing 0 0
+                  const  string 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name files nothing 0 0
+                  :: nothing 0 0
+                    + nothing 0 0
+                      name dir nothing 0 0
+                      name pat nothing 0 0
+                    name files nothing 0 0
+                = nothing 0 0
+                  name files nothing 0 0
+                  :: nothing 0 0
+                    + nothing 0 0
+                      + nothing 0 0
+                        name dir nothing 0 0
+                        const / string 0 0
+                      name pat nothing 0 0
+                    name files nothing 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                name files nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name dirname nothing 0 0
+        name dir nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name dir nothing 0 0
+            const  string 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name dirname nothing 0 0
+              const . string 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                name d nothing 0 0
+                seq nothing 0 0
+                  name n nothing 0 0
+            call nothing 0 0
+              -> nothing 0 0
+                name rdir nothing 0 0
+                name init nothing 0 0
+              seq nothing 0 0
+                name dirname nothing 0 0
+                seq nothing 0 0
+                  | nothing 0 0
+                    | nothing 0 0
+                      -> nothing 0 0
+                        name rdir nothing 0 0
+                        name NAME nothing 0 0
+                      -> nothing 0 0
+                        name rdir nothing 0 0
+                        name DESCENDING nothing 0 0
+                    -> nothing 0 0
+                      name rdir nothing 0 0
+                      name COMPACT nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              == nothing 0 0
+                name d nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name files nothing 0 0
+            seq nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name i nothing 0 0
+                  const (1) int 0 0
+                for nothing 0 0
+                  < nothing 0 0
+                    name i nothing 0 0
+                    name n nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        . nothing 0 0
+                          index nothing 0 0
+                            name d nothing 0 0
+                            - nothing 0 0
+                              name i nothing 0 0
+                              const (1) int 0 0
+                          name name nothing 0 0
+                        . nothing 0 0
+                          index nothing 0 0
+                            name d nothing 0 0
+                            name i nothing 0 0
+                          name name nothing 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+               
+typecheck tree: 
+fn(){} fn(pat: string, name: string): int 0 0
+  name match fn(pat: string, name: string): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name n nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name p nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name p nothing 0 0
+            len nothing 0 0
+              name pat nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name r nothing 0 0
+                  index nothing 0 0
+                    name pat nothing 0 0
+                    ++ nothing 0 0
+                      name p nothing 0 0
+                seq nothing 0 0
+                  case nothing 0 0
+                    name r nothing 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          const (42) int 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            seq nothing 0 0
+                              seq nothing 0 0
+                                = nothing 0 0
+                                  name pat nothing 0 0
+                                  slice nothing 0 0
+                                    name pat nothing 0 0
+                                    seq nothing 0 0
+                                      name p nothing 0 0
+                                      nothing nothing 0 0
+                                if nothing 0 0
+                                  == nothing 0 0
+                                    len nothing 0 0
+                                      name pat nothing 0 0
+                                    const (0) int 0 0
+                                  seq nothing 0 0
+                                    return nothing 0 0
+                                      const (1) int 0 0
+                              for nothing 0 0
+                                <= nothing 0 0
+                                  name n nothing 0 0
+                                  len nothing 0 0
+                                    name name nothing 0 0
+                                seq nothing 0 0
+                                  if nothing 0 0
+                                    call nothing 0 0
+                                      name match nothing 0 0
+                                      seq nothing 0 0
+                                        name pat nothing 0 0
+                                        seq nothing 0 0
+                                          slice nothing 0 0
+                                            name name nothing 0 0
+                                            seq nothing 0 0
+                                              name n nothing 0 0
+                                              nothing nothing 0 0
+                                    seq nothing 0 0
+                                      return nothing 0 0
+                                        const (1) int 0 0
+                                  ++ nothing 0 0
+                                    name n nothing 0 0
+                            return nothing 0 0
+                              const (0) int 0 0
+                      seq nothing 0 0
+                        label nothing 0 0
+                          seq nothing 0 0
+                            const (91) int 0 0
+                          scope nothing 0 0
+                            seq nothing 0 0
+                              seq nothing 0 0
+                                seq nothing 0 0
+                                  seq nothing 0 0
+                                    seq nothing 0 0
+                                      seq nothing 0 0
+                                        seq nothing 0 0
+                                          if nothing 0 0
+                                            == nothing 0 0
+                                              name n nothing 0 0
+                                          
+typecheck tree: 
+fn(){} fn(pat: string, p: int): (int, int, int) 0 0
+  name range fn(pat: string, p: int): (int, int, int) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      tuple nothing 0 0
+        seq nothing 0 0
+          name q nothing 0 0
+          seq nothing 0 0
+            name lo nothing 0 0
+            seq nothing 0 0
+              name nil polymorphic type 0 0
+      call nothing 0 0
+        name char nothing 0 0
+        seq nothing 0 0
+          name pat nothing 0 0
+          seq nothing 0 0
+            name p nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        tuple nothing 0 0
+          seq nothing 0 0
+            name q1 nothing 0 0
+            seq nothing 0 0
+              name hi nothing 0 0
+              seq nothing 0 0
+                name esc nothing 0 0
+        call nothing 0 0
+          name char nothing 0 0
+          seq nothing 0 0
+            name pat nothing 0 0
+            seq nothing 0 0
+              name q nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          && nothing 0 0
+            ! nothing 0 0
+              name esc nothing 0 0
+            == nothing 0 0
+              name hi nothing 0 0
+              const (45) int 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name q1 nothing 0 0
+                      seq nothing 0 0
+                        name hi nothing 0 0
+                        seq nothing 0 0
+                          name nil polymorphic type 0 0
+                  call nothing 0 0
+                    name char nothing 0 0
+                    seq nothing 0 0
+                      name pat nothing 0 0
+                      seq nothing 0 0
+                        name q1 nothing 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name q1 nothing 0 0
+                        seq nothing 0 0
+                          name lo nothing 0 0
+                          seq nothing 0 0
+                            name hi nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                name q nothing 0 0
+                seq nothing 0 0
+                  name lo nothing 0 0
+                  seq nothing 0 0
+                    name lo nothing 0 0
+typecheck tree: 
+fn(){} fn(pat: string, p: int): (int, int, int) 0 0
+  name char fn(pat: string, p: int): (int, int, int) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name p nothing 0 0
+        len nothing 0 0
+          name pat nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          tuple nothing 0 0
+            seq nothing 0 0
+              name p nothing 0 0
+              seq nothing 0 0
+                const (0) int 0 0
+                seq nothing 0 0
+                  - nothing 0 0
+                    const (1) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name r nothing 0 0
+        index nothing 0 0
+          name pat nothing 0 0
+          ++ nothing 0 0
+            name p nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            == nothing 0 0
+              name p nothing 0 0
+              len nothing 0 0
+                name pat nothing 0 0
+            != nothing 0 0
+              name r nothing 0 0
+              const (92) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              tuple nothing 0 0
+                seq nothing 0 0
+                  name p nothing 0 0
+                  seq nothing 0 0
+                    name r nothing 0 0
+                    seq nothing 0 0
+                      const (0) int 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                + nothing 0 0
+                  name p nothing 0 0
+                  const (1) int 0 0
+                seq nothing 0 0
+                  index nothing 0 0
+                    name pat nothing 0 0
+                    name p nothing 0 0
+                  seq nothing 0 0
+                    const (1) int 0 0
+fncom: expand 2 44aeb8
+ecom: 
+= Sys 10 1
+  name sys Sys 1 0
+  load Sys 10 1
+    const $Sys string 1 0
+    name .m.Sys Sys 17 1
+ecom: 
+load Sys 10 1
+  const $Sys string 1 0
+  name .m.Sys Sys 17 1
+ecom to: 
+name sys Sys 1 0
+ecom: 
+= Readdir 10 1
+  name rdir Readdir 1 0
+  load Readdir 10 1
+    const /dis/lib/readdir.dis string 1 0
+    name .m.Readdir Readdir 17 1
+ecom: 
+load Readdir 10 1
+  const /dis/lib/readdir.dis string 1 0
+  name .m.Readdir Readdir 17 1
+ecom to: 
+name rdir Readdir 1 0
+ecom: 
+= (int, list of string) 10 2
+  tuple (int, list of string) 10 1
+    seq nothing 10 1
+      name nil polymorphic type 1 0
+      seq nothing 10 1
+        name elem list of string 0 0
+  call (int, list of string) 10 2
+    -> fn(s: string, delim: string): (int, list of string) 12 1
+      name sys Sys 1 0
+      name tokenize nothing 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        const / string 1 0
+generate desc for (int, list of string)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type list of string offset 8 (d->offset=8 start=0) returns 8
+generate desc for (int, list of string)
+	desc	$-1,16,"40"
+ecom: 
+call (int, list of string) 10 2
+  -> fn(s: string, delim: string): (int, list of string) 12 1
+    name sys Sys 1 0
+    name tokenize nothing 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      const / string 1 0
+ecom to: 
+name .b1 (int, list of string) 0 0
+generate desc for big
+generate desc for big
+	desc	$-1,8,""
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (64) int 6 0
+ecom: 
+const / string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of string 10 1
+  * list of string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b1 (int, list of string) 0 0
+      const t1 (8) int 6 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+* list of string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b1 (int, list of string) 0 0
+    const t1 (8) int 6 0
+ecom: 
+call list of string 10 2
+  name filepat1 fn(pat: string, files: list of string, mustbedir: int): list of string 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name nil list of string 1 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (64) int 6 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (72) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (80) int 6 0
+eacom: 
+inds int 10 1
+  name pat string 0 0
+  const (0) int 6 0
+ecom: 
+inds int 10 1
+  name pat string 0 0
+  const (0) int 6 0
+ecom to: 
+name .t0 int 0 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  :: list of string 10 1
+    const / string 1 0
+    name nil polymorphic type 1 0
+ecom: 
+:: list of string 10 1
+  const / string 1 0
+  name nil polymorphic type 1 0
+ecom to: 
+name files list of string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t3 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t3 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t3 list of string 0 0
+ecom: 
+= list of string 10 2
+  name files list of string 0 0
+  call list of string 10 2
+    name filepat1 fn(pat: string, files: list of string, mustbedir: int): list of string 11 1
+    seq no type 10 2
+      hd string 10 1
+        name elem list of string 0 0
+      seq no type 10 1
+        name files list of string 0 0
+        seq no type 10 1
+          != int 10 1
+            tl list of string 10 1
+              name elem list of string 0 0
+            name nil list of string 1 0
+ecom: 
+call list of string 10 2
+  name filepat1 fn(pat: string, files: list of string, mustbedir: int): list of string 11 1
+  seq no type 10 2
+    hd string 10 1
+      name elem list of string 0 0
+    seq no type 10 1
+      name files list of string 0 0
+      seq no type 10 1
+        != int 10 1
+          tl list of string 10 1
+            name elem list of string 0 0
+          name nil list of string 1 0
+ecom to: 
+name files list of string 0 0
+generate desc for big
+ecom: 
+hd string 10 1
+  name elem list of string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (64) int 6 0
+ecom: 
+name files list of string 0 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (72) int 6 0
+ecom: 
+!= int 10 1
+  tl list of string 10 1
+    name elem list of string 0 0
+  name nil list of string 1 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b2 big 0 0
+    const (80) int 6 0
+eacom: 
+tl list of string 10 1
+  name elem list of string 0 0
+ecom: 
+tl list of string 10 1
+  name elem list of string 0 0
+ecom to: 
+name .t3 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t3 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t3 list of string 0 0
+ecom: 
+= list of string 10 1
+  name elem list of string 0 0
+  tl list of string 10 1
+    name elem list of string 0 0
+ecom: 
+tl list of string 10 1
+  name elem list of string 0 0
+ecom to: 
+name elem list of string 0 0
+ecom: 
+name files list of string 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+fn: expand
+64: argument pat string ref 3
+72: local .t0 int ref 1
+80: local elem list of string ref 7
+88: local files list of string ref 5
+96: local .b2 big ref 3
+104: local .t3 list of string ref 1
+112: local .b1 (int, list of string) ref 1
+generate desc for expand
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap .t0 type int offset 72 (d->offset=72 start=0) returns -1
+descmap elem type list of string offset 80 (d->offset=80 start=0) returns 80
+descmap files type list of string offset 88 (d->offset=88 start=0) returns 88
+descmap .b2 type big offset 96 (d->offset=96 start=0) returns -1
+descmap .t3 type list of string offset 104 (d->offset=104 start=0) returns 104
+descmap adt offset 112
+descmap offset 112
+descmap t0 type int offset 112 (d->offset=0 start=112) returns -1
+descmap t1 type list of string offset 120 (d->offset=8 start=112) returns 120
+descmap .b1 type (int, list of string) offset 112 (d->offset=112 start=0) returns 120
+fncom: filepat1 3 464258
+ecom: 
+call list of string 10 2
+  name filepatdir fn(pat: string, dir: string, files: list of string, mustbedir: int): list of string 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      const  string 1 0
+      seq no type 10 1
+        name nil list of string 1 0
+        seq no type 10 1
+          name mustbedir int 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (64) int 6 0
+ecom: 
+const  string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (72) int 6 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (80) int 6 0
+ecom: 
+name mustbedir int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (88) int 6 0
+ecom: 
+= list of string 10 1
+  name r list of string 0 0
+  :: list of string 10 1
+    hd string 10 1
+      name files list of string 0 0
+    name r list of string 0 0
+ecom: 
+:: list of string 10 1
+  hd string 10 1
+    name files list of string 0 0
+  name r list of string 0 0
+ecom to: 
+name r list of string 0 0
+eacom: 
+hd string 10 1
+  name files list of string 0 0
+ecom: 
+hd string 10 1
+  name files list of string 0 0
+ecom to: 
+name .t5 string 0 0
+ecom: 
+= string 10 1
+  name .t5 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t5 string 0 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  tl list of string 10 1
+    name files list of string 0 0
+ecom: 
+tl list of string 10 1
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  name r list of string 0 0
+ecom: 
+name r list of string 0 0
+ecom to: 
+name files list of string 0 0
+ecom: 
+= list of string 10 1
+  name nfiles list of string 0 0
+  name nil polymorphic type 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name nfiles list of string 0 0
+ecom: 
+= list of string 10 2
+  name nfiles list of string 0 0
+  call list of string 10 2
+    name filepatdir fn(pat: string, dir: string, files: list of string, mustbedir: int): list of string 11 1
+    seq no type 10 2
+      name pat string 0 0
+      seq no type 10 2
+        hd string 10 1
+          name files list of string 0 0
+        seq no type 10 1
+          name nfiles list of string 0 0
+          seq no type 10 1
+            name mustbedir int 0 0
+ecom: 
+call list of string 10 2
+  name filepatdir fn(pat: string, dir: string, files: list of string, mustbedir: int): list of string 11 1
+  seq no type 10 2
+    name pat string 0 0
+    seq no type 10 2
+      hd string 10 1
+        name files list of string 0 0
+      seq no type 10 1
+        name nfiles list of string 0 0
+        seq no type 10 1
+          name mustbedir int 0 0
+ecom to: 
+name nfiles list of string 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (64) int 6 0
+ecom: 
+hd string 10 1
+  name files list of string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (72) int 6 0
+ecom: 
+name nfiles list of string 0 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (80) int 6 0
+ecom: 
+name mustbedir int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b4 big 0 0
+    const (88) int 6 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  tl list of string 10 1
+    name files list of string 0 0
+ecom: 
+tl list of string 10 1
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+ecom: 
+name nfiles list of string 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+fn: filepat1
+64: argument pat string ref 2
+72: argument files list of string ref 10
+80: argument mustbedir int ref 2
+88: local nfiles list of string ref 4
+96: local r list of string ref 3
+104: local .b4 big ref 2
+112: local .t5 string ref 1
+generate desc for filepat1
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap files type list of string offset 72 (d->offset=72 start=0) returns 72
+descmap mustbedir type int offset 80 (d->offset=80 start=0) returns -1
+descmap nfiles type list of string offset 88 (d->offset=88 start=0) returns 88
+descmap r type list of string offset 96 (d->offset=96 start=0) returns 96
+descmap .b4 type big offset 104 (d->offset=104 start=0) returns -1
+descmap .t5 type string offset 112 (d->offset=112 start=0) returns 112
+fncom: filepatdir 3 464318
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  :: list of string 10 1
+    + string 10 1
+      name dir string 0 0
+      name pat string 0 0
+    name files list of string 0 0
+ecom: 
+:: list of string 10 1
+  + string 10 1
+    name dir string 0 0
+    name pat string 0 0
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+eacom: 
++ string 10 1
+  name dir string 0 0
+  name pat string 0 0
+ecom: 
++ string 10 1
+  name dir string 0 0
+  name pat string 0 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
+= string 10 1
+  name .t6 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  :: list of string 10 1
+    + string 10 1
+      + string 10 1
+        name dir string 0 0
+        const / string 1 0
+      name pat string 0 0
+    name files list of string 0 0
+ecom: 
+:: list of string 10 1
+  + string 10 1
+    + string 10 1
+      name dir string 0 0
+      const / string 1 0
+    name pat string 0 0
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+eacom: 
++ string 10 1
+  + string 10 1
+    name dir string 0 0
+    const / string 1 0
+  name pat string 0 0
+ecom: 
++ string 10 1
+  + string 10 1
+    name dir string 0 0
+    const / string 1 0
+  name pat string 0 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
++ string 10 1
+  name dir string 0 0
+  const / string 1 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
+= string 10 1
+  name .t6 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
+name files list of string 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+ecom: 
+= string 10 1
+  name dirname string 0 0
+  name dir string 0 0
+ecom: 
+name dir string 0 0
+ecom to: 
+name dirname string 0 0
+ecom: 
+= string 10 1
+  name dirname string 0 0
+  const . string 1 0
+ecom: 
+const . string 1 0
+ecom to: 
+name dirname string 0 0
+ecom: 
+= (array of ref Sys->Dir, int) 10 2
+  tuple (array of ref Sys->Dir, int) 10 1
+    seq nothing 10 1
+      name d array of ref Sys->Dir 0 0
+      seq nothing 10 1
+        name n int 0 0
+  call (array of ref Sys->Dir, int) 10 2
+    -> fn(path: string, sortkey: int): (array of ref Sys->Dir, int) 12 1
+      name rdir Readdir 1 0
+      name init nothing 11 1
+    seq no type 10 1
+      name dirname string 0 0
+      seq no type 10 1
+        const (48) int 6 0
+ecom: 
+call (array of ref Sys->Dir, int) 10 2
+  -> fn(path: string, sortkey: int): (array of ref Sys->Dir, int) 12 1
+    name rdir Readdir 1 0
+    name init nothing 11 1
+  seq no type 10 1
+    name dirname string 0 0
+    seq no type 10 1
+      const (48) int 6 0
+ecom to: 
+name d (array of ref Sys->Dir, int) 0 0
+generate desc for big
+ecom: 
+name dirname string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b7 big 0 0
+    const (64) int 6 0
+ecom: 
+const (48) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b7 big 0 0
+    const (72) int 6 0
+ecom: 
+name files list of string 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+ecom: 
+= int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name i int 0 0
+ecom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom to: 
+name .t6 string 0 0
+eacom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+ecom to: 
+name .t6 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  name i int 0 0
+ecom to: 
+name .b7 big 0 0
+eacom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      - int 10 1
+        name i int 0 0
+        const (1) int 6 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    - int 10 1
+      name i int 0 0
+      const (1) int 6 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    - int 10 1
+      name i int 0 0
+      const (1) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  - int 10 1
+    name i int 0 0
+    const (1) int 6 0
+ecom to: 
+name .b7 big 0 0
+eacom: 
+- int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+- int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t9 int 0 0
+ecom: 
+= ref Sys->Dir 10 1
+  name .t8 ref Sys->Dir 0 0
+  name nil ref Sys->Dir 1 0
+ecom: 
+name nil ref Sys->Dir 1 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+ecom: 
+= string 10 1
+  name .t6 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t6 string 0 0
+ecom: 
+= array of ref Sys->Dir 10 2
+  slice array of ref Sys->Dir 10 2
+    name d array of ref Sys->Dir 0 0
+    seq no type 10 2
+      - int 10 1
+        name i int 0 0
+        const (1) int 6 0
+      nothing no type 10 1
+  slice array of ref Sys->Dir 10 1
+    name d array of ref Sys->Dir 0 0
+    seq no type 10 1
+      name i int 0 0
+      nothing no type 10 1
+ecom: 
+- int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t9 int 0 0
+eacom: 
+slice array of ref Sys->Dir 10 1
+  name d array of ref Sys->Dir 0 0
+  seq no type 10 1
+    name i int 0 0
+    nothing no type 10 1
+ecom: 
+slice array of ref Sys->Dir 10 1
+  name d array of ref Sys->Dir 0 0
+  seq no type 10 1
+    name i int 0 0
+    nothing no type 10 1
+ecom to: 
+name .t8 array of ref Sys->Dir 0 0
+ecom: 
+len int 10 1
+  name d array of ref Sys->Dir 0 0
+ecom to: 
+name .t10 int 0 0
+ecom: 
+name d array of ref Sys->Dir 0 0
+ecom to: 
+name .t8 array of ref Sys->Dir 0 0
+ecom: 
+= array of ref Sys->Dir 10 1
+  name .t8 array of ref Sys->Dir 0 0
+  name nil array of ref Sys->Dir 1 0
+ecom: 
+name nil array of ref Sys->Dir 1 0
+ecom to: 
+name .t8 array of ref Sys->Dir 0 0
+ecom: 
+-- int 10 1
+  name n int 0 0
+  const (1) int 6 0
+ecom: 
+-- int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+++ int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+= int 10 1
+  name i int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name i int 0 0
+eacom: 
+call int 10 2
+  name match fn(pat: string, name: string): int 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      * string 10 1
+        * ref Sys->Dir 10 1
+          indx big 10 1
+            name d array of ref Sys->Dir 0 0
+            name i int 0 0
+ecom: 
+call int 10 2
+  name match fn(pat: string, name: string): int 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      * string 10 1
+        * ref Sys->Dir 10 1
+          indx big 10 1
+            name d array of ref Sys->Dir 0 0
+            name i int 0 0
+ecom to: 
+name .t10 int 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b7 big 0 0
+    const (64) int 6 0
+ecom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b7 big 0 0
+    const (72) int 6 0
+eacom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  name i int 0 0
+ecom to: 
+name .b11 big 0 0
+ecom: 
+= ref Sys->Dir 10 1
+  name .t8 ref Sys->Dir 0 0
+  name nil ref Sys->Dir 1 0
+ecom: 
+name nil ref Sys->Dir 1 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+eacom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Sys->Dir 10 1
+        indx big 10 1
+          name d array of ref Sys->Dir 0 0
+          name i int 0 0
+      const mode (48) int 6 0
+  const .i.80000000 (-2147483648) int 1 0
+ecom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Sys->Dir 10 1
+        indx big 10 1
+          name d array of ref Sys->Dir 0 0
+          name i int 0 0
+      const mode (48) int 6 0
+  const .i.80000000 (-2147483648) int 1 0
+ecom to: 
+name .t10 int 0 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Sys->Dir 10 1
+      indx big 10 1
+        name d array of ref Sys->Dir 0 0
+        name i int 0 0
+    const mode (48) int 6 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  name i int 0 0
+ecom to: 
+name .b11 big 0 0
+ecom: 
+= ref Sys->Dir 10 1
+  name .t8 ref Sys->Dir 0 0
+  name nil ref Sys->Dir 1 0
+ecom: 
+name nil ref Sys->Dir 1 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+ecom: 
+= list of string 10 1
+  name files list of string 0 0
+  :: list of string 10 1
+    + string 10 1
+      name dir string 0 0
+      * string 10 1
+        * ref Sys->Dir 10 1
+          indx big 10 1
+            name d array of ref Sys->Dir 0 0
+            name i int 0 0
+    name files list of string 0 0
+ecom: 
+:: list of string 10 1
+  + string 10 1
+    name dir string 0 0
+    * string 10 1
+      * ref Sys->Dir 10 1
+        indx big 10 1
+          name d array of ref Sys->Dir 0 0
+          name i int 0 0
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+eacom: 
++ string 10 1
+  name dir string 0 0
+  * string 10 1
+    * ref Sys->Dir 10 1
+      indx big 10 1
+        name d array of ref Sys->Dir 0 0
+        name i int 0 0
+ecom: 
++ string 10 1
+  name dir string 0 0
+  * string 10 1
+    * ref Sys->Dir 10 1
+      indx big 10 1
+        name d array of ref Sys->Dir 0 0
+        name i int 0 0
+ecom to: 
+name .t8 string 0 0
+eacom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+ecom to: 
+name .t8 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  name i int 0 0
+ecom to: 
+name .b11 big 0 0
+ecom: 
+= string 10 1
+  name .t8 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t8 string 0 0
+ecom: 
+= list of string 10 2
+  name files list of string 0 0
+  :: list of string 10 2
+    + string 10 2
+      + string 10 1
+        name dir string 0 0
+        const / string 1 0
+      * string 10 1
+        * ref Sys->Dir 10 1
+          indx big 10 1
+            name d array of ref Sys->Dir 0 0
+            name i int 0 0
+    name files list of string 0 0
+ecom: 
+:: list of string 10 2
+  + string 10 2
+    + string 10 1
+      name dir string 0 0
+      const / string 1 0
+    * string 10 1
+      * ref Sys->Dir 10 1
+        indx big 10 1
+          name d array of ref Sys->Dir 0 0
+          name i int 0 0
+  name files list of string 0 0
+ecom to: 
+name files list of string 0 0
+eacom: 
++ string 10 2
+  + string 10 1
+    name dir string 0 0
+    const / string 1 0
+  * string 10 1
+    * ref Sys->Dir 10 1
+      indx big 10 1
+        name d array of ref Sys->Dir 0 0
+        name i int 0 0
+ecom: 
++ string 10 2
+  + string 10 1
+    name dir string 0 0
+    const / string 1 0
+  * string 10 1
+    * ref Sys->Dir 10 1
+      indx big 10 1
+        name d array of ref Sys->Dir 0 0
+        name i int 0 0
+ecom to: 
+name .t8 string 0 0
+ecom: 
++ string 10 1
+  name dir string 0 0
+  const / string 1 0
+ecom to: 
+name .t8 string 0 0
+eacom: 
+* string 10 1
+  * ref Sys->Dir 10 1
+    indx big 10 1
+      name d array of ref Sys->Dir 0 0
+      name i int 0 0
+ecom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+ecom to: 
+name .t6 ref Sys->Dir 0 0
+eacom: 
+* ref Sys->Dir 10 1
+  indx big 10 1
+    name d array of ref Sys->Dir 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name d array of ref Sys->Dir 0 0
+  name i int 0 0
+ecom to: 
+name .b11 big 0 0
+ecom: 
+= ref Sys->Dir 10 1
+  name .t6 ref Sys->Dir 0 0
+  name nil ref Sys->Dir 1 0
+ecom: 
+name nil ref Sys->Dir 1 0
+ecom to: 
+name .t6 ref Sys->Dir 0 0
+ecom: 
+= string 10 1
+  name .t8 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t8 string 0 0
+ecom: 
+++ int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+name files list of string 0 0
+ecom to: 
+* list of string 8 0
+  name .ret int 0 0
+fn: filepatdir
+64: argument pat string ref 5
+72: argument dir string ref 10
+80: argument files list of string ref 11
+88: argument mustbedir int ref 1
+92: local i int ref 15
+96: local .t10 int ref 1
+100: local .t9 int ref 1
+104: local d array of ref Sys->Dir ref 10
+112: local n int ref 4
+120: local .b11 big ref 4
+128: local .b7 big ref 4
+136: local dirname string ref 3
+144: local .t6 string ref 1
+152: local .t8 ref Sys->Dir ref 1
+generate desc for filepatdir
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap dir type string offset 72 (d->offset=72 start=0) returns 72
+descmap files type list of string offset 80 (d->offset=80 start=0) returns 80
+descmap mustbedir type int offset 88 (d->offset=88 start=0) returns -1
+descmap i type int offset 92 (d->offset=92 start=0) returns -1
+descmap .t10 type int offset 96 (d->offset=96 start=0) returns -1
+descmap .t9 type int offset 100 (d->offset=100 start=0) returns -1
+descmap d type array of ref Sys->Dir offset 104 (d->offset=104 start=0) returns 104
+descmap n type int offset 112 (d->offset=112 start=0) returns -1
+descmap .b11 type big offset 120 (d->offset=120 start=0) returns -1
+descmap .b7 type big offset 128 (d->offset=128 start=0) returns -1
+descmap dirname type string offset 136 (d->offset=136 start=0) returns 136
+descmap .t6 type string offset 144 (d->offset=144 start=0) returns 144
+descmap .t8 type ref Sys->Dir offset 152 (d->offset=152 start=0) returns 152
+fncom: match 4 44b4b8
+ecom: 
+= int 10 1
+  name n int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name n int 0 0
+ecom: 
+= int 10 1
+  name p int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name p int 0 0
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t12 int 0 0
+ecom: 
+= int 10 1
+  name r int 0 0
+  inds int 10 1
+    name pat string 0 0
+    ++ int 10 1
+      name p int 0 0
+      const (1) int 6 0
+ecom: 
+inds int 10 1
+  name pat string 0 0
+  ++ int 10 1
+    name p int 0 0
+    const (1) int 6 0
+ecom to: 
+name r int 0 0
+ecom: 
+++ int 10 1
+  name p int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t12 int 0 0
+ecom: 
+= string 10 1
+  name pat string 0 0
+  slice string 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name p int 0 0
+      nothing no type 10 1
+ecom: 
+slice string 10 1
+  name pat string 0 0
+  seq no type 10 1
+    name p int 0 0
+    nothing no type 10 1
+ecom to: 
+name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t12 int 0 0
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t12 int 0 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t12 int 0 0
+eacom: 
+call int 10 2
+  name match fn(pat: string, name: string): int 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      slice string 10 1
+        name name string 0 0
+        seq no type 10 1
+          name n int 0 0
+          nothing no type 10 1
+ecom: 
+call int 10 2
+  name match fn(pat: string, name: string): int 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      slice string 10 1
+        name name string 0 0
+        seq no type 10 1
+          name n int 0 0
+          nothing no type 10 1
+ecom to: 
+name .t12 int 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (64) int 6 0
+ecom: 
+slice string 10 1
+  name name string 0 0
+  seq no type 10 1
+    name n int 0 0
+    nothing no type 10 1
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (72) int 6 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+name name string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (72) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+++ int 10 1
+  name n int 0 0
+  const (1) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+= int 10 1
+  name s int 0 0
+  inds int 10 1
+    name name string 0 0
+    ++ int 10 1
+      name n int 0 0
+      const (1) int 6 0
+ecom: 
+inds int 10 1
+  name name string 0 0
+  ++ int 10 1
+    name n int 0 0
+    const (1) int 6 0
+ecom to: 
+name s int 0 0
+ecom: 
+++ int 10 1
+  name n int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+= int 10 1
+  name matched int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name matched int 0 0
+ecom: 
+= int 10 1
+  name invert int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name invert int 0 0
+ecom: 
+= int 10 1
+  name first int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name first int 0 0
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+= (int, int, int) 10 2
+  tuple (int, int, int) 10 1
+    seq no type 10 1
+      name p int 0 0
+      seq no type 10 1
+        name r int 0 0
+        seq no type 10 1
+          name esc int 0 0
+  call (int, int, int) 10 2
+    name char fn(pat: string, p: int): (int, int, int) 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        name p int 0 0
+generate desc for (int, int, int)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type int offset 4 (d->offset=4 start=0) returns -1
+descmap t2 type int offset 8 (d->offset=8 start=0) returns -1
+generate desc for (int, int, int)
+	desc	$-1,12,""
+ecom: 
+call (int, int, int) 10 2
+  name char fn(pat: string, p: int): (int, int, int) 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name p int 0 0
+ecom to: 
+name .b15 (int, int, int) 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (64) int 6 0
+ecom: 
+name p int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (72) int 6 0
+ecom: 
+= int 10 1
+  name invert int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name invert int 0 0
+ecom: 
+= int 10 1
+  name first int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name first int 0 0
+ecom: 
+= int 10 1
+  name first int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name first int 0 0
+ecom: 
+= (int, int, int) 10 2
+  tuple (int, int, int) 10 1
+    seq no type 10 1
+      name p int 0 0
+      seq no type 10 1
+        name lo int 0 0
+        seq no type 10 1
+          name hi int 0 0
+  call (int, int, int) 10 2
+    name range fn(pat: string, p: int): (int, int, int) 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        - int 10 1
+          name p int 0 0
+          const (1) int 6 0
+generate desc for (int, int, int)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type int offset 4 (d->offset=4 start=0) returns -1
+descmap t2 type int offset 8 (d->offset=8 start=0) returns -1
+generate desc for (int, int, int)
+	desc	$-1,12,""
+ecom: 
+call (int, int, int) 10 2
+  name range fn(pat: string, p: int): (int, int, int) 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      - int 10 1
+        name p int 0 0
+        const (1) int 6 0
+ecom to: 
+name .b15 (int, int, int) 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (64) int 6 0
+ecom: 
+- int 10 1
+  name p int 0 0
+  const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b13 big 0 0
+    const (72) int 6 0
+ecom: 
+= int 10 1
+  name matched int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name matched int 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+++ int 10 1
+  name n int 0 0
+  const (1) int 6 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t14 int 0 0
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+inds int 10 1
+  name name string 0 0
+  ++ int 10 1
+    name n int 0 0
+    const (1) int 6 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+++ int 10 1
+  name n int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t12 int 0 0
+eacom: 
+inds int 10 1
+  name pat string 0 0
+  ++ int 10 1
+    name p int 0 0
+    const (1) int 6 0
+ecom: 
+inds int 10 1
+  name pat string 0 0
+  ++ int 10 1
+    name p int 0 0
+    const (1) int 6 0
+ecom to: 
+name .t12 int 0 0
+ecom: 
+++ int 10 1
+  name p int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t16 int 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t16 int 0 0
+eacom: 
+inds int 10 1
+  name name string 0 0
+  ++ int 10 1
+    name n int 0 0
+    const (1) int 6 0
+ecom: 
+inds int 10 1
+  name name string 0 0
+  ++ int 10 1
+    name n int 0 0
+    const (1) int 6 0
+ecom to: 
+name .t16 int 0 0
+ecom: 
+++ int 10 1
+  name n int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t14 int 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+== int 10 1
+  name n int 0 0
+  len int 10 1
+    name name string 0 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+eacom: 
+len int 10 1
+  name name string 0 0
+ecom: 
+len int 10 1
+  name name string 0 0
+ecom to: 
+name .t16 int 0 0
+fn: match
+64: argument pat string ref 11
+72: argument name string ref 10
+80: local n int ref 13
+84: local p int ref 11
+88: local r int ref 7
+92: local esc int ref 4
+96: local first int ref 4
+100: local invert int ref 3
+104: local matched int ref 3
+108: local s int ref 3
+112: local hi int ref 2
+116: local lo int ref 2
+120: local .t12 int ref 1
+124: local .t14 int ref 1
+128: local .t16 int ref 1
+136: local .b13 big ref 3
+144: local .b15 (int, int, int) ref 2
+generate desc for match
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap name type string offset 72 (d->offset=72 start=0) returns 72
+descmap n type int offset 80 (d->offset=80 start=0) returns -1
+descmap p type int offset 84 (d->offset=84 start=0) returns -1
+descmap r type int offset 88 (d->offset=88 start=0) returns -1
+descmap esc type int offset 92 (d->offset=92 start=0) returns -1
+descmap first type int offset 96 (d->offset=96 start=0) returns -1
+descmap invert type int offset 100 (d->offset=100 start=0) returns -1
+descmap matched type int offset 104 (d->offset=104 start=0) returns -1
+descmap s type int offset 108 (d->offset=108 start=0) returns -1
+descmap hi type int offset 112 (d->offset=112 start=0) returns -1
+descmap lo type int offset 116 (d->offset=116 start=0) returns -1
+descmap .t12 type int offset 120 (d->offset=120 start=0) returns -1
+descmap .t14 type int offset 124 (d->offset=124 start=0) returns -1
+descmap .t16 type int offset 128 (d->offset=128 start=0) returns -1
+descmap .b13 type big offset 136 (d->offset=136 start=0) returns -1
+descmap adt offset 144
+descmap offset 144
+descmap t0 type int offset 144 (d->offset=0 start=144) returns -1
+descmap t1 type int offset 148 (d->offset=4 start=144) returns -1
+descmap t2 type int offset 152 (d->offset=8 start=144) returns -1
+descmap .b15 type (int, int, int) offset 144 (d->offset=144 start=0) returns -1
+fncom: range 2 4643d8
+ecom: 
+= (int, int, int) 10 2
+  tuple (int, int, int) 10 1
+    seq nothing 10 1
+      name q int 0 0
+      seq nothing 10 1
+        name lo int 0 0
+        seq nothing 10 1
+          name nil polymorphic type 1 0
+  call (int, int, int) 10 2
+    name char fn(pat: string, p: int): (int, int, int) 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        name p int 0 0
+generate desc for (int, int, int)
+ecom: 
+call (int, int, int) 10 2
+  name char fn(pat: string, p: int): (int, int, int) 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name p int 0 0
+ecom to: 
+name .b17 (int, int, int) 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (64) int 6 0
+ecom: 
+name p int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (72) int 6 0
+ecom: 
+= (int, int, int) 10 2
+  tuple (int, int, int) 10 1
+    seq nothing 10 1
+      name q1 int 0 0
+      seq nothing 10 1
+        name hi int 0 0
+        seq nothing 10 1
+          name esc int 0 0
+  call (int, int, int) 10 2
+    name char fn(pat: string, p: int): (int, int, int) 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        name q int 0 0
+ecom: 
+call (int, int, int) 10 2
+  name char fn(pat: string, p: int): (int, int, int) 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name q int 0 0
+ecom to: 
+name q1 (int, int, int) 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (64) int 6 0
+ecom: 
+name q int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (72) int 6 0
+ecom: 
+= (int, int, int) 10 2
+  tuple (int, int, int) 10 1
+    seq no type 10 1
+      name q1 int 0 0
+      seq no type 10 1
+        name hi int 0 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+  call (int, int, int) 10 2
+    name char fn(pat: string, p: int): (int, int, int) 11 1
+    seq no type 10 1
+      name pat string 0 0
+      seq no type 10 1
+        name q1 int 0 0
+generate desc for (int, int, int)
+ecom: 
+call (int, int, int) 10 2
+  name char fn(pat: string, p: int): (int, int, int) 11 1
+  seq no type 10 1
+    name pat string 0 0
+    seq no type 10 1
+      name q1 int 0 0
+ecom to: 
+name .b17 (int, int, int) 0 0
+generate desc for big
+ecom: 
+name pat string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (64) int 6 0
+ecom: 
+name q1 int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (72) int 6 0
+ecom: 
+tuple (int, int, int) 10 1
+  seq no type 10 1
+    name q1 int 0 0
+    seq no type 10 1
+      name lo int 0 0
+      seq no type 10 1
+        name hi int 0 0
+ecom to: 
+* (int, int, int) 8 0
+  name .ret int 0 0
+ecom: 
+name q1 int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (0) int 6 0
+ecom: 
+name lo int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (4) int 6 0
+ecom: 
+name hi int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (8) int 6 0
+ecom: 
+tuple (int, int, int) 10 1
+  seq no type 10 1
+    name q int 0 0
+    seq no type 10 1
+      name lo int 0 0
+      seq no type 10 1
+        name lo int 0 0
+ecom to: 
+* (int, int, int) 8 0
+  name .ret int 0 0
+ecom: 
+name q int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (0) int 6 0
+ecom: 
+name lo int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (4) int 6 0
+ecom: 
+name lo int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (8) int 6 0
+fn: range
+64: argument pat string ref 3
+72: argument p int ref 1
+76: local lo int ref 4
+80: local q1 int ref 4
+84: local hi int ref 4
+88: local esc int ref 2
+92: local q int ref 3
+96: local .b18 big ref 3
+104: local .b17 (int, int, int) ref 2
+generate desc for range
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap p type int offset 72 (d->offset=72 start=0) returns -1
+descmap lo type int offset 76 (d->offset=76 start=0) returns -1
+descmap q1 type int offset 80 (d->offset=80 start=0) returns -1
+descmap hi type int offset 84 (d->offset=84 start=0) returns -1
+descmap esc type int offset 88 (d->offset=88 start=0) returns -1
+descmap q type int offset 92 (d->offset=92 start=0) returns -1
+descmap .b18 type big offset 96 (d->offset=96 start=0) returns -1
+descmap adt offset 104
+descmap offset 104
+descmap t0 type int offset 104 (d->offset=0 start=104) returns -1
+descmap t1 type int offset 108 (d->offset=4 start=104) returns -1
+descmap t2 type int offset 112 (d->offset=8 start=104) returns -1
+descmap .b17 type (int, int, int) offset 104 (d->offset=104 start=0) returns -1
+fncom: char 5 464498
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t19 int 0 0
+ecom: 
+tuple (int, int, int) 10 1
+  seq no type 10 1
+    name p int 0 0
+    seq no type 10 1
+      const (0) int 6 0
+      seq no type 10 1
+        const (-1) int 6 0
+ecom to: 
+* (int, int, int) 8 0
+  name .ret int 0 0
+ecom: 
+name p int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (4) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (8) int 6 0
+ecom: 
+= int 10 1
+  name r int 0 0
+  inds int 10 1
+    name pat string 0 0
+    ++ int 10 1
+      name p int 0 0
+      const (1) int 6 0
+ecom: 
+inds int 10 1
+  name pat string 0 0
+  ++ int 10 1
+    name p int 0 0
+    const (1) int 6 0
+ecom to: 
+name r int 0 0
+ecom: 
+++ int 10 1
+  name p int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t19 int 0 0
+eacom: 
+len int 10 1
+  name pat string 0 0
+ecom: 
+len int 10 1
+  name pat string 0 0
+ecom to: 
+name .t19 int 0 0
+ecom: 
+tuple (int, int, int) 10 1
+  seq no type 10 1
+    name p int 0 0
+    seq no type 10 1
+      name r int 0 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+* (int, int, int) 8 0
+  name .ret int 0 0
+ecom: 
+name p int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (0) int 6 0
+ecom: 
+name r int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (4) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (8) int 6 0
+ecom: 
+tuple (int, int, int) 10 2
+  seq no type 10 2
+    + int 15 1
+      name p int 0 0
+      const (1) int 6 0
+    seq no type 10 2
+      inds int 10 1
+        name pat string 0 0
+        name p int 0 0
+      seq no type 10 1
+        const (1) int 6 0
+ecom to: 
+* (int, int, int) 8 0
+  name .ret int 0 0
+ecom: 
++ int 15 1
+  name p int 0 0
+  const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (0) int 6 0
+ecom: 
+inds int 10 1
+  name pat string 0 0
+  name p int 0 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (4) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * (int, int, int) 8 0
+        name .ret int 0 0
+    const (8) int 6 0
+fn: char
+64: argument pat string ref 4
+72: argument p int ref 7
+76: local r int ref 3
+80: local .t19 int ref 1
+generate desc for char
+descmap offset 0
+descmap pat type string offset 64 (d->offset=64 start=0) returns 64
+descmap p type int offset 72 (d->offset=72 start=0) returns -1
+descmap r type int offset 76 (d->offset=76 start=0) returns -1
+descmap .t19 type int offset 80 (d->offset=80 start=0) returns -1
+nil 'nil' ref 39
+nil '' ref 4
+variable '$Sys' val '"$Sys"'
+variable '.' val '"."'
+variable '..' val '".."'
+variable '.c0' val '.c0'
+variable '.i.80000000' val '.i.80000000'
+variable '.m.Readdir' val ''
+variable '.m.Sys' val ''
+variable '/' val '"/"'
+variable '/dis/lib/readdir.dis' val '"/dis/lib/r..."'
+variable 'nil' val ''
+variable 'rdir' val ''
+variable 'sys' val ''
+nil 'nil' ref 39
+nil '' ref 4
+generate desc for Filepat
+descmap offset 0
+descmap $Sys type string offset 0 (d->offset=0 start=0) returns 0
+descmap . type string offset 8 (d->offset=8 start=0) returns 8
+descmap .. type string offset 16 (d->offset=16 start=0) returns 16
+descmap .c0 type case int labels offset 24 (d->offset=24 start=0) returns -1
+descmap .i.80000000 type int offset 80 (d->offset=80 start=0) returns -1
+descmap / type string offset 88 (d->offset=88 start=0) returns 88
+descmap /dis/lib/readdir.dis type string offset 96 (d->offset=96 start=0) returns 96
+descmap nil type polymorphic type offset 104 (d->offset=104 start=0) returns 104
+descmap rdir type Readdir offset 112 (d->offset=112 start=0) returns 112
+descmap sys type Sys offset 120 (d->offset=120 start=0) returns 120
+R1: expand 44aeb8 46e488 46e928
+R1: match 44b4b8 46e548 471948
+R3: expand 46e488 44aeb8 46e928
+R3: match 46e548 44b4b8 471948
+313 instructions
+10 data elements
+7 type descriptors
+2 functions exported
+1600 stack size
+signed expand type fn(pat: string): list of string len 6 sig 0xaf4c19dd
+signed match type fn(pat: string, name: string): int len 7 sig 0x21e337e3
+signed Readdir->init type fn(path: string, sortkey: int): (array of ref Sys->Dir, int) len 116 sig 0x156cb1b
+signed Sys->tokenize type fn(s: string, delim: string): (int, list of string) len 13 sig 0x57338f20
--- /dev/null
+++ b/tests/fmttest.c
@@ -1,0 +1,31 @@
+#include "lib9.h"
+
+/*
+	lib9 does not install e, f, and g - so no float or double format
+		inferno-os/lib9/fmt.c
+			knownfmt
+ */
+
+void
+main(int argc, char *argv[])
+{
+	print("fmttest --\n");
+	print("hello world inferno-os\n");
+	print("x: %x\n", 0x87654321);
+	print("d: %d\n", 0x87654321);
+	print("s: %s\n", "hi there");
+	print("c: %c\n", '!');
+	print("smiley: %C\n", (Rune)0x263a);
+
+	print("%020.10d\n", 100);
+	print("%d %d %d\n", 1, 2222, 33333333);
+	print("%019d\n", 0);
+	print("%08d %08d %08d\n", 1, 2222, 33333333);
+	print("%08d %08d %08d\n", 1, 2222, 33333333);
+	print("%x %X %b\n", 0x11111111, 0xabcd1234, 12345);
+	print("%lld %lld %lld\n", 1LL, 222222222LL, 3333333333333LL);
+	print("%019lld %019lld %019lld\n", 1LL, 222222222LL, 3333333333333LL);
+	print("%020lld %020lld %020lld\n", 1LL, 222222222LL, 3333333333333LL);
+	print("%llx %llX %llb\n", 0x111111111111LL, 0xabcd12345678LL, 112342345LL);
+	exits(nil);
+}
--- /dev/null
+++ b/tests/fmttest3.c
@@ -1,0 +1,59 @@
+#include "lib9.h"
+#include "interp.h"
+
+void
+test(char *fmt, ...)
+{
+	va_list arg;
+	char fmtbuf[100], stdbuf[100];
+
+	va_start(arg, fmt);
+	vsnprint(fmtbuf, sizeof fmtbuf, fmt, arg);
+	va_end(arg);
+
+	va_start(arg, fmt);
+	vsnprint(stdbuf, sizeof stdbuf, fmt, arg);
+	va_end(arg);
+
+	if(strcmp(fmtbuf, stdbuf) != 0)
+		print("fmt %s: fmt=\"%s\" std=\"%s\"\n", fmt, fmtbuf, stdbuf);
+
+	print("fmt %s: %s\n", fmt, fmtbuf);
+}
+
+
+int
+main(int argc, char *argv[])
+{
+	fmtinstall('g', gfltconv);
+	fmtinstall('G', gfltconv);
+	fmtinstall('e', gfltconv);
+	/* fmtinstall('E', gfltconv); */	/* avoid clash with ether address */
+	fmtinstall(0x00c9, gfltconv);	/* L'É' */
+	fmtinstall('f', gfltconv);
+
+	print("fmttest3 --\n");
+	test("%f", 3.14159);
+	test("%f", 3.14159e10);
+	test("%f", 3.14159e-10);
+
+	test("%e", 3.14159);
+	test("%e", 3.14159e10);
+	test("%e", 3.14159e-10);
+
+	test("%g", 3.14159);
+	test("%g", 3.14159e10);
+	test("%g", 3.14159e-10);
+
+	test("%g", 2e25);
+	test("%.18g", 2e25);
+
+	test("%2.18g", 1.0);
+	test("%2.18f", 1.0);
+	test("%f", 3.1415927/4);
+
+	test("%20.10d", 12345);
+	test("%0.10d", 12345);
+
+	return 0;
+}
--- /dev/null
+++ b/tests/gfmttest.c
@@ -1,0 +1,33 @@
+#include "lib9.h"
+#include "interp.h"
+
+void
+main(int argc, char *argv[])
+{
+	char *str = "1e400";
+
+	fmtinstall('g', gfltconv);
+	fmtinstall('G', gfltconv);
+	fmtinstall('e', gfltconv);
+	/* fmtinstall('E', gfltconv); */	/* avoid clash with ether address */
+	fmtinstall(0x00c9, gfltconv);	/* L'É' */
+	fmtinstall('f', gfltconv);
+
+	print("gfmttest --\n");
+	print("g: %g %g %g\n", 3.14159, 3.14159e10, 3.14159e-10);
+	print("e: %e %e %e\n", 3.14159, 3.14159e10, 3.14159e-10);
+	print("f: %f %f %f\n", 3.14159, 3.14159e10, 3.14159e-10);
+	print("3.14: %f %g %e\n", 3.14000, 3.14000, 3.14000);
+	print("%g %.18g\n", 2e25, 2e25);
+	print("%2.18g\n", 1.0);
+	print("%2.18f\n", 1.0);
+	print("%f\n", 3.1415927/4);
+	print("%d\n", 23);
+	print("%0.10d\n", 12345);
+
+	print("infinity %g\n", strtod(str,nil)); // infinity
+	print("NaN %g\n", 0./0.); // NaN
+	print("Eps %g\n", 2.2204460492503131e-16); // Eps
+	print("pi %g\n", 3.14159265358979323846); // pi
+	exits(nil);
+}
--- /dev/null
+++ b/tests/list.b
@@ -1,0 +1,21 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a : list of string;
+	b := list of {"yes", "no"};
+
+	a = "soy" :: a;
+	a = "test" :: a;
+	sys->print("should print yes result %s\n", hd b);
+	c := tl a;
+	sys->print("should print 2 no result %d\n", len a);
+}
--- /dev/null
+++ b/tests/mkfile
@@ -1,0 +1,19 @@
+<../mkconfig
+
+TARG=fmttest gfmttest strtodtest fmttest3 sizes # testintptr 
+
+# limbo test programs
+DISTARG=1 2 3 4 5 adt array array1 array2 array3 arraybig arraysimple arraysimpleint byte case case1 casec excpt if list parent print print1 printsimple printvarargs real return retval sample string tuple unquote  drawexample drawexample1 # alt alt1 drawcontext exceptions
+
+
+LIBS=	bio\
+	math\
+	sec\
+	mp\
+	9\
+	interp\
+
+
+BIN=$ROOT/$OBJDIR/bin
+
+<$ROOT/mkfiles/mkmany-$SHELLTYPE
--- /dev/null
+++ b/tests/print.b
@@ -1,0 +1,65 @@
+implement Sample;
+
+include "sys.m";
+	sys: Sys;
+
+Person : adt
+{
+	age : int;
+	next : cyclic ref Person;
+	age1 : int;
+	age2 : int;
+};
+
+Sample: module
+{
+	init: fn();
+	fn1: fn();
+	fn2: fn();
+	fn3: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a := 1;
+	b := 3;
+	c : int;
+	d : Person;
+
+	d.age = 10;
+	d.next = nil;
+	d.age1 = 20;
+	d.age2 = 30;
+	c = a*b + b*b*b*b + a;
+	fn3();
+	#fn1();
+	fn2();
+}
+
+fn1()
+{
+	d: Person;
+
+	d.age=40;
+	# d.next = nil;
+	d.age1 = 50;
+	d.age2 = 60;
+}
+
+fn2()
+{
+	s: string;
+
+	s = "testing the string";
+	sys->print("%s\n", s);
+}
+
+fn3()
+{
+	s: string;
+	s1: string;
+
+	s = "testing the string";
+	s1 = "testing again";
+}
--- /dev/null
+++ b/tests/print1.b
@@ -1,0 +1,15 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	sys->print("init %g %f\n", 3.14, 1.48);
+	sys->print("init %d\n", -1);
+}
--- /dev/null
+++ b/tests/printsimple.b
@@ -1,0 +1,14 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	sys->print("init 1\n");
+}
--- /dev/null
+++ b/tests/printvarargs.b
@@ -1,0 +1,14 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	sys->print("init 1 %s\n", "string");
+}
--- /dev/null
+++ b/tests/real.b
@@ -1,0 +1,18 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	r : real;
+
+	r = 3.14;
+	sys->print("should print 3.14 result %g\n", r);
+	sys->print("should print 3.14 result %f\n", r);
+}
--- /dev/null
+++ b/tests/return.b
@@ -1,0 +1,25 @@
+implement Emuinit;
+include "sys.m";
+	sys: Sys;
+
+Emuinit: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a : int;
+
+	a = calc(100);
+	sys->print("returned %d\n", a);
+}
+
+calc(n: int): int
+{
+	a : int;
+
+	a = n * n + 100;
+	return a;
+}
--- /dev/null
+++ b/tests/retval.b
@@ -1,0 +1,20 @@
+implement Sample;
+
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	a: int;
+
+	a = sys->print("testinng the return value\n");
+	sys->print("print returned %d\n", a);
+	a = sys->print("\n");
+	sys->print("print returned %d, should have been 1\n", a);
+}
--- /dev/null
+++ b/tests/sample.b
@@ -1,0 +1,30 @@
+implement Sample;
+include "sys.m";
+	sys: Sys;
+
+Sample: module
+{
+	init: fn();
+};
+
+init()
+{
+	sys = load Sys Sys->PATH;
+	sys->print("init 1\n");
+#	sys->bind("#e", "/env", sys->MREPL|sys->MCREATE);	# if #e not configured, that's fine
+#	fd := sys->open("#e/", Sys->OREAD);
+#	if(fd != nil)
+#		sys->print("init 2 %q\n", sys->fd2path(fd));
+	i : int = 4;
+	i = i+100;
+	i = i-101;
+	case i {
+	0 => sys->print("begins with a vowel\n");
+	1 => sys->print("begins with a consonant\n");
+	2 => sys->print("begins with a consonant\n");
+	3 => sys->print("begins with a consonant\n");
+	4 => sys->print("begins with a consonant\n");
+	* => sys->print("sorry don't understand\n");
+	}
+	sys->print("ending the program\n");
+}
--- /dev/null
+++ b/tests/sh.1.debug
@@ -1,0 +1,59067 @@
+declare module Sys
+declare module Draw
+declare module Bufio
+declare module BufioFill
+declare module ChanFill
+declare module String
+declare module Filepat
+declare module Env
+declare module Command
+declare module Sh
+declare module Shellbuiltin
+declare module YYSys
+variable 'SELF' val '"$self"'
+variable 'Sys->PATH' val '"$Sys"'
+variable 'Sys->Maxint' val '2147483647'
+variable 'Sys->QTDIR' val '128'
+variable 'Sys->QTAPPEND' val '64'
+variable 'Sys->QTEXCL' val '32'
+variable 'Sys->QTAUTH' val '8'
+variable 'Sys->QTTMP' val '4'
+variable 'Sys->QTFILE' val '0'
+variable 'Sys->nulldir' val 'Dir(nil, nil, nil, nil, (-1, -1, -1), -1, -1, -1, -1, -1, -1)'
+variable 'Sys->zerodir' val 'Dir(nil, nil, nil, nil, (0, 0, 0), 0, 0, 0, 0, 0, 0)'
+variable 'Sys->ATOMICIO' val '8192'
+variable 'Sys->SEEKSTART' val '0'
+variable 'Sys->SEEKRELA' val '1'
+variable 'Sys->SEEKEND' val '2'
+variable 'Sys->NAMEMAX' val '256'
+variable 'Sys->ERRMAX' val '128'
+variable 'Sys->WAITLEN' val '192'
+variable 'Sys->OREAD' val '0'
+variable 'Sys->OWRITE' val '1'
+variable 'Sys->ORDWR' val '2'
+variable 'Sys->OTRUNC' val '16'
+variable 'Sys->ORCLOSE' val '64'
+variable 'Sys->OEXCL' val '4096'
+variable 'Sys->DMDIR' val '-2147483648'
+variable 'Sys->DMAPPEND' val '1073741824'
+variable 'Sys->DMEXCL' val '536870912'
+variable 'Sys->DMAUTH' val '134217728'
+variable 'Sys->DMTMP' val '67108864'
+variable 'Sys->MREPL' val '0'
+variable 'Sys->MBEFORE' val '1'
+variable 'Sys->MAFTER' val '2'
+variable 'Sys->MCREATE' val '4'
+variable 'Sys->MCACHE' val '16'
+variable 'Sys->NEWFD' val '(1)'
+variable 'Sys->FORKFD' val '(2)'
+variable 'Sys->NEWNS' val '(4)'
+variable 'Sys->FORKNS' val '(8)'
+variable 'Sys->NEWPGRP' val '(16)'
+variable 'Sys->NODEVS' val '(32)'
+variable 'Sys->NEWENV' val '(64)'
+variable 'Sys->FORKENV' val '(128)'
+variable 'Sys->EXPWAIT' val '0'
+variable 'Sys->EXPASYNC' val '1'
+variable 'Sys->UTFmax' val '4'
+variable 'Sys->UTFerror' val '65533'
+variable 'Sys->Runemax' val '1114111'
+variable 'Sys->Runemask' val '2097151'
+variable 'Draw->PATH' val '"$Draw"'
+variable 'Draw->Opaque' val '-1'
+variable 'Draw->Transparent' val '0'
+variable 'Draw->Black' val '255'
+variable 'Draw->White' val '-1'
+variable 'Draw->Red' val '-16776961'
+variable 'Draw->Green' val '16711935'
+variable 'Draw->Blue' val '65535'
+variable 'Draw->Cyan' val '16777215'
+variable 'Draw->Magenta' val '-16711681'
+variable 'Draw->Yellow' val '-65281'
+variable 'Draw->Grey' val '-286331137'
+variable 'Draw->Paleyellow' val '-21761'
+variable 'Draw->Darkyellow' val '-286351617'
+variable 'Draw->Darkgreen' val '1149781247'
+variable 'Draw->Palegreen' val '-1426085121'
+variable 'Draw->Medgreen' val '-1999861505'
+variable 'Draw->Darkblue' val '22015'
+variable 'Draw->Palebluegreen' val '-1426063361'
+variable 'Draw->Paleblue' val '48127'
+variable 'Draw->Bluegreen' val '8947967'
+variable 'Draw->Greygreen' val '1437248255'
+variable 'Draw->Palegreygreen' val '-1628508417'
+variable 'Draw->Yellowgreen' val '-1718006529'
+variable 'Draw->Medblue' val '39423'
+variable 'Draw->Greyblue' val '6142975'
+variable 'Draw->Palegreyblue' val '1234427391'
+variable 'Draw->Purpleblue' val '-2004300545'
+variable 'Draw->Notacolor' val '-256'
+variable 'Draw->Nofill' val 'Notacolor'
+variable 'Draw->Endsquare' val '0'
+variable 'Draw->Enddisc' val '1'
+variable 'Draw->Endarrow' val '2'
+variable 'Draw->Flushoff' val '0'
+variable 'Draw->Flushon' val '1'
+variable 'Draw->Flushnow' val '2'
+variable 'Draw->Refbackup' val '0'
+variable 'Draw->Refnone' val '1'
+variable 'Draw->SinD' val '8'
+variable 'Draw->DinS' val '4'
+variable 'Draw->SoutD' val '2'
+variable 'Draw->DoutS' val '1'
+variable 'Draw->S' val '10'
+variable 'Draw->SoverD' val '11'
+variable 'Draw->SatopD' val '9'
+variable 'Draw->SxorD' val '3'
+variable 'Draw->D' val '5'
+variable 'Draw->DoverS' val '7'
+variable 'Draw->DatopS' val '6'
+variable 'Draw->DxorS' val '3'
+variable 'Draw->Clear' val '0'
+variable 'Draw->CRed' val 'iota'
+variable 'Draw->CGreen' val 'iota'
+variable 'Draw->CBlue' val 'iota'
+variable 'Draw->CGrey' val 'iota'
+variable 'Draw->CAlpha' val 'iota'
+variable 'Draw->CMap' val 'iota'
+variable 'Draw->CIgnore' val 'iota'
+variable 'Draw->GREY1' val 'Chans(49)'
+variable 'Draw->GREY2' val 'Chans(50)'
+variable 'Draw->GREY4' val 'Chans(52)'
+variable 'Draw->GREY8' val 'Chans(56)'
+variable 'Draw->CMAP8' val 'Chans(88)'
+variable 'Draw->RGB15' val 'Chans(1627723045)'
+variable 'Draw->RGB16' val 'Chans(333349)'
+variable 'Draw->RGB24' val 'Chans(530472)'
+variable 'Draw->RGBA32' val 'Chans(402663496)'
+variable 'Draw->ARGB32' val 'Chans(1208490024)'
+variable 'Draw->XRGB32' val 'Chans(1745360936)'
+variable 'Bufio->PATH' val '"/dis/lib/b..."'
+variable 'Bufio->SEEKSTART' val 'SEEKSTART'
+variable 'Bufio->SEEKRELA' val 'SEEKRELA'
+variable 'Bufio->SEEKEND' val 'SEEKEND'
+variable 'Bufio->OREAD' val 'OREAD'
+variable 'Bufio->OWRITE' val 'OWRITE'
+variable 'Bufio->ORDWR' val 'ORDWR'
+variable 'Bufio->EOF' val '-1'
+variable 'Bufio->ERROR' val '-2'
+variable 'ChanFill->PATH' val '"/dis/lib/c..."'
+variable 'String->PATH' val '"/dis/lib/s..."'
+variable 'Filepat->PATH' val '"/dis/lib/f..."'
+variable 'Env->PATH' val '"/dis/lib/e..."'
+variable 'Command->PATH' val '"/dis/sh.di..."'
+variable 'PATH' val '"/dis/sh.di..."'
+variable 'Context.INTERACTIVE' val '1'
+variable 'Context.VERBOSE' val '2'
+variable 'Context.EXECPRINT' val '4'
+variable 'Context.ERROREXIT' val '8'
+variable 'Var.CHANGED' val '(1)'
+variable 'Var.NOEXPORT' val '(2)'
+variable 'n_BLOCK' val 'iota'
+variable 'n_VAR' val 'iota'
+variable 'n_BQ' val 'iota'
+variable 'n_BQ2' val 'iota'
+variable 'n_REDIR' val 'iota'
+variable 'n_DUP' val 'iota'
+variable 'n_LIST' val 'iota'
+variable 'n_SEQ' val 'iota'
+variable 'n_CONCAT' val 'iota'
+variable 'n_PIPE' val 'iota'
+variable 'n_ADJ' val 'iota'
+variable 'n_WORD' val 'iota'
+variable 'n_NOWAIT' val 'iota'
+variable 'n_SQUASH' val 'iota'
+variable 'n_COUNT' val 'iota'
+variable 'n_ASSIGN' val 'iota'
+variable 'n_LOCAL' val 'iota'
+variable 'GLOB' val '1'
+variable 'Shellbuiltin->BUILTIN' val 'iota'
+variable 'Shellbuiltin->SBUILTIN' val 'iota'
+variable 'Shellbuiltin->OTHER' val 'iota'
+variable 'YYLEX.EOF' val '-1'
+variable 'DUP' val '57346'
+variable 'REDIR' val '57347'
+variable 'WORD' val '57348'
+variable 'OP' val '57349'
+variable 'END' val '57350'
+variable 'ERROR' val '57351'
+variable 'ANDAND' val '57352'
+variable 'OROR' val '57353'
+variable 'YYEOFCODE' val '1'
+variable 'YYERRCODE' val '2'
+variable 'YYMAXDEPTH' val '200'
+variable 'EPERM' val '"permission..."'
+variable 'EPIPE' val '"write on c..."'
+variable 'LIBSHELLRC' val '"/lib/sh/pr..."'
+variable 'BUILTINPATH' val '"/dis/sh"'
+variable 'DEBUG' val '0'
+variable 'ENVSEP' val '0'
+variable 'ENVHASHSIZE' val '7'
+variable 'OAPPEND' val '524288'
+variable 'OMASK' val '7'
+variable 'NOTOKEN' val '-1'
+generate desc for int
+generate desc for int
+	desc	$-1,4,""
+variable 'YYNPROD' val '45'
+variable 'YYPRIVATE' val '57344'
+variable 'yydebug' val '0'
+variable 'YYLAST' val '93'
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+generate desc for int
+variable 'YYFLAG' val '-1000'
+typecheck tree: 
+fn(){} fn() 0 0
+  name usage fn() 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      -> nothing 0 0
+        name sys nothing 0 0
+        name fprint nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name stderr nothing 0 0
+        seq nothing 0 0
+          const usage: sh [-ilexn] [-c command] [file [arg...]]
+ string 0 0
+    seq nothing 0 0
+      raise nothing 0 0
+        const fail:usage string 0 0
+typecheck tree: 
+fn(){} fn(path: string) 0 0
+  name badmodule fn(path: string) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      -> nothing 0 0
+        name sys nothing 0 0
+        name fprint nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name fildes nothing 0 0
+          seq nothing 0 0
+            const (2) int 0 0
+        seq nothing 0 0
+          const sh: cannot load %s: %r
+ string 0 0
+          seq nothing 0 0
+            name path nothing 0 0
+    seq nothing 0 0
+      raise nothing 0 0
+        const fail:bad module string 0 0
+typecheck tree: 
+fn(){} fn() 0 0
+  name initialise fn() 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name sys nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name sys nothing 0 0
+              load Sys 0 0
+                -> nothing 0 0
+                  name Sys nothing 0 0
+                  name PATH nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name filepat nothing 0 0
+                load Filepat 0 0
+                  -> nothing 0 0
+                    name Filepat nothing 0 0
+                    name PATH nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    name filepat nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    call nothing 0 0
+                      name badmodule nothing 0 0
+                      seq nothing 0 0
+                        -> nothing 0 0
+                          name Filepat nothing 0 0
+                          name PATH nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name str nothing 0 0
+                    load String 0 0
+                      -> nothing 0 0
+                        name String nothing 0 0
+                        name PATH nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        name str nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          name badmodule nothing 0 0
+                          seq nothing 0 0
+                            -> nothing 0 0
+                              name String nothing 0 0
+                              name PATH nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name bufio nothing 0 0
+                        load Bufio 0 0
+                          -> nothing 0 0
+                            name Bufio nothing 0 0
+                            name PATH nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          == nothing 0 0
+                            name bufio nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              name badmodule nothing 0 0
+                              seq nothing 0 0
+                                -> nothing 0 0
+                                  name Bufio nothing 0 0
+                                  name PATH nothing 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            name myself nothing 0 0
+                            load Sh 0 0
+                              const $self string 0 0
+                          seq nothing 0 0
+                            if nothing 0 0
+                              == nothing 0 0
+                                name myself nothing 0 0
+                                name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                call nothing 0 0
+                                  name badmodule nothing 0 0
+                                  seq nothing 0 0
+                                    const $self(Sh) string 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name myselfbuiltin nothing 0 0
+                                load Shellbuiltin 0 0
+                                  const $self string 0 0
+                              seq nothing 0 0
+                                if nothing 0 0
+                                  == nothing 0 0
+                                    name myselfbuiltin nothing 0 0
+                             
+typecheck tree: 
+fn(){} fn(drawcontext: ref Draw->Context, argv: list of string) 0 0
+  name init fn(ctxt: ref Draw->Context, argv: list of string) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name initialise nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name opts nothing 0 0
+        name blankopts nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          != nothing 0 0
+            name argv nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    index nothing 0 0
+                      hd nothing 0 0
+                        name argv nothing 0 0
+                      const (0) int 0 0
+                    const (45) int 0 0
+                  seq nothing 0 0
+                    ++ nothing 0 0
+                      . nothing 0 0
+                        name opts nothing 0 0
+                        name lflag nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name argv nothing 0 0
+                    tl nothing 0 0
+                      name argv nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name interactive nothing 0 0
+            const (0) int 0 0
+          seq nothing 0 0
+            for nothing 0 0
+              && nothing 0 0
+                && nothing 0 0
+                  != nothing 0 0
+                    name argv nothing 0 0
+                    name nil polymorphic type 0 0
+                  != nothing 0 0
+                    hd nothing 0 0
+                      name argv nothing 0 0
+                    name nil polymorphic type 0 0
+                == nothing 0 0
+                  index nothing 0 0
+                    hd nothing 0 0
+                      name argv nothing 0 0
+                    const (0) int 0 0
+                  const (45) int 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name i nothing 0 0
+                      const (1) int 0 0
+                    seq nothing 0 0
+                      for nothing 0 0
+                        < nothing 0 0
+                          name i nothing 0 0
+                          len nothing 0 0
+                            hd nothing 0 0
+                              name argv nothing 0 0
+                        seq nothing 0 0
+                          scope nothing 0 0
+                            seq nothing 0 0
+                              := nothing 0 0
+                                name c nothing 0 0
+                                index nothing 0 0
+                                  hd nothing 0 0
+                                    name argv nothing 0 0
+                                  name i nothing 0 0
+                              seq nothing 0 0
+                                case nothing 0 0
+                                  name c nothing 0 0
+                                  seq nothing 0 0
+                                    label nothing 0 0
+                                      seq nothing 0 0
+                                        const (105) int 0 0
+                                      scope nothing 0 0
+                                        = nothing 0 0
+                                          name interactive nothing 0 0
+                                          . nothing 0 0
+                                            name Context nothing 0 0
+                                            name INTERACTIVE nothing 0 0
+                                    seq nothing 0 0
+                                      label nothing 0 0
+                                        seq nothing 0 0
+                                          const (108) int 0 0
+                                        scope nothing 0 0
+                                          ++ nothing 0 0
+                                            . nothing 0 0
+                                              name opts nothing 0 0
+      
+typecheck tree: 
+fn(){} fn(s: string): (ref Node, string) 0 0
+  name parse fn(s: string): (ref Node, string) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name initialise nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name lex nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name YYLEX nothing 0 0
+            name initstring nothing 0 0
+          seq nothing 0 0
+            name s nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          call nothing 0 0
+            name doparse nothing 0 0
+            seq nothing 0 0
+              name lex nothing 0 0
+              seq nothing 0 0
+                const  string 0 0
+                seq nothing 0 0
+                  const (0) int 0 0
+typecheck tree: 
+fn(){} fn(drawctxt: ref Draw->Context, cmd: string): string 0 0
+  name system fn(drawctxt: ref Draw->Context, cmd: string): string 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name initialise nothing 0 0
+    seq nothing 0 0
+      exstat nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              tuple nothing 0 0
+                seq nothing 0 0
+                  name n nothing 0 0
+                  seq nothing 0 0
+                    name err nothing 0 0
+              call nothing 0 0
+                name parse nothing 0 0
+                seq nothing 0 0
+                  name cmd nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  name err nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    name err nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    name n nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      name nil polymorphic type 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    call nothing 0 0
+                      . nothing 0 0
+                        call nothing 0 0
+                          . nothing 0 0
+                            name Context nothing 0 0
+                            name new nothing 0 0
+                          seq nothing 0 0
+                            name drawctxt nothing 0 0
+                        name run nothing 0 0
+                      seq nothing 0 0
+                        :: nothing 0 0
+                          ref nothing 0 0
+                            call nothing 0 0
+                              name Listnode nothing 0 0
+                              seq nothing 0 0
+                                name n nothing 0 0
+                                seq nothing 0 0
+                                  name nil polymorphic type 0 0
+                          name nil polymorphic type 0 0
+                        seq nothing 0 0
+                          const (0) int 0 0
+        except nothing 0 0
+          name e nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                const fail:* string 0 0
+              scope nothing 0 0
+                return nothing 0 0
+                  call nothing 0 0
+                    name failurestatus nothing 0 0
+                    seq nothing 0 0
+                      name e nothing 0 0
+typecheck tree: 
+fn(){} fn(drawctxt: ref Draw->Context, argv: list of string): string 0 0
+  name run fn(drawctxt: ref Draw->Context, argv: list of string): string 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name initialise nothing 0 0
+    seq nothing 0 0
+      exstat nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name Context nothing 0 0
+                      name new nothing 0 0
+                    seq nothing 0 0
+                      name drawctxt nothing 0 0
+                  name run nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name stringlist2list nothing 0 0
+                    seq nothing 0 0
+                      name argv nothing 0 0
+                  seq nothing 0 0
+                    const (0) int 0 0
+        except nothing 0 0
+          name e nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                const fail:* string 0 0
+              scope nothing 0 0
+                return nothing 0 0
+                  call nothing 0 0
+                    name failurestatus nothing 0 0
+                    seq nothing 0 0
+                      name e nothing 0 0
+typecheck tree: 
+fn(){} fn(fd: ref Sys->FD): int 0 0
+  name isconsole fn(fd: ref Sys->FD): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      tuple nothing 0 0
+        seq nothing 0 0
+          name ok1 nothing 0 0
+          seq nothing 0 0
+            name d1 nothing 0 0
+      call nothing 0 0
+        -> nothing 0 0
+          name sys nothing 0 0
+          name fstat nothing 0 0
+        seq nothing 0 0
+          name fd nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        tuple nothing 0 0
+          seq nothing 0 0
+            name ok2 nothing 0 0
+            seq nothing 0 0
+              name d2 nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name stat nothing 0 0
+          seq nothing 0 0
+            const /dev/cons string 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            < nothing 0 0
+              name ok1 nothing 0 0
+              const (0) int 0 0
+            < nothing 0 0
+              name ok2 nothing 0 0
+              const (0) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              const (0) int 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            && nothing 0 0
+              == nothing 0 0
+                . nothing 0 0
+                  name d1 nothing 0 0
+                  name dtype nothing 0 0
+                . nothing 0 0
+                  name d2 nothing 0 0
+                  name dtype nothing 0 0
+              == nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name d1 nothing 0 0
+                    name qid nothing 0 0
+                  name path nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name d2 nothing 0 0
+                    name qid nothing 0 0
+                  name path nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, path: string, args: list of ref Listnode, reporterr: int) 0 0
+  name runscript fn(ctxt: ref Context, path: string, args: list of ref Listnode, reporterr: int) 0 0
+  seq nothing 0 0
+    exstat nothing 0 0
+      scope nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name fd nothing 0 0
+            call nothing 0 0
+              -> nothing 0 0
+                name sys nothing 0 0
+                name open nothing 0 0
+              seq nothing 0 0
+                name path nothing 0 0
+                seq nothing 0 0
+                  -> nothing 0 0
+                    name Sys nothing 0 0
+                    name OREAD nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              != nothing 0 0
+                name fd nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name runfile nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      name fd nothing 0 0
+                      seq nothing 0 0
+                        name path nothing 0 0
+                        seq nothing 0 0
+                          name args nothing 0 0
+                if nothing 0 0
+                  name reporterr nothing 0 0
+                  seq nothing 0 0
+                    call nothing 0 0
+                      . nothing 0 0
+                        name ctxt nothing 0 0
+                        name fail nothing 0 0
+                      seq nothing 0 0
+                        const bad script path string 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            -> nothing 0 0
+                              name sys nothing 0 0
+                              name sprint nothing 0 0
+                            seq nothing 0 0
+                              const sh: cannot open %s: %r string 0 0
+                              seq nothing 0 0
+                                name path nothing 0 0
+      except nothing 0 0
+        seq nothing 0 0
+          label nothing 0 0
+            seq nothing 0 0
+              const fail:* string 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  ! nothing 0 0
+                    name reporterr nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                raise nothing 0 0
+                  nothing nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, fd: ref Sys->FD, path: string, args: list of ref Listnode) 0 0
+  name runfile fn(ctxt: ref Context, fd: ref Sys->FD, path: string, args: list of ref Listnode) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      . nothing 0 0
+        name ctxt nothing 0 0
+        name push nothing 0 0
+    seq nothing 0 0
+      exstat nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name setlocal nothing 0 0
+              seq nothing 0 0
+                const 0 string 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name stringlist2list nothing 0 0
+                    seq nothing 0 0
+                      :: nothing 0 0
+                        name path nothing 0 0
+                        name nil polymorphic type 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name setlocal nothing 0 0
+                seq nothing 0 0
+                  const * string 0 0
+                  seq nothing 0 0
+                    name args nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name lex nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name YYLEX nothing 0 0
+                      name initfile nothing 0 0
+                    seq nothing 0 0
+                      name fd nothing 0 0
+                      seq nothing 0 0
+                        name path nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    name DEBUG nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name debug nothing 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            name sprint nothing 0 0
+                            seq nothing 0 0
+                              const parse(interactive == %d) string 0 0
+                              seq nothing 0 0
+                                != nothing 0 0
+                                  & nothing 0 0
+                                    call nothing 0 0
+                                      . nothing 0 0
+                                        name ctxt nothing 0 0
+                                        name options nothing 0 0
+                                    . nothing 0 0
+                                      name ctxt nothing 0 0
+                                      name INTERACTIVE nothing 0 0
+                                  const (0) int 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name prompt nothing 0 0
+                      :: nothing 0 0
+                        const  string 0 0
+                        :: nothing 0 0
+                          const  string 0 0
+                          name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      vardecl string 0 0
+                        seq nothing 0 0
+                      seq nothing 0 0
+                        for nothing 0 0
+                          ! nothing 0 0
+                            . nothing 0 0
+                              name lex nothing 0 0
+                              name eof nothing 0 0
+                          seq nothing 0 0
+                            scope nothing 0 0
+                              seq nothing 0 0
+                                := nothing 0 0
+                                  name interactive nothing 0 0
+                                  & nothing 0 0
+                                    call nothing 0 0
+                                      . nothing 0 0
+                                        name ctxt nothing 0 0
+                                        name options nothing 0 0
+                                    . nothing 0 0
+                                      name ctxt nothing 0 0
+                    
+typecheck tree: 
+fn(){} fn(e: string): int 0 0
+  name nonexistent fn(e: string): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name errs nothing 0 0
+      array nothing 0 0
+        nothing nothing 0 0
+        seq nothing 0 0
+          elem nothing 0 0
+            const does not exist string 0 0
+          seq nothing 0 0
+            elem nothing 0 0
+              const directory entry not found string 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            len nothing 0 0
+              name errs nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name j nothing 0 0
+                  len nothing 0 0
+                    index nothing 0 0
+                      name errs nothing 0 0
+                      name i nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    && nothing 0 0
+                      <= nothing 0 0
+                        name j nothing 0 0
+                        len nothing 0 0
+                          name e nothing 0 0
+                      == nothing 0 0
+                        slice nothing 0 0
+                          name e nothing 0 0
+                          seq nothing 0 0
+                            - nothing 0 0
+                              len nothing 0 0
+                                name e nothing 0 0
+                              name j nothing 0 0
+                            nothing nothing 0 0
+                        index nothing 0 0
+                          name errs nothing 0 0
+                          name i nothing 0 0
+                    seq nothing 0 0
+                      return nothing 0 0
+                        const (1) int 0 0
+            ++ nothing 0 0
+              name i nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          const (0) int 0 0
+typecheck tree: 
+fn(){} fn(n: ref Node): ref Node 0 0
+  name pipe2cmd fn(n: ref Node): ref Node 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name n nothing 0 0
+          name nil polymorphic type 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name n nothing 0 0
+            name ntype nothing 0 0
+          name n_PIPE nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name n nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        call nothing 0 0
+          name mk nothing 0 0
+          seq nothing 0 0
+            name n_ADJ nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                name mk nothing 0 0
+                seq nothing 0 0
+                  name n_BLOCK nothing 0 0
+                  seq nothing 0 0
+                    name n nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name mk nothing 0 0
+                  seq nothing 0 0
+                    name n_VAR nothing 0 0
+                    seq nothing 0 0
+                      ref nothing 0 0
+                        call nothing 0 0
+                          name Node nothing 0 0
+                          seq nothing 0 0
+                            name n_WORD nothing 0 0
+                            seq nothing 0 0
+                              name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                name nil polymorphic type 0 0
+                                seq nothing 0 0
+                                  const * string 0 0
+                                  seq nothing 0 0
+                                    name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node, last: int): string 0 0
+  name walk fn(ctxt: ref Context, n: ref Node, last: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      name DEBUG nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name debug nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name sprint nothing 0 0
+              seq nothing 0 0
+                const walking: %s string 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name cmd2string nothing 0 0
+                    seq nothing 0 0
+                      name n nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        && nothing 0 0
+          != nothing 0 0
+            name n nothing 0 0
+            name nil polymorphic type 0 0
+          == nothing 0 0
+            . nothing 0 0
+              name n nothing 0 0
+              name ntype nothing 0 0
+            name n_SEQ nothing 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name status nothing 0 0
+                call nothing 0 0
+                  name walk nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        name n nothing 0 0
+                        name left nothing 0 0
+                      seq nothing 0 0
+                        const (0) int 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  && nothing 0 0
+                    & nothing 0 0
+                      call nothing 0 0
+                        . nothing 0 0
+                          name ctxt nothing 0 0
+                          name options nothing 0 0
+                      . nothing 0 0
+                        name ctxt nothing 0 0
+                        name ERROREXIT nothing 0 0
+                    != nothing 0 0
+                      name status nothing 0 0
+                      name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    raise nothing 0 0
+                      + nothing 0 0
+                        const fail: string 0 0
+                        name status nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name setstatus nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        name status nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name n nothing 0 0
+                      . nothing 0 0
+                        name n nothing 0 0
+                        name right nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name n nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name nil polymorphic type 0 0
+        seq nothing 0 0
+          case nothing 0 0
+            . nothing 0 0
+              name n nothing 0 0
+              name ntype nothing 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  name n_PIPE nothing 0 0
+                scope nothing 0 0
+                  return nothing 0 0
+                    call nothing 0 0
+                      name waitfor nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            name walkpipeline nothing 0 0
+                            seq nothing 0 0
+                              name ctxt nothing 0 0
+                              seq nothing 0 0
+                                name n nothing 0 0
+                                seq nothing 0 0
+                                  name nil polymorphic type 0 0
+                                  seq nothing 0 0
+                                    - nothing 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node): list of ref Listnode 0 0
+  name assign fn(ctxt: ref Context, n: ref Node): list of ref Listnode 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name redirs nothing 0 0
+      ref nothing 0 0
+        name Redirlist nothing 0 0
+    seq nothing 0 0
+      vardecl list of ref Listnode 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          && nothing 0 0
+            != nothing 0 0
+              . nothing 0 0
+                name n nothing 0 0
+                name right nothing 0 0
+              name nil polymorphic type 0 0
+            || nothing 0 0
+              == nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name n nothing 0 0
+                    name right nothing 0 0
+                  name ntype nothing 0 0
+                name n_ASSIGN nothing 0 0
+              == nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name n nothing 0 0
+                    name right nothing 0 0
+                  name ntype nothing 0 0
+                name n_LOCAL nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name val nothing 0 0
+              call nothing 0 0
+                name assign nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    . nothing 0 0
+                      name n nothing 0 0
+                      name right nothing 0 0
+            = nothing 0 0
+              name val nothing 0 0
+              call nothing 0 0
+                name glob nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name glom nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        . nothing 0 0
+                          name n nothing 0 0
+                          name right nothing 0 0
+                        seq nothing 0 0
+                          name redirs nothing 0 0
+                          seq nothing 0 0
+                            name nil polymorphic type 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name vars nothing 0 0
+            call nothing 0 0
+              name glom nothing 0 0
+              seq nothing 0 0
+                name ctxt nothing 0 0
+                seq nothing 0 0
+                  . nothing 0 0
+                    name n nothing 0 0
+                    name left nothing 0 0
+                  seq nothing 0 0
+                    name redirs nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              == nothing 0 0
+                name vars nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name fail nothing 0 0
+                  seq nothing 0 0
+                    const bad assign string 0 0
+                    seq nothing 0 0
+                      const sh: nil variable name string 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  . nothing 0 0
+                    name redirs nothing 0 0
+                    name r nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name fail nothing 0 0
+                    seq nothing 0 0
+                      const bad assign string 0 0
+                      seq nothing 0 0
+                        const sh: redirections not allowed in assignment string 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name tval nothing 0 0
+                  name val nothing 0 0
+                seq nothing 0 0
+                  for nothing
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 0 0
+  name walkpipeline fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name n nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name fds nothing 0 0
+        array array of ref Sys->FD 0 0
+          const (2) int 0 0
+      seq nothing 0 0
+        vardecl list of int 0 0
+          seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name rfdno nothing 0 0
+            - nothing 0 0
+              const (1) int 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              == nothing 0 0
+                . nothing 0 0
+                  name n nothing 0 0
+                  name ntype nothing 0 0
+                name n_PIPE nothing 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        call nothing 0 0
+                          -> nothing 0 0
+                            name sys nothing 0 0
+                            name pipe nothing 0 0
+                          seq nothing 0 0
+                            name fds nothing 0 0
+                        - nothing 0 0
+                          const (1) int 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          . nothing 0 0
+                            name ctxt nothing 0 0
+                            name fail nothing 0 0
+                          seq nothing 0 0
+                            const no pipe string 0 0
+                            seq nothing 0 0
+                              call nothing 0 0
+                                -> nothing 0 0
+                                  name sys nothing 0 0
+                                  name sprint nothing 0 0
+                                seq nothing 0 0
+                                  const sh: cannot make pipe: %r string 0 0
+                    seq nothing 0 0
+                      := nothing 0 0
+                        name nwfdno nothing 0 0
+                        - nothing 0 0
+                          const (1) int 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            . nothing 0 0
+                              name n nothing 0 0
+                              name redir nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            scope nothing 0 0
+                              seq nothing 0 0
+                                := nothing 0 0
+                                  tuple nothing 0 0
+                                    seq nothing 0 0
+                                      name fd1 nothing 0 0
+                                      seq nothing 0 0
+                                        name fd2 nothing 0 0
+                                  tuple nothing 0 0
+                                    seq nothing 0 0
+                                      . nothing 0 0
+                                        . nothing 0 0
+                                          name n nothing 0 0
+                                          name redir nothing 0 0
+                                        name fd2 nothing 0 0
+                                      seq nothing 0 0
+                                        . nothing 0 0
+                                          . nothing 0 0
+                                            name n nothing 0 0
+                                            name redir nothing 0 0
+                                          name fd1 nothing 0 0
+                                seq nothing 0 0
+                                  if nothing 0 0
+                                    == nothing 0 0
+typecheck tree: 
+fn(){} fn(f: string, mode: int, fd: int): Redirword 0 0
+  name makeredir fn(f: string, mode: int, fd: int): Redirword 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      call nothing 0 0
+        name Redirword nothing 0 0
+        seq nothing 0 0
+          name nil polymorphic type 0 0
+          seq nothing 0 0
+            name f nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                name Redir nothing 0 0
+                seq nothing 0 0
+                  name mode nothing 0 0
+                  seq nothing 0 0
+                    name fd nothing 0 0
+                    seq nothing 0 0
+                      - nothing 0 0
+                        const (1) int 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 0 0
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name n nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name n nothing 0 0
+            name ntype nothing 0 0
+          name n_ADJ nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            call nothing 0 0
+              name listjoin nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name glomoperation nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      name n nothing 0 0
+                      seq nothing 0 0
+                        name redirs nothing 0 0
+                seq nothing 0 0
+                  name onto nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name nlist nothing 0 0
+          call nothing 0 0
+            name glom nothing 0 0
+            seq nothing 0 0
+              name ctxt nothing 0 0
+              seq nothing 0 0
+                . nothing 0 0
+                  name n nothing 0 0
+                  name right nothing 0 0
+                seq nothing 0 0
+                  name redirs nothing 0 0
+                  seq nothing 0 0
+                    name onto nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            != nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  name n nothing 0 0
+                  name left nothing 0 0
+                name ntype nothing 0 0
+              name n_ADJ nothing 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name nlist nothing 0 0
+                    call nothing 0 0
+                      name listjoin nothing 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          name glomoperation nothing 0 0
+                          seq nothing 0 0
+                            name ctxt nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name n nothing 0 0
+                                name left nothing 0 0
+                              seq nothing 0 0
+                                name redirs nothing 0 0
+                        seq nothing 0 0
+                          name nlist nothing 0 0
+              = nothing 0 0
+                name nlist nothing 0 0
+                call nothing 0 0
+                  name glom nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        name n nothing 0 0
+                        name left nothing 0 0
+                      seq nothing 0 0
+                        name redirs nothing 0 0
+                        seq nothing 0 0
+                          name nlist nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name nlist nothing 0 0
+typecheck tree: 
+fn(){} fn(left: list of ref Listnode, right: list of ref Listnode): list of ref Listnode 0 0
+  name listjoin fn(left: list of ref Listnode, right: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    vardecl list of ref Listnode 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name left nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name l nothing 0 0
+            :: nothing 0 0
+              hd nothing 0 0
+                name left nothing 0 0
+              name l nothing 0 0
+          = nothing 0 0
+            name left nothing 0 0
+            tl nothing 0 0
+              name left nothing 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name l nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name right nothing 0 0
+              :: nothing 0 0
+                hd nothing 0 0
+                  name l nothing 0 0
+                name right nothing 0 0
+            = nothing 0 0
+              name l nothing 0 0
+              tl nothing 0 0
+                name l nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name right nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, cmd: list of ref Listnode, redir: ref Redir): ref Sys->FD 0 0
+  name pipecmd fn(ctxt: ref Context, cmd: list of ref Listnode, redir: ref Redir): ref Sys->FD 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name redir nothing 0 0
+            name fd2 nothing 0 0
+          - nothing 0 0
+            const (1) int 0 0
+        & nothing 0 0
+          . nothing 0 0
+            name redir nothing 0 0
+            name rtype nothing 0 0
+          name OAPPEND nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name fail nothing 0 0
+          seq nothing 0 0
+            const bad redir string 0 0
+            seq nothing 0 0
+              const sh: bad redirection string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name r nothing 0 0
+        * nothing 0 0
+          name redir nothing 0 0
+      seq nothing 0 0
+        case nothing 0 0
+          . nothing 0 0
+            name redir nothing 0 0
+            name rtype nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                -> nothing 0 0
+                  name Sys nothing 0 0
+                  name OREAD nothing 0 0
+              scope nothing 0 0
+                = nothing 0 0
+                  . nothing 0 0
+                    name r nothing 0 0
+                    name rtype nothing 0 0
+                  -> nothing 0 0
+                    name Sys nothing 0 0
+                    name OWRITE nothing 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  -> nothing 0 0
+                    name Sys nothing 0 0
+                    name OWRITE nothing 0 0
+                scope nothing 0 0
+                  = nothing 0 0
+                    . nothing 0 0
+                      name r nothing 0 0
+                      name rtype nothing 0 0
+                    -> nothing 0 0
+                      name Sys nothing 0 0
+                      name OREAD nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name p nothing 0 0
+            array array of ref Sys->FD 0 0
+              const (2) int 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              == nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name sys nothing 0 0
+                    name pipe nothing 0 0
+                  seq nothing 0 0
+                    name p nothing 0 0
+                - nothing 0 0
+                  const (1) int 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name fail nothing 0 0
+                  seq nothing 0 0
+                    const no pipe string 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          name sys nothing 0 0
+                          name sprint nothing 0 0
+                        seq nothing 0 0
+                          const sh: cannot make pipe: %r string 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name startchan nothing 0 0
+                chan chan of (int, ref Expropagate) 0 0
+              seq nothing 0 0
+                spawn nothing 0 0
+                  call nothing 0 0
+                    name runasync nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        const (1) int 0 0
+                        seq nothing 0 0
+                          name cmd nothing 0 0
+                          seq nothing 0 0
+                            ref nothing 0 0
+                              call nothing 0 0
+                                name Redirlist nothing 0 0
+                                seq nothing 0 0
+                                  :: nothing 0 0
+                              
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 0 0
+  name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name n nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      vardecl list of ref Listnode 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        case nothing 0 0
+          . nothing 0 0
+            name n nothing 0 0
+            name ntype nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                name n_WORD nothing 0 0
+              scope nothing 0 0
+                = nothing 0 0
+                  name nlist nothing 0 0
+                  :: nothing 0 0
+                    ref nothing 0 0
+                      call nothing 0 0
+                        name Listnode nothing 0 0
+                        seq nothing 0 0
+                          name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              name n nothing 0 0
+                              name word nothing 0 0
+                    name nil polymorphic type 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  name n_REDIR nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    seq nothing 0 0
+                      := nothing 0 0
+                        name wlist nothing 0 0
+                        call nothing 0 0
+                          name glob nothing 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              name glom nothing 0 0
+                              seq nothing 0 0
+                                name ctxt nothing 0 0
+                                seq nothing 0 0
+                                  . nothing 0 0
+                                    name n nothing 0 0
+                                    name left nothing 0 0
+                                  seq nothing 0 0
+                                    ref nothing 0 0
+                                      call nothing 0 0
+                                        name Redirlist nothing 0 0
+                                        seq nothing 0 0
+                                          name nil polymorphic type 0 0
+                                    seq nothing 0 0
+                                      name nil polymorphic type 0 0
+                      if nothing 0 0
+                        != nothing 0 0
+                          len nothing 0 0
+                            name wlist nothing 0 0
+                          const (1) int 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            . nothing 0 0
+                              name ctxt nothing 0 0
+                              name fail nothing 0 0
+                            seq nothing 0 0
+                              const bad redir string 0 0
+                              seq nothing 0 0
+                                const sh: single redirection operand required string 0 0
+                    if nothing 0 0
+                      != nothing 0 0
+                        . nothing 0 0
+                          hd nothing 0 0
+                            name wlist nothing 0 0
+                          name cmd nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            := nothing 0 0
+                              name fd nothing 0 0
+                              call nothing 0 0
+                                name pipecmd nothing 0 0
+                                seq nothing 0 0
+                                  name ctxt nothing 0 0
+            
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, n: ref Node): list of ref Listnode 0 0
+  name subsbuiltin fn(ctxt: ref Context, n: ref Node): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        || nothing 0 0
+          || nothing 0 0
+            == nothing 0 0
+              name n nothing 0 0
+              name nil polymorphic type 0 0
+            == nothing 0 0
+              . nothing 0 0
+                name n nothing 0 0
+                name ntype nothing 0 0
+              name n_SEQ nothing 0 0
+          == nothing 0 0
+            . nothing 0 0
+              name n nothing 0 0
+              name ntype nothing 0 0
+            name n_PIPE nothing 0 0
+        == nothing 0 0
+          . nothing 0 0
+            name n nothing 0 0
+            name ntype nothing 0 0
+          name n_NOWAIT nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name fail nothing 0 0
+          seq nothing 0 0
+            const bad $ arg string 0 0
+            seq nothing 0 0
+              const sh: invalid argument to ${} operator string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name r nothing 0 0
+        ref nothing 0 0
+          name Redirlist nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name cmd nothing 0 0
+          call nothing 0 0
+            name glob nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                name glom nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    name n nothing 0 0
+                    seq nothing 0 0
+                      name r nothing 0 0
+                      seq nothing 0 0
+                        name nil polymorphic type 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            != nothing 0 0
+              . nothing 0 0
+                name r nothing 0 0
+                name r nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name fail nothing 0 0
+                seq nothing 0 0
+                  const bad $ arg string 0 0
+                  seq nothing 0 0
+                    const sh: redirection not allowed in substitution string 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name r nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                || nothing 0 0
+                  || nothing 0 0
+                    == nothing 0 0
+                      name cmd nothing 0 0
+                      name nil polymorphic type 0 0
+                    == nothing 0 0
+                      . nothing 0 0
+                        hd nothing 0 0
+                          name cmd nothing 0 0
+                        name word nothing 0 0
+                      name nil polymorphic type 0 0
+                  != nothing 0 0
+                    . nothing 0 0
+                      hd nothing 0 0
+                        name cmd nothing 0 0
+                      name cmd nothing 0 0
+                    name nil polymorphic type 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name fail nothing 0 0
+                    seq nothing 0 0
+                      const bad $ arg string 0 0
+                      seq nothing 0 0
+                        const sh: bad builtin name string 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        name bmods nothing 0 0
+                  call nothing 0 0
+                    name findbuiltin nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        . nothi
+typecheck tree: 
+fn(){} fn(nil: ref Context, fd: ref Sys->FD, seps: string): list of ref Listnode 0 0
+  name getbq fn(nil: ref Context, fd: ref Sys->FD, seps: string): list of ref Listnode 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name buf nothing 0 0
+      array array of byte 0 0
+        -> nothing 0 0
+          name Sys nothing 0 0
+          name ATOMICIO nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name buflen nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          > nothing 0 0
+            := nothing 0 0
+              name n nothing 0 0
+              call nothing 0 0
+                -> nothing 0 0
+                  name sys nothing 0 0
+                  name read nothing 0 0
+                seq nothing 0 0
+                  name fd nothing 0 0
+                  seq nothing 0 0
+                    slice nothing 0 0
+                      name buf nothing 0 0
+                      seq nothing 0 0
+                        name buflen nothing 0 0
+                        nothing nothing 0 0
+                    seq nothing 0 0
+                      - nothing 0 0
+                        len nothing 0 0
+                          name buf nothing 0 0
+                        name buflen nothing 0 0
+            const (0) int 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                += nothing 0 0
+                  name buflen nothing 0 0
+                  name n nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    == nothing 0 0
+                      name buflen nothing 0 0
+                      len nothing 0 0
+                        name buf nothing 0 0
+                    seq nothing 0 0
+                      scope nothing 0 0
+                        seq nothing 0 0
+                          := nothing 0 0
+                            name nbuf nothing 0 0
+                            array array of byte 0 0
+                              * nothing 0 0
+                                name buflen nothing 0 0
+                                const (2) int 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              slice nothing 0 0
+                                name nbuf nothing 0 0
+                                seq nothing 0 0
+                                  const (0) int 0 0
+                                  nothing nothing 0 0
+                              slice nothing 0 0
+                                name buf nothing 0 0
+                                seq nothing 0 0
+                                  const (0) int 0 0
+                                  nothing nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name buf nothing 0 0
+                                name nbuf nothing 0 0
+        seq nothing 0 0
+          vardecl list of string 0 0
+            seq nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              != nothing 0 0
+                name seps nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        name l nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name tokenize nothing 0 0
+                    seq nothing 0 0
+                      cast string 0 0
+                        slice nothing 0 0
+                          name buf nothing 0 0
+                          seq nothing 0 0
+                            const (0) int 0 0
+                            name buflen nothing 0 0
+                      seq nothing 0 0
+                        name seps nothing 0 0
+                = nothing 0 0
+                  name l nothing 0 0
+                  :: nothing 0 0
+                    
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, cmd: list of ref Listnode, seps: string): (list of ref Listnode, string) 0 0
+  name bq fn(ctxt: ref Context, cmd: list of ref Listnode, seps: string): (list of ref Listnode, string) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name fds nothing 0 0
+      array array of ref Sys->FD 0 0
+        const (2) int 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        == nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name sys nothing 0 0
+              name pipe nothing 0 0
+            seq nothing 0 0
+              name fds nothing 0 0
+          - nothing 0 0
+            const (1) int 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name fail nothing 0 0
+            seq nothing 0 0
+              const no pipe string 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name sys nothing 0 0
+                    name sprint nothing 0 0
+                  seq nothing 0 0
+                    const sh: cannot make pipe: %r string 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name r nothing 0 0
+          call nothing 0 0
+            name rdir nothing 0 0
+            seq nothing 0 0
+              index nothing 0 0
+                name fds nothing 0 0
+                const (1) int 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            index nothing 0 0
+              name fds nothing 0 0
+              const (1) int 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name startchan nothing 0 0
+              chan chan of (int, ref Expropagate) 0 0
+            seq nothing 0 0
+              spawn nothing 0 0
+                call nothing 0 0
+                  name runasync nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      const (0) int 0 0
+                      seq nothing 0 0
+                        name cmd nothing 0 0
+                        seq nothing 0 0
+                          name r nothing 0 0
+                          seq nothing 0 0
+                            name startchan nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name exepid nothing 0 0
+                      seq nothing 0 0
+                        name exprop nothing 0 0
+                  <- nothing 0 0
+                    name startchan nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name r nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name bqlist nothing 0 0
+                      call nothing 0 0
+                        name getbq nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            index nothing 0 0
+                              name fds nothing 0 0
+                              const (0) int 0 0
+                            seq nothing 0 0
+                              name seps nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name waitfor nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            :: nothing 0 0
+                              name exepid nothing 0 0
+                              name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            . nothing 0 0
+                              name exprop nothing 0 0
+                              name name nothing 0 0
+                            name nil polymorphic ty
+typecheck tree: 
+fn(){} fn(fd: ref Sys->FD): ref Redirlist 0 0
+  name rdir fn(fd: ref Sys->FD): ref Redirlist 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      ref nothing 0 0
+        call nothing 0 0
+          name Redirlist nothing 0 0
+          seq nothing 0 0
+            :: nothing 0 0
+              call nothing 0 0
+                name Redirword nothing 0 0
+                seq nothing 0 0
+                  name fd nothing 0 0
+                  seq nothing 0 0
+                    name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name Redir nothing 0 0
+                        seq nothing 0 0
+                          -> nothing 0 0
+                            name Sys nothing 0 0
+                            name OWRITE nothing 0 0
+                          seq nothing 0 0
+                            const (1) int 0 0
+                            seq nothing 0 0
+                              - nothing 0 0
+                                const (1) int 0 0
+              name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(p1: ref Listnode, p2: ref Listnode): ref Listnode 0 0
+  name concatwords fn(p1: ref Listnode, p2: ref Listnode): ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      && nothing 0 0
+        == nothing 0 0
+          . nothing 0 0
+            name p1 nothing 0 0
+            name word nothing 0 0
+          name nil polymorphic type 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name p1 nothing 0 0
+            name cmd nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          . nothing 0 0
+            name p1 nothing 0 0
+            name word nothing 0 0
+          call nothing 0 0
+            name cmd2string nothing 0 0
+            seq nothing 0 0
+              . nothing 0 0
+                name p1 nothing 0 0
+                name cmd nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        && nothing 0 0
+          == nothing 0 0
+            . nothing 0 0
+              name p2 nothing 0 0
+              name word nothing 0 0
+            name nil polymorphic type 0 0
+          != nothing 0 0
+            . nothing 0 0
+              name p2 nothing 0 0
+              name cmd nothing 0 0
+            name nil polymorphic type 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            . nothing 0 0
+              name p2 nothing 0 0
+              name word nothing 0 0
+            call nothing 0 0
+              name cmd2string nothing 0 0
+              seq nothing 0 0
+                . nothing 0 0
+                  name p2 nothing 0 0
+                  name cmd nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          ref nothing 0 0
+            call nothing 0 0
+              name Listnode nothing 0 0
+              seq nothing 0 0
+                name nil polymorphic type 0 0
+                seq nothing 0 0
+                  + nothing 0 0
+                    . nothing 0 0
+                      name p1 nothing 0 0
+                      name word nothing 0 0
+                    . nothing 0 0
+                      name p2 nothing 0 0
+                      name word nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, nl1: list of ref Listnode, nl2: list of ref Listnode): list of ref Listnode 0 0
+  name concat fn(ctxt: ref Context, nl1: list of ref Listnode, nl2: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name nl1 nothing 0 0
+          name nil polymorphic type 0 0
+        == nothing 0 0
+          name nl2 nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              && nothing 0 0
+                == nothing 0 0
+                  name nl1 nothing 0 0
+                  name nil polymorphic type 0 0
+                == nothing 0 0
+                  name nl2 nothing 0 0
+                  name nil polymorphic type 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name nil polymorphic type 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name fail nothing 0 0
+                seq nothing 0 0
+                  const bad concatenation string 0 0
+                  seq nothing 0 0
+                    const sh: null list in concatenation string 0 0
+    seq nothing 0 0
+      vardecl list of ref Listnode 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            == nothing 0 0
+              tl nothing 0 0
+                name nl1 nothing 0 0
+              name nil polymorphic type 0 0
+            == nothing 0 0
+              tl nothing 0 0
+                name nl2 nothing 0 0
+              name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name p1 nothing 0 0
+                  name nl1 nothing 0 0
+                seq nothing 0 0
+                  for nothing 0 0
+                    != nothing 0 0
+                      name p1 nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          name p2 nothing 0 0
+                          name nl2 nothing 0 0
+                        for nothing 0 0
+                          != nothing 0 0
+                            name p2 nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name ret nothing 0 0
+                              :: nothing 0 0
+                                call nothing 0 0
+                                  name concatwords nothing 0 0
+                                  seq nothing 0 0
+                                    hd nothing 0 0
+                                      name p1 nothing 0 0
+                                    seq nothing 0 0
+                                      hd nothing 0 0
+                                        name p2 nothing 0 0
+                                name ret nothing 0 0
+                            = nothing 0 0
+                              name p2 nothing 0 0
+                              tl nothing 0 0
+                                name p2 nothing 0 0
+                      = nothing 0 0
+                        name p1 nothing 0 0
+                        tl nothing 0 0
+                          name p1 nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  != nothing 0 0
+                    len nothing 0 0
+                      name nl1 nothing 0 0
+                    len nothing 0 0
+                      name nl2 nothing 0 0
+                  seq nothing 0 0
+                    call nothing 0 0
+                      . nothing 0 0
+                        name ctxt nothing 0 0
+                        name fail nothing 0 0
+                      seq nothing 0 0
+                        const bad con
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, copyenv: int, argv: list of ref Listnode, redirs: ref Redirlist, startchan: chan of (int, ref Expropagate)) 0 0
+  name runasync fn(ctxt: ref Context, copyenv: int, argv: list of ref Listnode, redirs: ref Redirlist, startchan: chan of (int, ref Expropagate)) 0 0
+  seq nothing 0 0
+    vardecl string 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name pid nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name pctl nothing 0 0
+          seq nothing 0 0
+            -> nothing 0 0
+              name sys nothing 0 0
+              name FORKFD nothing 0 0
+            seq nothing 0 0
+              name nil polymorphic type 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          name DEBUG nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name debug nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name sprint nothing 0 0
+                  seq nothing 0 0
+                    const in async (len redirs: %d) string 0 0
+                    seq nothing 0 0
+                      len nothing 0 0
+                        . nothing 0 0
+                          name redirs nothing 0 0
+                          name r nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name ctxt nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name copy nothing 0 0
+              seq nothing 0 0
+                name copyenv nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name exprop nothing 0 0
+              ref nothing 0 0
+                name Expropagate nothing 0 0
+            seq nothing 0 0
+              exstat nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name newfdl nothing 0 0
+                      call nothing 0 0
+                        name doredirs nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            name redirs nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name redirs nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            name newfdl nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              -> nothing 0 0
+                                name sys nothing 0 0
+                                name pctl nothing 0 0
+                              seq nothing 0 0
+                                -> nothing 0 0
+                                  name Sys nothing 0 0
+                                  name NEWFD nothing 0 0
+                                seq nothing 0 0
+                                  name newfdl nothing 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            . nothing 0 0
+                              name ctxt nothing 0 0
+                              name waitfd nothing 0 0
+                            call nothing 0 0
+                              name waitfd nothing 0 0
+                          seq nothing 0 0
+                            <-= nothing 0 0
+                              name startchan nothing 0 0
+                              tuple nothing 0 0
+                                seq nothing 0 0
+                                  name pid nothing 0 0
+                                  seq nothing 0 0
+                                    name exprop nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name startchan nothing 0 0
+             
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, argv: list of ref Listnode, redirs: ref Redirlist, last: int): string 0 0
+  name runsync fn(ctxt: ref Context, argv: list of ref Listnode, redirs: ref Redirlist, last: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      name DEBUG nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name debug nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              -> nothing 0 0
+                name sys nothing 0 0
+                name sprint nothing 0 0
+              seq nothing 0 0
+                const in sync (len redirs: %d; last: %d) string 0 0
+                seq nothing 0 0
+                  len nothing 0 0
+                    . nothing 0 0
+                      name redirs nothing 0 0
+                      name r nothing 0 0
+                  seq nothing 0 0
+                    name last nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        && nothing 0 0
+          != nothing 0 0
+            . nothing 0 0
+              name redirs nothing 0 0
+              name r nothing 0 0
+            name nil polymorphic type 0 0
+          ! nothing 0 0
+            name last nothing 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name startchan nothing 0 0
+                chan chan of (int, ref Expropagate) 0 0
+              seq nothing 0 0
+                spawn nothing 0 0
+                  call nothing 0 0
+                    name runasync nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        const (0) int 0 0
+                        seq nothing 0 0
+                          name argv nothing 0 0
+                          seq nothing 0 0
+                            name redirs nothing 0 0
+                            seq nothing 0 0
+                              name startchan nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name pid nothing 0 0
+                        seq nothing 0 0
+                          name exprop nothing 0 0
+                    <- nothing 0 0
+                      name startchan nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name redirs nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      := nothing 0 0
+                        name r nothing 0 0
+                        call nothing 0 0
+                          name waitfor nothing 0 0
+                          seq nothing 0 0
+                            name ctxt nothing 0 0
+                            seq nothing 0 0
+                              :: nothing 0 0
+                                name pid nothing 0 0
+                                name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            . nothing 0 0
+                              name exprop nothing 0 0
+                              name name nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            raise nothing 0 0
+                              . nothing 0 0
+                                name exprop nothing 0 0
+                                name name nothing 0 0
+                        seq nothing 0 0
+                          return nothing 0 0
+                            name r nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name newfdl nothing 0 0
+                call nothing 0 0
+                  name doredirs nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      name redirs nothing 0 0
+              seq nothing 0 0
+            
+typecheck tree: 
+fn(){} fn(p: string): int 0 0
+  name absolute fn(p: string): int 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      < nothing 0 0
+        len nothing 0 0
+          name p nothing 0 0
+        const (2) int 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          const (0) int 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        || nothing 0 0
+          == nothing 0 0
+            index nothing 0 0
+              name p nothing 0 0
+              const (0) int 0 0
+            const (47) int 0 0
+          == nothing 0 0
+            index nothing 0 0
+              name p nothing 0 0
+              const (0) int 0 0
+            const (35) int 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            const (1) int 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            < nothing 0 0
+              len nothing 0 0
+                name p nothing 0 0
+              const (3) int 0 0
+            != nothing 0 0
+              index nothing 0 0
+                name p nothing 0 0
+                const (0) int 0 0
+              const (46) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              const (0) int 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              index nothing 0 0
+                name p nothing 0 0
+                const (1) int 0 0
+              const (47) int 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                const (1) int 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              && nothing 0 0
+                == nothing 0 0
+                  index nothing 0 0
+                    name p nothing 0 0
+                    const (1) int 0 0
+                  const (46) int 0 0
+                == nothing 0 0
+                  index nothing 0 0
+                    name p nothing 0 0
+                    const (2) int 0 0
+                  const (47) int 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  const (1) int 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                const (0) int 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  name runexternal fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name progname nothing 0 0
+      . nothing 0 0
+        hd nothing 0 0
+          name args nothing 0 0
+        name word nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name disfile nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          && nothing 0 0
+            >= nothing 0 0
+              len nothing 0 0
+                name progname nothing 0 0
+              const (4) int 0 0
+            == nothing 0 0
+              slice nothing 0 0
+                name progname nothing 0 0
+                seq nothing 0 0
+                  - nothing 0 0
+                    len nothing 0 0
+                      name progname nothing 0 0
+                    const (4) int 0 0
+                  nothing nothing 0 0
+              const .dis string 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name disfile nothing 0 0
+              const (1) int 0 0
+        seq nothing 0 0
+          vardecl list of string 0 0
+            seq nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              call nothing 0 0
+                name absolute nothing 0 0
+                seq nothing 0 0
+                  name progname nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name pathlist nothing 0 0
+                  :: nothing 0 0
+                    const  string 0 0
+                    name nil polymorphic type 0 0
+                if nothing 0 0
+                  != nothing 0 0
+                    := nothing 0 0
+                      name pl nothing 0 0
+                      call nothing 0 0
+                        . nothing 0 0
+                          name ctxt nothing 0 0
+                          name get nothing 0 0
+                        seq nothing 0 0
+                          const path string 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name pathlist nothing 0 0
+                      call nothing 0 0
+                        name list2stringlist nothing 0 0
+                        seq nothing 0 0
+                          name pl nothing 0 0
+                    = nothing 0 0
+                      name pathlist nothing 0 0
+                      :: nothing 0 0
+                        const /dis string 0 0
+                        :: nothing 0 0
+                          const . string 0 0
+                          name nil polymorphic type 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name err nothing 0 0
+                const  string 0 0
+              seq nothing 0 0
+                do nothing 0 0
+                  && nothing 0 0
+                    != nothing 0 0
+                      name pathlist nothing 0 0
+                      name nil polymorphic type 0 0
+                    call nothing 0 0
+                      name nonexistent nothing 0 0
+                      seq nothing 0 0
+                        name err nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      vardecl string 0 0
+                        seq nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            hd nothing 0 0
+                              name pathlist nothing 0 0
+                            const  string 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name path nothing 0 0
+                              + nothing 0 0
+                                + nothing 0 0
+                                  hd nothing 0 0
+                                    name pathlist nothing 0 0
+                                  const / string 0 0
+                                name progname nothing 0 0
+ 
+typecheck tree: 
+fn(){} fn(e: string): string 0 0
+  name failurestatus fn(e: string): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name s nothing 0 0
+      slice nothing 0 0
+        name e nothing 0 0
+        seq nothing 0 0
+          const (5) int 0 0
+          nothing nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        && nothing 0 0
+          != nothing 0 0
+            name s nothing 0 0
+            name nil polymorphic type 0 0
+          || nothing 0 0
+            == nothing 0 0
+              index nothing 0 0
+                name s nothing 0 0
+                const (0) int 0 0
+              const (32) int 0 0
+            == nothing 0 0
+              index nothing 0 0
+                name s nothing 0 0
+                const (0) int 0 0
+              const (9) int 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name s nothing 0 0
+            slice nothing 0 0
+              name s nothing 0 0
+              seq nothing 0 0
+                const (1) int 0 0
+                nothing nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          != nothing 0 0
+            name s nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name s nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            const failed string 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, fd: ref Sys->FD, path: string, argv: list of ref Listnode, last: int): string 0 0
+  name runhashpling fn(ctxt: ref Context, fd: ref Sys->FD, path: string, argv: list of ref Listnode, last: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name header nothing 0 0
+      array array of byte 0 0
+        const (1024) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name n nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name read nothing 0 0
+          seq nothing 0 0
+            name fd nothing 0 0
+            seq nothing 0 0
+              name header nothing 0 0
+              seq nothing 0 0
+                len nothing 0 0
+                  name header nothing 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name i nothing 0 0
+            const (0) int 0 0
+          for nothing 0 0
+            < nothing 0 0
+              name i nothing 0 0
+              name n nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  index nothing 0 0
+                    name header nothing 0 0
+                    name i nothing 0 0
+                  cast byte 0 0
+                    const (10) int 0 0
+                seq nothing 0 0
+                  break nothing 0 0
+              ++ nothing 0 0
+                name i nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            || nothing 0 0
+              || nothing 0 0
+                || nothing 0 0
+                  == nothing 0 0
+                    name i nothing 0 0
+                    name n nothing 0 0
+                  < nothing 0 0
+                    name i nothing 0 0
+                    const (3) int 0 0
+                != nothing 0 0
+                  index nothing 0 0
+                    name header nothing 0 0
+                    const (0) int 0 0
+                  cast byte 0 0
+                    const (35) int 0 0
+              != nothing 0 0
+                index nothing 0 0
+                  name header nothing 0 0
+                  const (1) int 0 0
+                cast byte 0 0
+                  const (33) int 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name diagnostic nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        + nothing 0 0
+                          const bad script header on  string 0 0
+                          name path nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      const bad header string 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              tuple nothing 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    name args nothing 0 0
+              call nothing 0 0
+                -> nothing 0 0
+                  name sys nothing 0 0
+                  name tokenize nothing 0 0
+                seq nothing 0 0
+                  cast string 0 0
+                    slice nothing 0 0
+                      name header nothing 0 0
+                      seq nothing 0 0
+                        const (2) int 0 0
+                        name i nothing 0 0
+                  seq nothing 0 0
+                    const  	 string 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  name args nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name diagnostic nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            + nothing 0 0
+                              con
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  name runblock fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name cmd nothing 0 0
+      . nothing 0 0
+        hd nothing 0 0
+          name args nothing 0 0
+        name cmd nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        == nothing 0 0
+          name cmd nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name lex nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name YYLEX nothing 0 0
+                    name initstring nothing 0 0
+                  seq nothing 0 0
+                    . nothing 0 0
+                      hd nothing 0 0
+                        name args nothing 0 0
+                      name word nothing 0 0
+              seq nothing 0 0
+                vardecl string 0 0
+                  seq nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name cmd nothing 0 0
+                        seq nothing 0 0
+                          name err nothing 0 0
+                    call nothing 0 0
+                      name doparse nothing 0 0
+                      seq nothing 0 0
+                        name lex nothing 0 0
+                        seq nothing 0 0
+                          const  string 0 0
+                          seq nothing 0 0
+                            const (0) int 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        name cmd nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          . nothing 0 0
+                            name ctxt nothing 0 0
+                            name fail nothing 0 0
+                          seq nothing 0 0
+                            const parse error string 0 0
+                            seq nothing 0 0
+                              + nothing 0 0
+                                const sh:  string 0 0
+                                name err nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        . nothing 0 0
+                          hd nothing 0 0
+                            name args nothing 0 0
+                          name cmd nothing 0 0
+                        name cmd nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name push nothing 0 0
+        seq nothing 0 0
+          exstat nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name setlocal nothing 0 0
+                  seq nothing 0 0
+                    const 0 string 0 0
+                    seq nothing 0 0
+                      :: nothing 0 0
+                        hd nothing 0 0
+                          name args nothing 0 0
+                        name nil polymorphic type 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name setlocal nothing 0 0
+                    seq nothing 0 0
+                      const * string 0 0
+                      seq nothing 0 0
+                        tl nothing 0 0
+                          name args nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      && nothing 0 0
+                        != nothing 0 0
+                          name cmd nothing 0 0
+                          name nil polymorphic type 0 0
+                        == nothing 0 0
+                          . no
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, lseq: int): (int, string) 0 0
+  name trybuiltin fn(ctxt: ref Context, args: list of ref Listnode, lseq: int): (int, string) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      tuple nothing 0 0
+        seq nothing 0 0
+          name nil polymorphic type 0 0
+          seq nothing 0 0
+            name bmods nothing 0 0
+      call nothing 0 0
+        name findbuiltin nothing 0 0
+        seq nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name builtins nothing 0 0
+          seq nothing 0 0
+            . nothing 0 0
+              hd nothing 0 0
+                name args nothing 0 0
+              name word nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        == nothing 0 0
+          name bmods nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                const (0) int 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          tuple nothing 0 0
+            seq nothing 0 0
+              const (1) int 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    hd nothing 0 0
+                      name bmods nothing 0 0
+                    name runbuiltin nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      name myself nothing 0 0
+                      seq nothing 0 0
+                        name args nothing 0 0
+                        seq nothing 0 0
+                          name lseq nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context): string 0 0
+  name keepfdstr fn(ctxt: ref Context): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name s nothing 0 0
+      const  string 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name f nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name keepfds nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name f nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                += nothing 0 0
+                  name s nothing 0 0
+                  cast string 0 0
+                    hd nothing 0 0
+                      name f nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    != nothing 0 0
+                      tl nothing 0 0
+                        name f nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      += nothing 0 0
+                        name s nothing 0 0
+                        const , string 0 0
+            = nothing 0 0
+              name f nothing 0 0
+              tl nothing 0 0
+                name f nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name s nothing 0 0
+typecheck tree: 
+fn(){} fn(mod: Command, drawcontext: ref Draw->Context, argv: list of string, startchan: chan of int, keepfds: list of int) 0 0
+  name externalexec fn(mod: Command, drawcontext: ref Draw->Context, argv: list of string, startchan: chan of int, keepfds: list of int) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      name DEBUG nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name debug nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name sprint nothing 0 0
+              seq nothing 0 0
+                const externalexec(%s,... [%d args]) string 0 0
+                seq nothing 0 0
+                  hd nothing 0 0
+                    name argv nothing 0 0
+                  seq nothing 0 0
+                    len nothing 0 0
+                      name argv nothing 0 0
+    seq nothing 0 0
+      call nothing 0 0
+        -> nothing 0 0
+          name sys nothing 0 0
+          name pctl nothing 0 0
+        seq nothing 0 0
+          -> nothing 0 0
+            name Sys nothing 0 0
+            name NEWFD nothing 0 0
+          seq nothing 0 0
+            name keepfds nothing 0 0
+      seq nothing 0 0
+        <-= nothing 0 0
+          name startchan nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name sys nothing 0 0
+              name pctl nothing 0 0
+            seq nothing 0 0
+              const (0) int 0 0
+              seq nothing 0 0
+                name nil polymorphic type 0 0
+        seq nothing 0 0
+          exstat nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name mod nothing 0 0
+                    name init nothing 0 0
+                  seq nothing 0 0
+                    name drawcontext nothing 0 0
+                    seq nothing 0 0
+                      name argv nothing 0 0
+            except nothing 0 0
+              seq nothing 0 0
+                label nothing 0 0
+                  seq nothing 0 0
+                    name EPIPE nothing 0 0
+                  scope nothing 0 0
+                    raise nothing 0 0
+                      + nothing 0 0
+                        const fail: string 0 0
+                        name EPIPE nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, fd1: int, fd2: int): int 0 0
+  name dup fn(ctxt: ref Context, fd1: int, fd2: int): int 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name waitfd nothing 0 0
+          name fd nothing 0 0
+        name fd2 nothing 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name waitfd nothing 0 0
+              call nothing 0 0
+                name waitfd nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  . nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name waitfd nothing 0 0
+                    name fd nothing 0 0
+                  name fd2 nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name panic nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          name sys nothing 0 0
+                          name sprint nothing 0 0
+                        seq nothing 0 0
+                          const reopen of waitfd gave same fd (%d) string 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              . nothing 0 0
+                                name ctxt nothing 0 0
+                                name waitfd nothing 0 0
+                              name fd nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name dup nothing 0 0
+          seq nothing 0 0
+            name fd1 nothing 0 0
+            seq nothing 0 0
+              name fd2 nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, redirs: ref Redirlist): list of int 0 0
+  name doredirs fn(ctxt: ref Context, redirs: ref Redirlist): list of int 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        . nothing 0 0
+          name redirs nothing 0 0
+          name r nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name keepfds nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name keepfds nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name rl nothing 0 0
+          . nothing 0 0
+            name redirs nothing 0 0
+            name r nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name redirs nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            for nothing 0 0
+              != nothing 0 0
+                name rl nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      tuple nothing 0 0
+                        seq nothing 0 0
+                          name rfd nothing 0 0
+                          seq nothing 0 0
+                            name path nothing 0 0
+                            seq nothing 0 0
+                              tuple nothing 0 0
+                                seq nothing 0 0
+                                  name mode nothing 0 0
+                                  seq nothing 0 0
+                                    name fd1 nothing 0 0
+                                    seq nothing 0 0
+                                      name fd2 nothing 0 0
+                      hd nothing 0 0
+                        name rl nothing 0 0
+                    seq nothing 0 0
+                      if nothing 0 0
+                        && nothing 0 0
+                          == nothing 0 0
+                            name path nothing 0 0
+                            name nil polymorphic type 0 0
+                          == nothing 0 0
+                            name rfd nothing 0 0
+                            name nil polymorphic type 0 0
+                        seq nothing 0 0
+                          scope nothing 0 0
+                            seq nothing 0 0
+                              if nothing 0 0
+                                || nothing 0 0
+                                  == nothing 0 0
+                                    name fd1 nothing 0 0
+                                    - nothing 0 0
+                                      const (1) int 0 0
+                                  == nothing 0 0
+                                    name fd2 nothing 0 0
+                                    - nothing 0 0
+                                      const (1) int 0 0
+                                seq nothing 0 0
+                                  call nothing 0 0
+                                    . nothing 0 0
+                                      name ctxt nothing 0 0
+                                      name fail nothing 0 0
+                                    seq nothing 0 0
+                                      const bad redir string 0 0
+                                      seq nothing 0 0
+                                        const sh: invalid dup string 0 0
+                              seq nothing 0 0
+                                if nothing 0 0
+                                  == nothing 0 0
+                                    call nothing 0 0
+                                      name dup nothing 0 0
+                                      seq nothing 0 0
+                                        name ctxt nothing 0 0
+                                        seq nothing 0 0
+                                          name fd2 nothing 0 0
+                                          seq nothing 0 0
+                                            name fd1 nothing 0 0
+                                
+typecheck tree: 
+fn(){} fn(): ref Sys->FD 0 0
+  name waitfd fn(): ref Sys->FD 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name wf nothing 0 0
+      + nothing 0 0
+        cast string 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name sys nothing 0 0
+              name pctl nothing 0 0
+            seq nothing 0 0
+              const (0) int 0 0
+              seq nothing 0 0
+                name nil polymorphic type 0 0
+        const /wait string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name waitfd nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name open nothing 0 0
+          seq nothing 0 0
+            + nothing 0 0
+              const #p/ string 0 0
+              name wf nothing 0 0
+            seq nothing 0 0
+              -> nothing 0 0
+                name Sys nothing 0 0
+                name OREAD nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name waitfd nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name waitfd nothing 0 0
+              call nothing 0 0
+                -> nothing 0 0
+                  name sys nothing 0 0
+                  name open nothing 0 0
+                seq nothing 0 0
+                  + nothing 0 0
+                    const /prog/ string 0 0
+                    name wf nothing 0 0
+                  seq nothing 0 0
+                    -> nothing 0 0
+                      name Sys nothing 0 0
+                      name OREAD nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              name waitfd nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                name panic nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name sprint nothing 0 0
+                    seq nothing 0 0
+                      const cannot open wait file: %r string 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name waitfd nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, pids: list of int): string 0 0
+  name waitfor fn(ctxt: ref Context, pids: list of int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name pids nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name status nothing 0 0
+        array array of string 0 0
+          len nothing 0 0
+            name pids nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name wcount nothing 0 0
+          len nothing 0 0
+            name status nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name buf nothing 0 0
+            array array of byte 0 0
+              -> nothing 0 0
+                name Sys nothing 0 0
+                name WAITLEN nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name onebad nothing 0 0
+              const (0) int 0 0
+            seq nothing 0 0
+              for nothing 0 0
+                nothing nothing 0 0
+                seq nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      := nothing 0 0
+                        name n nothing 0 0
+                        call nothing 0 0
+                          -> nothing 0 0
+                            name sys nothing 0 0
+                            name read nothing 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              name ctxt nothing 0 0
+                              name waitfd nothing 0 0
+                            seq nothing 0 0
+                              name buf nothing 0 0
+                              seq nothing 0 0
+                                len nothing 0 0
+                                  name buf nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          < nothing 0 0
+                            name n nothing 0 0
+                            const (0) int 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              name panic nothing 0 0
+                              seq nothing 0 0
+                                call nothing 0 0
+                                  -> nothing 0 0
+                                    name sys nothing 0 0
+                                    name sprint nothing 0 0
+                                  seq nothing 0 0
+                                    const error on wait read: %r string 0 0
+                        seq nothing 0 0
+                          := nothing 0 0
+                            tuple nothing 0 0
+                              seq nothing 0 0
+                                name who nothing 0 0
+                                seq nothing 0 0
+                                  name line nothing 0 0
+                                  seq nothing 0 0
+                                    name s nothing 0 0
+                            call nothing 0 0
+                              name parsewaitstatus nothing 0 0
+                              seq nothing 0 0
+                                name ctxt nothing 0 0
+                                seq nothing 0 0
+                                  cast string 0 0
+                                    slice nothing 0 0
+                                      name buf nothing 0 0
+                                      seq nothing 0 0
+                                        const (0) int 0 0
+                                        name n nothing 0 0
+                          seq nothing 0 0
+                            if nothing 0 0
+                              != nothing 0 0
+                                name s nothing 0 0
+                                name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                scope nothing 0 0
+                                  seq nothing 0 0
+                                    if nothing 0 0
+
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, status: string): (int, string, string) 0 0
+  name parsewaitstatus fn(ctxt: ref Context, status: string): (int, string, string) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name i nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        < nothing 0 0
+          name i nothing 0 0
+          len nothing 0 0
+            name status nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              index nothing 0 0
+                name status nothing 0 0
+                name i nothing 0 0
+              const (32) int 0 0
+            seq nothing 0 0
+              break nothing 0 0
+          ++ nothing 0 0
+            name i nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            == nothing 0 0
+              name i nothing 0 0
+              - nothing 0 0
+                len nothing 0 0
+                  name status nothing 0 0
+                const (1) int 0 0
+            != nothing 0 0
+              index nothing 0 0
+                name status nothing 0 0
+                + nothing 0 0
+                  name i nothing 0 0
+                  const (1) int 0 0
+              const (34) int 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name fail nothing 0 0
+              seq nothing 0 0
+                const bad wait read string 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name sprint nothing 0 0
+                    seq nothing 0 0
+                      const sh: bad exit status '%s' string 0 0
+                      seq nothing 0 0
+                        name status nothing 0 0
+        seq nothing 0 0
+          seq nothing 0 0
+            += nothing 0 0
+              name i nothing 0 0
+              const (2) int 0 0
+            for nothing 0 0
+              < nothing 0 0
+                name i nothing 0 0
+                len nothing 0 0
+                  name status nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    index nothing 0 0
+                      name status nothing 0 0
+                      name i nothing 0 0
+                    const (34) int 0 0
+                  seq nothing 0 0
+                    break nothing 0 0
+                ++ nothing 0 0
+                  name i nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              || nothing 0 0
+                > nothing 0 0
+                  name i nothing 0 0
+                  - nothing 0 0
+                    len nothing 0 0
+                      name status nothing 0 0
+                    const (2) int 0 0
+                != nothing 0 0
+                  index nothing 0 0
+                    name status nothing 0 0
+                    + nothing 0 0
+                      name i nothing 0 0
+                      const (1) int 0 0
+                  const (58) int 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name fail nothing 0 0
+                  seq nothing 0 0
+                    const bad wait read string 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          name sys nothing 0 0
+                          name sprint nothing 0 0
+                        seq nothing 0 0
+                          const sh: bad exit status '%s' string 0 0
+                          seq nothing 0 0
+                            name status nothing 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                tuple nothing 0 0
+                  seq nothing 0 0
+                    cast int 0 0
+                      name status nothing 0 0
+                    seq nothing 0 0
+                      name status nothing 0 0
+           
+typecheck tree: 
+fn(){} fn(s: string) 0 0
+  name panic fn(s: string) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      -> nothing 0 0
+        name sys nothing 0 0
+        name fprint nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name stderr nothing 0 0
+        seq nothing 0 0
+          const sh panic: %s
+ string 0 0
+          seq nothing 0 0
+            name s nothing 0 0
+    seq nothing 0 0
+      raise nothing 0 0
+        const panic string 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, s: string) 0 0
+  name diagnostic fn(ctxt: ref Context, s: string) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      & nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name options nothing 0 0
+        . nothing 0 0
+          name Context nothing 0 0
+          name VERBOSE nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name fprint nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name stderr nothing 0 0
+            seq nothing 0 0
+              const sh: %s
+ string 0 0
+              seq nothing 0 0
+                name s nothing 0 0
+typecheck tree: 
+fn(){} fn(drawcontext: ref Draw->Context): ref Context 0 0
+  . fn(drawcontext: ref Draw->Context): ref Context 0 0
+    name Context Context 0 0
+    name new nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name initialise nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          name env nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name env nothing 0 0
+              name clone nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name ctxt nothing 0 0
+          ref nothing 0 0
+            call nothing 0 0
+              name Context nothing 0 0
+              seq nothing 0 0
+                ref nothing 0 0
+                  call nothing 0 0
+                    name Environment nothing 0 0
+                    seq nothing 0 0
+                      ref nothing 0 0
+                        call nothing 0 0
+                          name Builtins nothing 0 0
+                          seq nothing 0 0
+                            name nil polymorphic type 0 0
+                            seq nothing 0 0
+                              const (0) int 0 0
+                      seq nothing 0 0
+                        ref nothing 0 0
+                          call nothing 0 0
+                            name Builtins nothing 0 0
+                            seq nothing 0 0
+                              name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                const (0) int 0 0
+                        seq nothing 0 0
+                          name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              name newlocalenv nothing 0 0
+                              seq nothing 0 0
+                                name nil polymorphic type 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name waitfd nothing 0 0
+                  seq nothing 0 0
+                    name drawcontext nothing 0 0
+                    seq nothing 0 0
+                      :: nothing 0 0
+                        const (0) int 0 0
+                        :: nothing 0 0
+                          const (1) int 0 0
+                          :: nothing 0 0
+                            const (2) int 0 0
+                            name nil polymorphic type 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name myselfbuiltin nothing 0 0
+              name initbuiltin nothing 0 0
+            seq nothing 0 0
+              name ctxt nothing 0 0
+              seq nothing 0 0
+                name myself nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name localenv nothing 0 0
+                name flags nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name VERBOSE nothing 0 0
+            seq nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name vl nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name get nothing 0 0
+                    seq nothing 0 0
+                      const autoload string 0 0
+                for nothing 0 0
+                  != nothing 0 0
+                    name vl nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      && nothing 0 0
+                        == nothing 0 0
+                          . nothing 0 0
+                            hd nothing 0 0
+                              name vl nothing 0 0
+                            name cmd nothing 0 0
+                          name nil polymorphic type 0 0
+         
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, copyenv: int): ref Context 0 0
+  . fn(c: self ref Context, copyenv: int): ref Context 0 0
+    name Context Context 0 0
+    name copy nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name nctxt nothing 0 0
+      ref nothing 0 0
+        call nothing 0 0
+          name Context nothing 0 0
+          seq nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                name waitfd nothing 0 0
+              seq nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name drawcontext nothing 0 0
+                seq nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name keepfds nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        name copyenv nothing 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  name env nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name env nothing 0 0
+                      name clone nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  . nothing 0 0
+                    name nctxt nothing 0 0
+                    name env nothing 0 0
+                  ref nothing 0 0
+                    call nothing 0 0
+                      name Environment nothing 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          name copybuiltins nothing 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              . nothing 0 0
+                                name ctxt nothing 0 0
+                                name env nothing 0 0
+                              name sbuiltins nothing 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            name copybuiltins nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                . nothing 0 0
+                                  name ctxt nothing 0 0
+                                  name env nothing 0 0
+                                name builtins nothing 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              . nothing 0 0
+                                name ctxt nothing 0 0
+                                name env nothing 0 0
+                              name bmods nothing 0 0
+                            seq nothing 0 0
+                              call nothing 0 0
+                                name copylocalenv nothing 0 0
+                                seq nothing 0 0
+                                  . nothing 0 0
+                                    . nothing 0 0
+                                      name ctxt nothing 0 0
+                                      name env nothing 0 0
+                                    name localenv nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nctxt nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 0 0
+  . fn(c: self ref Context, name: string, val: list of ref Listnode) 0 0
+    name Context Context 0 0
+    name set nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name e nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name localenv nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name idx nothing 0 0
+        call nothing 0 0
+          name hashfn nothing 0 0
+          seq nothing 0 0
+            name name nothing 0 0
+            seq nothing 0 0
+              len nothing 0 0
+                . nothing 0 0
+                  name e nothing 0 0
+                  name vars nothing 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          nothing nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name v nothing 0 0
+                  call nothing 0 0
+                    name hashfind nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        name e nothing 0 0
+                        name vars nothing 0 0
+                      seq nothing 0 0
+                        name idx nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    == nothing 0 0
+                      name v nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      scope nothing 0 0
+                        seq nothing 0 0
+                          if nothing 0 0
+                            == nothing 0 0
+                              . nothing 0 0
+                                name e nothing 0 0
+                                name pushed nothing 0 0
+                              name nil polymorphic type 0 0
+                            seq nothing 0 0
+                              scope nothing 0 0
+                                seq nothing 0 0
+                                  := nothing 0 0
+                                    name flags nothing 0 0
+                                    . nothing 0 0
+                                      name Var nothing 0 0
+                                      name CHANGED nothing 0 0
+                                  seq nothing 0 0
+                                    if nothing 0 0
+                                      call nothing 0 0
+                                        name noexport nothing 0 0
+                                        seq nothing 0 0
+                                          name name nothing 0 0
+                                      seq nothing 0 0
+                                        |= nothing 0 0
+                                          name flags nothing 0 0
+                                          . nothing 0 0
+                                            name Var nothing 0 0
+                                            name NOEXPORT nothing 0 0
+                                    seq nothing 0 0
+                                      call nothing 0 0
+                                        name hashadd nothing 0 0
+                                        seq nothing 0 0
+                                          . nothing 0 0
+                                            name e nothing 0 0
+                                            name vars nothing 0 0
+                                          seq nothing 0 0
+                                            name idx nothing 0 0
+                                            seq nothing 0 0
+                                              ref nothing 0 0
+                                                call nothing 0 0
+                                                  name Var nothing 0 0
+                                                  seq nothing 0 0
+                                                    name name nothing 0 0
+                         
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, name: string): list of ref Listnode 0 0
+  . fn(c: self ref Context, name: string): list of ref Listnode 0 0
+    name Context Context 0 0
+    name get nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name name nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name idx nothing 0 0
+        - nothing 0 0
+          const (1) int 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          && nothing 0 0
+            > nothing 0 0
+              index nothing 0 0
+                name name nothing 0 0
+                const (0) int 0 0
+              const (48) int 0 0
+            <= nothing 0 0
+              index nothing 0 0
+                name name nothing 0 0
+                const (0) int 0 0
+              const (57) int 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                vardecl int 0 0
+                  seq nothing 0 0
+                seq nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name i nothing 0 0
+                      const (0) int 0 0
+                    for nothing 0 0
+                      < nothing 0 0
+                        name i nothing 0 0
+                        len nothing 0 0
+                          name name nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          || nothing 0 0
+                            < nothing 0 0
+                              index nothing 0 0
+                                name name nothing 0 0
+                                name i nothing 0 0
+                              const (48) int 0 0
+                            > nothing 0 0
+                              index nothing 0 0
+                                name name nothing 0 0
+                                name i nothing 0 0
+                              const (57) int 0 0
+                          seq nothing 0 0
+                            break nothing 0 0
+                        ++ nothing 0 0
+                          name i nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      >= nothing 0 0
+                        name i nothing 0 0
+                        len nothing 0 0
+                          name name nothing 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name idx nothing 0 0
+                              - nothing 0 0
+                                cast int 0 0
+                                  name name nothing 0 0
+                                const (1) int 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name name nothing 0 0
+                                const * string 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name v nothing 0 0
+            call nothing 0 0
+              name varfind nothing 0 0
+              seq nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name localenv nothing 0 0
+                seq nothing 0 0
+                  name name nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              != nothing 0 0
+                name v nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      != nothing 0 0
+                        name idx nothing 0 0
+                        - nothing 0 0
+                          const (1) int 0 0
+                      seq nothing 0 0
+                        return nothing 0 0
+                          call n
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context): list of (string, list of ref Listnode) 0 0
+  . fn(c: self ref Context): list of (string, list of ref Listnode) 0 0
+    name Context Context 0 0
+    name envlist nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name t nothing 0 0
+      array array of list of ref Var 0 0
+        name ENVHASHSIZE nothing 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name e nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name localenv nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name e nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name i nothing 0 0
+                  const (0) int 0 0
+                seq nothing 0 0
+                  for nothing 0 0
+                    < nothing 0 0
+                      name i nothing 0 0
+                      len nothing 0 0
+                        . nothing 0 0
+                          name e nothing 0 0
+                          name vars nothing 0 0
+                    seq nothing 0 0
+                      scope nothing 0 0
+                        seq nothing 0 0
+                          := nothing 0 0
+                            name vl nothing 0 0
+                            index nothing 0 0
+                              . nothing 0 0
+                                name e nothing 0 0
+                                name vars nothing 0 0
+                              name i nothing 0 0
+                          seq nothing 0 0
+                            for nothing 0 0
+                              != nothing 0 0
+                                name vl nothing 0 0
+                                name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                scope nothing 0 0
+                                  seq nothing 0 0
+                                    := nothing 0 0
+                                      name v nothing 0 0
+                                      hd nothing 0 0
+                                        name vl nothing 0 0
+                                    seq nothing 0 0
+                                      := nothing 0 0
+                                        name idx nothing 0 0
+                                        call nothing 0 0
+                                          name hashfn nothing 0 0
+                                          seq nothing 0 0
+                                            . nothing 0 0
+                                              name v nothing 0 0
+                                              name name nothing 0 0
+                                            seq nothing 0 0
+                                              len nothing 0 0
+                                                . nothing 0 0
+                                                  name e nothing 0 0
+                                                  name vars nothing 0 0
+                                      seq nothing 0 0
+                                        if nothing 0 0
+                                          == nothing 0 0
+                                            call nothing 0 0
+                                              name hashfind nothing 0 0
+                                              seq nothing 0 0
+                                                name t nothing 0 0
+                                                seq nothing 0 0
+                                                  name idx nothing 0 0
+                                                  seq nothing 0 0
+                                                    . nothing 0 0
+                                                      name v nothing 0 0
+                                                      name name nothing 0 0
+                                            name nil polymorphic type 0 0
+                             
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 0 0
+  . fn(c: self ref Context, name: string, val: list of ref Listnode) 0 0
+    name Context Context 0 0
+    name setlocal nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name e nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name localenv nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name idx nothing 0 0
+        call nothing 0 0
+          name hashfn nothing 0 0
+          seq nothing 0 0
+            name name nothing 0 0
+            seq nothing 0 0
+              len nothing 0 0
+                . nothing 0 0
+                  name e nothing 0 0
+                  name vars nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name v nothing 0 0
+          call nothing 0 0
+            name hashfind nothing 0 0
+            seq nothing 0 0
+              . nothing 0 0
+                name e nothing 0 0
+                name vars nothing 0 0
+              seq nothing 0 0
+                name idx nothing 0 0
+                seq nothing 0 0
+                  name name nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              name v nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    name flags nothing 0 0
+                    . nothing 0 0
+                      name Var nothing 0 0
+                      name CHANGED nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      call nothing 0 0
+                        name noexport nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                      seq nothing 0 0
+                        |= nothing 0 0
+                          name flags nothing 0 0
+                          . nothing 0 0
+                            name Var nothing 0 0
+                            name NOEXPORT nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name hashadd nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            name e nothing 0 0
+                            name vars nothing 0 0
+                          seq nothing 0 0
+                            name idx nothing 0 0
+                            seq nothing 0 0
+                              ref nothing 0 0
+                                call nothing 0 0
+                                  name Var nothing 0 0
+                                  seq nothing 0 0
+                                    name name nothing 0 0
+                                    seq nothing 0 0
+                                      name val nothing 0 0
+                                      seq nothing 0 0
+                                        name flags nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    . nothing 0 0
+                      name v nothing 0 0
+                      name val nothing 0 0
+                    name val nothing 0 0
+                  seq nothing 0 0
+                    |= nothing 0 0
+                      . nothing 0 0
+                        name v nothing 0 0
+                        name flags nothing 0 0
+                      . nothing 0 0
+                        name Var nothing 0 0
+                        name CHANGED nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context) 0 0
+  . fn(c: self ref Context) 0 0
+    name Context Context 0 0
+    name push nothing 0 0
+  seq nothing 0 0
+    = nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name localenv nothing 0 0
+      call nothing 0 0
+        name newlocalenv nothing 0 0
+        seq nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name localenv nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context) 0 0
+  . fn(c: self ref Context) 0 0
+    name Context Context 0 0
+    name pop nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name localenv nothing 0 0
+          name pushed nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name panic nothing 0 0
+          seq nothing 0 0
+            const unbalanced contexts in shell environment string 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name oldv nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name localenv nothing 0 0
+                name vars nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name localenv nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name env nothing 0 0
+                    name localenv nothing 0 0
+                  name pushed nothing 0 0
+              seq nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    name i nothing 0 0
+                    const (0) int 0 0
+                  for nothing 0 0
+                    < nothing 0 0
+                      name i nothing 0 0
+                      len nothing 0 0
+                        name oldv nothing 0 0
+                    seq nothing 0 0
+                      scope nothing 0 0
+                        seq nothing 0 0
+                          := nothing 0 0
+                            name vl nothing 0 0
+                            index nothing 0 0
+                              name oldv nothing 0 0
+                              name i nothing 0 0
+                          seq nothing 0 0
+                            for nothing 0 0
+                              != nothing 0 0
+                                name vl nothing 0 0
+                                name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                scope nothing 0 0
+                                  seq nothing 0 0
+                                    if nothing 0 0
+                                      != nothing 0 0
+                                        := nothing 0 0
+                                          name v nothing 0 0
+                                          call nothing 0 0
+                                            name varfind nothing 0 0
+                                            seq nothing 0 0
+                                              . nothing 0 0
+                                                . nothing 0 0
+                                                  name ctxt nothing 0 0
+                                                  name env nothing 0 0
+                                                name localenv nothing 0 0
+                                              seq nothing 0 0
+                                                . nothing 0 0
+                                                  hd nothing 0 0
+                                                    name vl nothing 0 0
+                                                  name name nothing 0 0
+                                        name nil polymorphic type 0 0
+                                      seq nothing 0 0
+                                        |= nothing 0 0
+                                          . nothing 0 0
+                                            name v nothing 0 0
+                                            name flags nothing 0 0
+                                          . 
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, args: list of ref Listnode, last: int): string 0 0
+  . fn(c: self ref Context, args: list of ref Listnode, last: int): string 0 0
+    name Context Context 0 0
+    name run nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name args nothing 0 0
+          name nil polymorphic type 0 0
+        && nothing 0 0
+          == nothing 0 0
+            . nothing 0 0
+              hd nothing 0 0
+                name args nothing 0 0
+              name cmd nothing 0 0
+            name nil polymorphic type 0 0
+          == nothing 0 0
+            . nothing 0 0
+              hd nothing 0 0
+                name args nothing 0 0
+              name word nothing 0 0
+            name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name cmd nothing 0 0
+        hd nothing 0 0
+          name args nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            != nothing 0 0
+              . nothing 0 0
+                name cmd nothing 0 0
+                name cmd nothing 0 0
+              name nil polymorphic type 0 0
+            == nothing 0 0
+              index nothing 0 0
+                . nothing 0 0
+                  name cmd nothing 0 0
+                  name word nothing 0 0
+                const (0) int 0 0
+              const (123) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              call nothing 0 0
+                name runblock nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    name args nothing 0 0
+                    seq nothing 0 0
+                      name last nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            & nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name options nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name EXECPRINT nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                -> nothing 0 0
+                  name sys nothing 0 0
+                  name fprint nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name stderr nothing 0 0
+                  seq nothing 0 0
+                    const %s
+ string 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        name quoted nothing 0 0
+                        seq nothing 0 0
+                          name args nothing 0 0
+                          seq nothing 0 0
+                            const (0) int 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              tuple nothing 0 0
+                seq nothing 0 0
+                  name doneit nothing 0 0
+                  seq nothing 0 0
+                    name status nothing 0 0
+              call nothing 0 0
+                name trybuiltin nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    name args nothing 0 0
+                    seq nothing 0 0
+                      name last nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                ! nothing 0 0
+                  name doneit nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name status nothing 0 0
+                    call nothing 0 0
+                      name runexternal nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          name args nothing 0 0
+                          seq nothing 0 0
+                            name last nothing 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name status nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, name: string, mod: Shellbuiltin) 0 0
+  . fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+    name Context Context 0 0
+    name addmodule nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      -> nothing 0 0
+        name mod nothing 0 0
+        name initbuiltin nothing 0 0
+      seq nothing 0 0
+        name ctxt nothing 0 0
+        seq nothing 0 0
+          name myself nothing 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name env nothing 0 0
+          name bmods nothing 0 0
+        :: nothing 0 0
+          tuple nothing 0 0
+            seq nothing 0 0
+              name name nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name mod nothing 0 0
+                    name getself nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name bmods nothing 0 0
+typecheck tree: 
+fn(){} fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+  . fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+    name Context Context 0 0
+    name addbuiltin nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name addbuiltin nothing 0 0
+      seq nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name c nothing 0 0
+            name env nothing 0 0
+          name builtins nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            name mod nothing 0 0
+typecheck tree: 
+fn(){} fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+  . fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+    name Context Context 0 0
+    name removebuiltin nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name removebuiltin nothing 0 0
+      seq nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name c nothing 0 0
+            name env nothing 0 0
+          name builtins nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            name mod nothing 0 0
+typecheck tree: 
+fn(){} fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+  . fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+    name Context Context 0 0
+    name addsbuiltin nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name addbuiltin nothing 0 0
+      seq nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name c nothing 0 0
+            name env nothing 0 0
+          name sbuiltins nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            name mod nothing 0 0
+typecheck tree: 
+fn(){} fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+  . fn(c: self ref Context, name: string, mod: Shellbuiltin) 0 0
+    name Context Context 0 0
+    name removesbuiltin nothing 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      name removebuiltin nothing 0 0
+      seq nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name c nothing 0 0
+            name env nothing 0 0
+          name sbuiltins nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            name mod nothing 0 0
+typecheck tree: 
+fn(){} fn(e: ref Localenv, name: string): ref Var 0 0
+  name varfind fn(e: ref Localenv, name: string): ref Var 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name idx nothing 0 0
+      call nothing 0 0
+        name hashfn nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            len nothing 0 0
+              . nothing 0 0
+                name e nothing 0 0
+                name vars nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name e nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name vl nothing 0 0
+              index nothing 0 0
+                . nothing 0 0
+                  name e nothing 0 0
+                  name vars nothing 0 0
+                name idx nothing 0 0
+            for nothing 0 0
+              != nothing 0 0
+                name vl nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    . nothing 0 0
+                      hd nothing 0 0
+                        name vl nothing 0 0
+                      name name nothing 0 0
+                    name name nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      hd nothing 0 0
+                        name vl nothing 0 0
+                = nothing 0 0
+                  name vl nothing 0 0
+                  tl nothing 0 0
+                    name vl nothing 0 0
+          = nothing 0 0
+            name e nothing 0 0
+            . nothing 0 0
+              name e nothing 0 0
+              name pushed nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, ename: string, err: string) 0 0
+  . fn(c: self ref Context, ename: string, msg: string) 0 0
+    name Context Context 0 0
+    name fail nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      & nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name options nothing 0 0
+        . nothing 0 0
+          name Context nothing 0 0
+          name VERBOSE nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name fprint nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name stderr nothing 0 0
+            seq nothing 0 0
+              const %s
+ string 0 0
+              seq nothing 0 0
+                name err nothing 0 0
+    seq nothing 0 0
+      raise nothing 0 0
+        + nothing 0 0
+          const fail: string 0 0
+          name ename nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context, flags: int, on: int): int 0 0
+  . fn(c: self ref Context, flags: int, on: int): int 0 0
+    name Context Context 0 0
+    name setoptions nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name old nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name env nothing 0 0
+          name localenv nothing 0 0
+        name flags nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        name on nothing 0 0
+        seq nothing 0 0
+          |= nothing 0 0
+            . nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name env nothing 0 0
+                name localenv nothing 0 0
+              name flags nothing 0 0
+            name flags nothing 0 0
+          &= nothing 0 0
+            . nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name env nothing 0 0
+                name localenv nothing 0 0
+              name flags nothing 0 0
+            ~ nothing 0 0
+              name flags nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name old nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: self ref Context): int 0 0
+  . fn(c: self ref Context): int 0 0
+    name Context Context 0 0
+    name options nothing 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          . nothing 0 0
+            name ctxt nothing 0 0
+            name env nothing 0 0
+          name localenv nothing 0 0
+        name flags nothing 0 0
+typecheck tree: 
+fn(){} fn(s: string, n: int): int 0 0
+  name hashfn fn(s: string, n: int): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name h nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name m nothing 0 0
+        len nothing 0 0
+          name s nothing 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name i nothing 0 0
+            const (0) int 0 0
+          for nothing 0 0
+            < nothing 0 0
+              name i nothing 0 0
+              name m nothing 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name h nothing 0 0
+                    + nothing 0 0
+                      * nothing 0 0
+                        const (65599) int 0 0
+                        name h nothing 0 0
+                      index nothing 0 0
+                        name s nothing 0 0
+                        name i nothing 0 0
+              ++ nothing 0 0
+                name i nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            % nothing 0 0
+              & nothing 0 0
+                name h nothing 0 0
+                const (2147483647) int 0 0
+              name n nothing 0 0
+typecheck tree: 
+fn(){} fn(ht: array of list of ref Var, idx: int, n: string): ref Var 0 0
+  name hashfind fn(ht: array of list of ref Var, idx: int, n: string): ref Var 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name ent nothing 0 0
+      index nothing 0 0
+        name ht nothing 0 0
+        name idx nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name ent nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              . nothing 0 0
+                hd nothing 0 0
+                  name ent nothing 0 0
+                name name nothing 0 0
+              name n nothing 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                hd nothing 0 0
+                  name ent nothing 0 0
+          = nothing 0 0
+            name ent nothing 0 0
+            tl nothing 0 0
+              name ent nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ht: array of list of ref Var, idx: int, v: ref Var) 0 0
+  name hashadd fn(ht: array of list of ref Var, idx: int, v: ref Var) 0 0
+  seq nothing 0 0
+    = nothing 0 0
+      index nothing 0 0
+        name ht nothing 0 0
+        name idx nothing 0 0
+      :: nothing 0 0
+        name v nothing 0 0
+        index nothing 0 0
+          name ht nothing 0 0
+          name idx nothing 0 0
+typecheck tree: 
+fn(){} fn(e: ref Localenv): ref Localenv 0 0
+  name copylocalenv fn(e: ref Localenv): ref Localenv 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name nvars nothing 0 0
+      array array of list of ref Var 0 0
+        len nothing 0 0
+          . nothing 0 0
+            name e nothing 0 0
+            name vars nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name flags nothing 0 0
+        . nothing 0 0
+          name e nothing 0 0
+          name flags nothing 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name e nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name i nothing 0 0
+                const (0) int 0 0
+              for nothing 0 0
+                < nothing 0 0
+                  name i nothing 0 0
+                  len nothing 0 0
+                    name nvars nothing 0 0
+                seq nothing 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name vl nothing 0 0
+                      index nothing 0 0
+                        . nothing 0 0
+                          name e nothing 0 0
+                          name vars nothing 0 0
+                        name i nothing 0 0
+                    for nothing 0 0
+                      != nothing 0 0
+                        name vl nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            := nothing 0 0
+                              name idx nothing 0 0
+                              call nothing 0 0
+                                name hashfn nothing 0 0
+                                seq nothing 0 0
+                                  . nothing 0 0
+                                    hd nothing 0 0
+                                      name vl nothing 0 0
+                                    name name nothing 0 0
+                                  seq nothing 0 0
+                                    len nothing 0 0
+                                      name nvars nothing 0 0
+                            seq nothing 0 0
+                              if nothing 0 0
+                                == nothing 0 0
+                                  call nothing 0 0
+                                    name hashfind nothing 0 0
+                                    seq nothing 0 0
+                                      name nvars nothing 0 0
+                                      seq nothing 0 0
+                                        name idx nothing 0 0
+                                        seq nothing 0 0
+                                          . nothing 0 0
+                                            hd nothing 0 0
+                                              name vl nothing 0 0
+                                            name name nothing 0 0
+                                  name nil polymorphic type 0 0
+                                seq nothing 0 0
+                                  call nothing 0 0
+                                    name hashadd nothing 0 0
+                                    seq nothing 0 0
+                                      name nvars nothing 0 0
+                                      seq nothing 0 0
+                                        name idx nothing 0 0
+                                        seq nothing 0 0
+                                          ref nothing 0 0
+                                            * nothing 0 0
+                                              hd nothing 0 0
+                                                name vl nothing 0 0
+                        = nothing 0 0
+                          name vl nothing 0 0
+                          tl nothing 0 0
+                            name vl nothing 0 0
+                  ++ nothing 0 0
+                    name i nothing 0 0
+            = nothing 0 0
+              name e nothing 0 0
+              . nothing 0 0
+       
+typecheck tree: 
+fn(){} fn(pushed: ref Localenv): ref Localenv 0 0
+  name newlocalenv fn(pushed: ref Localenv): ref Localenv 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name e nothing 0 0
+      ref nothing 0 0
+        call nothing 0 0
+          name Localenv nothing 0 0
+          seq nothing 0 0
+            array array of list of ref Var 0 0
+              name ENVHASHSIZE nothing 0 0
+            seq nothing 0 0
+              name pushed nothing 0 0
+              seq nothing 0 0
+                const (0) int 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        && nothing 0 0
+          == nothing 0 0
+            name pushed nothing 0 0
+            name nil polymorphic type 0 0
+          != nothing 0 0
+            name env nothing 0 0
+            name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name vl nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name env nothing 0 0
+                    name getall nothing 0 0
+              seq nothing 0 0
+                for nothing 0 0
+                  != nothing 0 0
+                    name vl nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          tuple nothing 0 0
+                            seq nothing 0 0
+                              name name nothing 0 0
+                              seq nothing 0 0
+                                name val nothing 0 0
+                          hd nothing 0 0
+                            name vl nothing 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            name hashadd nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name e nothing 0 0
+                                name vars nothing 0 0
+                              seq nothing 0 0
+                                call nothing 0 0
+                                  name hashfn nothing 0 0
+                                  seq nothing 0 0
+                                    name name nothing 0 0
+                                    seq nothing 0 0
+                                      len nothing 0 0
+                                        . nothing 0 0
+                                          name e nothing 0 0
+                                          name vars nothing 0 0
+                                seq nothing 0 0
+                                  ref nothing 0 0
+                                    call nothing 0 0
+                                      name Var nothing 0 0
+                                      seq nothing 0 0
+                                        name name nothing 0 0
+                                        seq nothing 0 0
+                                          call nothing 0 0
+                                            name envstringtoval nothing 0 0
+                                            seq nothing 0 0
+                                              name val nothing 0 0
+                                          seq nothing 0 0
+                                            const (0) int 0 0
+                    = nothing 0 0
+                      name vl nothing 0 0
+                      tl nothing 0 0
+                        name vl nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          != nothing 0 0
+            name pushed nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                name e nothing 0 0
+                name flags nothing 0 0
+              . nothing 0 0
+                name pushed nothing 0 0
+                name flags nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name e nothing 0 0
+typecheck tree: 
+fn(){} fn(b: ref Builtins): ref Builtins 0 0
+  name copybuiltins fn(b: ref Builtins): ref Builtins 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name nb nothing 0 0
+      ref nothing 0 0
+        call nothing 0 0
+          name Builtins nothing 0 0
+          seq nothing 0 0
+            array array of (string, list of Shellbuiltin) 0 0
+              . nothing 0 0
+                name b nothing 0 0
+                name n nothing 0 0
+            seq nothing 0 0
+              . nothing 0 0
+                name b nothing 0 0
+                name n nothing 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        slice nothing 0 0
+          . nothing 0 0
+            name nb nothing 0 0
+            name ba nothing 0 0
+          seq nothing 0 0
+            const (0) int 0 0
+            nothing nothing 0 0
+        slice nothing 0 0
+          . nothing 0 0
+            name b nothing 0 0
+            name ba nothing 0 0
+          seq nothing 0 0
+            const (0) int 0 0
+            . nothing 0 0
+              name b nothing 0 0
+              name n nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nb nothing 0 0
+typecheck tree: 
+fn(){} fn(b: ref Builtins, name: string): (int, list of Shellbuiltin) 0 0
+  name findbuiltin fn(b: ref Builtins, name: string): (int, list of Shellbuiltin) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name lo nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name hi nothing 0 0
+        - nothing 0 0
+          . nothing 0 0
+            name b nothing 0 0
+            name n nothing 0 0
+          const (1) int 0 0
+      seq nothing 0 0
+        for nothing 0 0
+          <= nothing 0 0
+            name lo nothing 0 0
+            name hi nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name mid nothing 0 0
+                  / nothing 0 0
+                    + nothing 0 0
+                      name lo nothing 0 0
+                      name hi nothing 0 0
+                    const (2) int 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name bname nothing 0 0
+                        seq nothing 0 0
+                          name bmod nothing 0 0
+                    index nothing 0 0
+                      . nothing 0 0
+                        name b nothing 0 0
+                        name ba nothing 0 0
+                      name mid nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      < nothing 0 0
+                        name name nothing 0 0
+                        name bname nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          name hi nothing 0 0
+                          - nothing 0 0
+                            name mid nothing 0 0
+                            const (1) int 0 0
+                        if nothing 0 0
+                          > nothing 0 0
+                            name name nothing 0 0
+                            name bname nothing 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name lo nothing 0 0
+                              + nothing 0 0
+                                name mid nothing 0 0
+                                const (1) int 0 0
+                            return nothing 0 0
+                              tuple nothing 0 0
+                                seq nothing 0 0
+                                  name mid nothing 0 0
+                                  seq nothing 0 0
+                                    name bmod nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                name lo nothing 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(b: ref Builtins, name: string, mod: Shellbuiltin) 0 0
+  name removebuiltin fn(b: ref Builtins, name: string, mod: Shellbuiltin) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      tuple nothing 0 0
+        seq nothing 0 0
+          name n nothing 0 0
+          seq nothing 0 0
+            name bmods nothing 0 0
+      call nothing 0 0
+        name findbuiltin nothing 0 0
+        seq nothing 0 0
+          name b nothing 0 0
+          seq nothing 0 0
+            name name nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        == nothing 0 0
+          name bmods nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          return nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            hd nothing 0 0
+              name bmods nothing 0 0
+            name mod nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  != nothing 0 0
+                    tl nothing 0 0
+                      name bmods nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      index nothing 0 0
+                        . nothing 0 0
+                          name b nothing 0 0
+                          name ba nothing 0 0
+                        name n nothing 0 0
+                      tuple nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                          seq nothing 0 0
+                            tl nothing 0 0
+                              name bmods nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          slice nothing 0 0
+                            . nothing 0 0
+                              name b nothing 0 0
+                              name ba nothing 0 0
+                            seq nothing 0 0
+                              name n nothing 0 0
+                              nothing nothing 0 0
+                          slice nothing 0 0
+                            . nothing 0 0
+                              name b nothing 0 0
+                              name ba nothing 0 0
+                            seq nothing 0 0
+                              + nothing 0 0
+                                name n nothing 0 0
+                                const (1) int 0 0
+                              . nothing 0 0
+                                name b nothing 0 0
+                                name n nothing 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            index nothing 0 0
+                              . nothing 0 0
+                                name b nothing 0 0
+                                name ba nothing 0 0
+                              -- nothing 0 0
+                                . nothing 0 0
+                                  name b nothing 0 0
+                                  name n nothing 0 0
+                            tuple nothing 0 0
+                              seq nothing 0 0
+                                name nil polymorphic type 0 0
+                                seq nothing 0 0
+                                  name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(b: ref Builtins, name: string, mod: Shellbuiltin) 0 0
+  name addbuiltin fn(b: ref Builtins, name: string, mod: Shellbuiltin) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name mod nothing 0 0
+          name nil polymorphic type 0 0
+        && nothing 0 0
+          == nothing 0 0
+            name name nothing 0 0
+            const builtin string 0 0
+          != nothing 0 0
+            name mod nothing 0 0
+            name myselfbuiltin nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        tuple nothing 0 0
+          seq nothing 0 0
+            name n nothing 0 0
+            seq nothing 0 0
+              name bmods nothing 0 0
+        call nothing 0 0
+          name findbuiltin nothing 0 0
+          seq nothing 0 0
+            name b nothing 0 0
+            seq nothing 0 0
+              name name nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          != nothing 0 0
+            name bmods nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    hd nothing 0 0
+                      name bmods nothing 0 0
+                    name myselfbuiltin nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      index nothing 0 0
+                        . nothing 0 0
+                          name b nothing 0 0
+                          name ba nothing 0 0
+                        name n nothing 0 0
+                      tuple nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                          seq nothing 0 0
+                            :: nothing 0 0
+                              name mod nothing 0 0
+                              name bmods nothing 0 0
+                    = nothing 0 0
+                      index nothing 0 0
+                        . nothing 0 0
+                          name b nothing 0 0
+                          name ba nothing 0 0
+                        name n nothing 0 0
+                      tuple nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                          seq nothing 0 0
+                            :: nothing 0 0
+                              name mod nothing 0 0
+                              name nil polymorphic type 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    . nothing 0 0
+                      name b nothing 0 0
+                      name n nothing 0 0
+                    len nothing 0 0
+                      . nothing 0 0
+                        name b nothing 0 0
+                        name ba nothing 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          name nb nothing 0 0
+                          array array of (string, list of Shellbuiltin) 0 0
+                            + nothing 0 0
+                              . nothing 0 0
+                                name b nothing 0 0
+                                name n nothing 0 0
+                              const (10) int 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            slice nothing 0 0
+                              name nb nothing 0 0
+                              seq nothing 0 0
+                                const (0) int 0 0
+                                nothing nothing 0 0
+                            slice nothing 0 0
+                              . nothing 0 0
+                                name b nothing 0 0
+                                name ba nothing 0 0
+                              seq nothing 0 0
+                                const (0) int 0 0
+                                . nothing 0 0
+typecheck tree: 
+fn(){} fn(b: ref Builtins, mod: Shellbuiltin) 0 0
+  name removebuiltinmod fn(b: ref Builtins, mod: Shellbuiltin) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name j nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            . nothing 0 0
+              name b nothing 0 0
+              name n nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name name nothing 0 0
+                      seq nothing 0 0
+                        name bmods nothing 0 0
+                  index nothing 0 0
+                    . nothing 0 0
+                      name b nothing 0 0
+                      name ba nothing 0 0
+                    name i nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    == nothing 0 0
+                      hd nothing 0 0
+                        name bmods nothing 0 0
+                      name mod nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name bmods nothing 0 0
+                        tl nothing 0 0
+                          name bmods nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      != nothing 0 0
+                        name bmods nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          index nothing 0 0
+                            . nothing 0 0
+                              name b nothing 0 0
+                              name ba nothing 0 0
+                            ++ nothing 0 0
+                              name j nothing 0 0
+                          tuple nothing 0 0
+                            seq nothing 0 0
+                              name name nothing 0 0
+                              seq nothing 0 0
+                                name bmods nothing 0 0
+            ++ nothing 0 0
+              name i nothing 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          . nothing 0 0
+            name b nothing 0 0
+            name n nothing 0 0
+          name j nothing 0 0
+        seq nothing 0 0
+          for nothing 0 0
+            < nothing 0 0
+              name j nothing 0 0
+              name i nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                index nothing 0 0
+                  . nothing 0 0
+                    name b nothing 0 0
+                    name ba nothing 0 0
+                  name j nothing 0 0
+                tuple nothing 0 0
+                  seq nothing 0 0
+                    name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+              ++ nothing 0 0
+                name j nothing 0 0
+typecheck tree: 
+fn(){} fn(e: ref Localenv) 0 0
+  name export fn(e: ref Localenv) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name env nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name e nothing 0 0
+            name pushed nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            name export nothing 0 0
+            seq nothing 0 0
+              . nothing 0 0
+                name e nothing 0 0
+                name pushed nothing 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name i nothing 0 0
+            const (0) int 0 0
+          for nothing 0 0
+            < nothing 0 0
+              name i nothing 0 0
+              len nothing 0 0
+                . nothing 0 0
+                  name e nothing 0 0
+                  name vars nothing 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    name vl nothing 0 0
+                    index nothing 0 0
+                      . nothing 0 0
+                        name e nothing 0 0
+                        name vars nothing 0 0
+                      name i nothing 0 0
+                  seq nothing 0 0
+                    for nothing 0 0
+                      != nothing 0 0
+                        name vl nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            := nothing 0 0
+                              name v nothing 0 0
+                              hd nothing 0 0
+                                name vl nothing 0 0
+                            seq nothing 0 0
+                              if nothing 0 0
+                                && nothing 0 0
+                                  & nothing 0 0
+                                    . nothing 0 0
+                                      name v nothing 0 0
+                                      name flags nothing 0 0
+                                    . nothing 0 0
+                                      name Var nothing 0 0
+                                      name CHANGED nothing 0 0
+                                  ! nothing 0 0
+                                    & nothing 0 0
+                                      . nothing 0 0
+                                        name v nothing 0 0
+                                        name flags nothing 0 0
+                                      . nothing 0 0
+                                        name Var nothing 0 0
+                                        name NOEXPORT nothing 0 0
+                                seq nothing 0 0
+                                  scope nothing 0 0
+                                    seq nothing 0 0
+                                      call nothing 0 0
+                                        name setenv nothing 0 0
+                                        seq nothing 0 0
+                                          . nothing 0 0
+                                            name v nothing 0 0
+                                            name name nothing 0 0
+                                          seq nothing 0 0
+                                            . nothing 0 0
+                                              name v nothing 0 0
+                                              name val nothing 0 0
+                                      seq nothing 0 0
+                                        &= nothing 0 0
+                                          . nothing 0 0
+                                            name v nothing 0 0
+                                            name flags nothing 0 0
+                                          ~ nothing 0 0
+                                            . nothing 0 0
+                                              name Var 
+typecheck tree: 
+fn(){} fn(name: string): int 0 0
+  name noexport fn(name: string): int 0 0
+  seq nothing 0 0
+    case nothing 0 0
+      name name nothing 0 0
+      seq nothing 0 0
+        label nothing 0 0
+          seq nothing 0 0
+            const 0 string 0 0
+            seq nothing 0 0
+              const * string 0 0
+              seq nothing 0 0
+                const status string 0 0
+          scope nothing 0 0
+            return nothing 0 0
+              const (1) int 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        const (0) int 0 0
+typecheck tree: 
+fn(){} fn(val: list of ref Listnode, k: int): list of ref Listnode 0 0
+  name index fn(val: list of ref Listnode, k: int): list of ref Listnode 0 0
+  seq nothing 0 0
+    for nothing 0 0
+      && nothing 0 0
+        > nothing 0 0
+          name k nothing 0 0
+          const (0) int 0 0
+        != nothing 0 0
+          name val nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          name val nothing 0 0
+          tl nothing 0 0
+            name val nothing 0 0
+        -- nothing 0 0
+          name k nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          name val nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name val nothing 0 0
+            :: nothing 0 0
+              hd nothing 0 0
+                name val nothing 0 0
+              name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name val nothing 0 0
+typecheck tree: 
+fn(){} fn(name: string): list of ref Listnode 0 0
+  name getenv fn(name: string): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name env nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        call nothing 0 0
+          name envstringtoval nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              -> nothing 0 0
+                name env nothing 0 0
+                name getenv nothing 0 0
+              seq nothing 0 0
+                name name nothing 0 0
+typecheck tree: 
+fn(){} fn(v: string): list of ref Listnode 0 0
+  name envstringtoval fn(v: string): list of ref Listnode 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      call nothing 0 0
+        name stringlist2list nothing 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            -> nothing 0 0
+              name str nothing 0 0
+              name unquoted nothing 0 0
+            seq nothing 0 0
+              name v nothing 0 0
+typecheck tree: 
+fn(){} fn(v: string): list of ref Listnode 0 0
+  name XXXenvstringtoval fn(v: string): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        len nothing 0 0
+          name v nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name start nothing 0 0
+        len nothing 0 0
+          name v nothing 0 0
+      seq nothing 0 0
+        vardecl list of ref Listnode 0 0
+          seq nothing 0 0
+        seq nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name i nothing 0 0
+              - nothing 0 0
+                name start nothing 0 0
+                const (1) int 0 0
+            for nothing 0 0
+              >= nothing 0 0
+                name i nothing 0 0
+                const (0) int 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        index nothing 0 0
+                          name v nothing 0 0
+                          name i nothing 0 0
+                        name ENVSEP nothing 0 0
+                      seq nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              name val nothing 0 0
+                              :: nothing 0 0
+                                ref nothing 0 0
+                                  call nothing 0 0
+                                    name Listnode nothing 0 0
+                                    seq nothing 0 0
+                                      name nil polymorphic type 0 0
+                                      seq nothing 0 0
+                                        slice nothing 0 0
+                                          name v nothing 0 0
+                                          seq nothing 0 0
+                                            + nothing 0 0
+                                              name i nothing 0 0
+                                              const (1) int 0 0
+                                            name start nothing 0 0
+                                name val nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name start nothing 0 0
+                                name i nothing 0 0
+                -- nothing 0 0
+                  name i nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              :: nothing 0 0
+                ref nothing 0 0
+                  call nothing 0 0
+                    name Listnode nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        slice nothing 0 0
+                          name v nothing 0 0
+                          seq nothing 0 0
+                            const (0) int 0 0
+                            name start nothing 0 0
+                name val nothing 0 0
+typecheck tree: 
+fn(){} fn(name: string, val: list of ref Listnode) 0 0
+  name setenv fn(name: string, val: list of ref Listnode) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name env nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+    seq nothing 0 0
+      call nothing 0 0
+        -> nothing 0 0
+          name env nothing 0 0
+          name setenv nothing 0 0
+        seq nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name quoted nothing 0 0
+              seq nothing 0 0
+                name val nothing 0 0
+                seq nothing 0 0
+                  const (1) int 0 0
+typecheck tree: 
+fn(){} fn(s: string): int 0 0
+  name containswildchar fn(s: string): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name i nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        < nothing 0 0
+          name i nothing 0 0
+          len nothing 0 0
+            name s nothing 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                && nothing 0 0
+                  == nothing 0 0
+                    index nothing 0 0
+                      name s nothing 0 0
+                      name i nothing 0 0
+                    name GLOB nothing 0 0
+                  < nothing 0 0
+                    name i nothing 0 0
+                    - nothing 0 0
+                      len nothing 0 0
+                        name s nothing 0 0
+                      const (1) int 0 0
+                seq nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      case nothing 0 0
+                        index nothing 0 0
+                          name s nothing 0 0
+                          + nothing 0 0
+                            name i nothing 0 0
+                            const (1) int 0 0
+                        seq nothing 0 0
+                          label nothing 0 0
+                            seq nothing 0 0
+                              const (42) int 0 0
+                              seq nothing 0 0
+                                const (91) int 0 0
+                                seq nothing 0 0
+                                  const (63) int 0 0
+                                  seq nothing 0 0
+                                    name GLOB nothing 0 0
+                            scope nothing 0 0
+                              return nothing 0 0
+                                const (1) int 0 0
+          ++ nothing 0 0
+            name i nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          const (0) int 0 0
+typecheck tree: 
+fn(){} fn(word: string): string 0 0
+  name patquote fn(word: string): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name outword nothing 0 0
+      const  string 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            len nothing 0 0
+              name word nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                case nothing 0 0
+                  index nothing 0 0
+                    name word nothing 0 0
+                    name i nothing 0 0
+                  seq nothing 0 0
+                    label nothing 0 0
+                      seq nothing 0 0
+                        const (91) int 0 0
+                        seq nothing 0 0
+                          const (42) int 0 0
+                          seq nothing 0 0
+                            const (63) int 0 0
+                            seq nothing 0 0
+                              const (92) int 0 0
+                      scope nothing 0 0
+                        = nothing 0 0
+                          index nothing 0 0
+                            name outword nothing 0 0
+                            len nothing 0 0
+                              name outword nothing 0 0
+                          const (92) int 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          name GLOB nothing 0 0
+                        scope nothing 0 0
+                          seq nothing 0 0
+                            seq nothing 0 0
+                              ++ nothing 0 0
+                                name i nothing 0 0
+                              if nothing 0 0
+                                >= nothing 0 0
+                                  name i nothing 0 0
+                                  len nothing 0 0
+                                    name word nothing 0 0
+                                seq nothing 0 0
+                                  return nothing 0 0
+                                    name outword nothing 0 0
+                            if nothing 0 0
+                              && nothing 0 0
+                                && nothing 0 0
+                                  == nothing 0 0
+                                    index nothing 0 0
+                                      name word nothing 0 0
+                                      name i nothing 0 0
+                                    const (91) int 0 0
+                                  < nothing 0 0
+                                    name i nothing 0 0
+                                    - nothing 0 0
+                                      len nothing 0 0
+                                        name word nothing 0 0
+                                      const (1) int 0 0
+                                == nothing 0 0
+                                  index nothing 0 0
+                                    name word nothing 0 0
+                                    + nothing 0 0
+                                      name i nothing 0 0
+                                      const (1) int 0 0
+                                  const (126) int 0 0
+                              seq nothing 0 0
+                                = nothing 0 0
+                                  index nothing 0 0
+                                    name word nothing 0 0
+                                    + nothing 0 0
+                                      name i nothing 0 0
+                                      const (1) int 0 0
+                                  const (94) int 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    index nothing 0 0
+                      name outword nothing 0 0
+                      len nothing 0 0
+                        name outword nothing 0 0
+                    index nothing 0 0
+                      name word nothing 0 0
+                      name i noth
+typecheck tree: 
+fn(){} fn(s: string): string 0 0
+  name deglob fn(s: string): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name j nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            len nothing 0 0
+              name s nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  != nothing 0 0
+                    index nothing 0 0
+                      name s nothing 0 0
+                      name i nothing 0 0
+                    name GLOB nothing 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          != nothing 0 0
+                            name i nothing 0 0
+                            name j nothing 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              index nothing 0 0
+                                name s nothing 0 0
+                                name j nothing 0 0
+                              index nothing 0 0
+                                name s nothing 0 0
+                                name i nothing 0 0
+                        seq nothing 0 0
+                          ++ nothing 0 0
+                            name j nothing 0 0
+            ++ nothing 0 0
+              name i nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name i nothing 0 0
+            name j nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name s nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            slice nothing 0 0
+              name s nothing 0 0
+              seq nothing 0 0
+                const (0) int 0 0
+                name j nothing 0 0
+typecheck tree: 
+fn(){} fn(nl: list of ref Listnode): list of ref Listnode 0 0
+  name glob fn(nl: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    vardecl list of ref Listnode 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name nl nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name n nothing 0 0
+                hd nothing 0 0
+                  name nl nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  call nothing 0 0
+                    name containswildchar nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        name n nothing 0 0
+                        name word nothing 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          name qword nothing 0 0
+                          call nothing 0 0
+                            name patquote nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name n nothing 0 0
+                                name word nothing 0 0
+                        seq nothing 0 0
+                          := nothing 0 0
+                            name files nothing 0 0
+                            call nothing 0 0
+                              -> nothing 0 0
+                                name filepat nothing 0 0
+                                name expand nothing 0 0
+                              seq nothing 0 0
+                                name qword nothing 0 0
+                          seq nothing 0 0
+                            if nothing 0 0
+                              == nothing 0 0
+                                name files nothing 0 0
+                                name nil polymorphic type 0 0
+                              seq nothing 0 0
+                                = nothing 0 0
+                                  name files nothing 0 0
+                                  :: nothing 0 0
+                                    call nothing 0 0
+                                      name deglob nothing 0 0
+                                      seq nothing 0 0
+                                        . nothing 0 0
+                                          name n nothing 0 0
+                                          name word nothing 0 0
+                                    name nil polymorphic type 0 0
+                            seq nothing 0 0
+                              for nothing 0 0
+                                != nothing 0 0
+                                  name files nothing 0 0
+                                  name nil polymorphic type 0 0
+                                seq nothing 0 0
+                                  scope nothing 0 0
+                                    seq nothing 0 0
+                                      = nothing 0 0
+                                        name new nothing 0 0
+                                        :: nothing 0 0
+                                          ref nothing 0 0
+                                            call nothing 0 0
+                                              name Listnode nothing 0 0
+                                              seq nothing 0 0
+                                                name nil polymorphic type 0 0
+                                                seq nothing 0 0
+                                                  hd nothing 0 0
+                                                    name files nothing 0 0
+                                          name new nothing 0 0
+                                      seq nothing 0 0
+                                        = nothing 0 0
+                                          name files nothing 0 0
+                                          tl nothing 0 0
+                                        
+typecheck tree: 
+fn(){} fn(nl: list of ref Listnode): list of string 0 0
+  name list2stringlist fn(nl: list of ref Listnode): list of string 0 0
+  seq nothing 0 0
+    vardecli nothing 0 0
+      vardecl list of string 0 0
+        seq nothing 0 0
+      = nothing 0 0
+        name ret nothing 0 0
+        name nil polymorphic type 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name nl nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              vardecl string 0 0
+                seq nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name el nothing 0 0
+                  hd nothing 0 0
+                    name nl nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    || nothing 0 0
+                      != nothing 0 0
+                        . nothing 0 0
+                          name el nothing 0 0
+                          name word nothing 0 0
+                        name nil polymorphic type 0 0
+                      == nothing 0 0
+                        . nothing 0 0
+                          name el nothing 0 0
+                          name cmd nothing 0 0
+                        name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name newel nothing 0 0
+                        . nothing 0 0
+                          name el nothing 0 0
+                          name word nothing 0 0
+                      = nothing 0 0
+                        . nothing 0 0
+                          name el nothing 0 0
+                          name word nothing 0 0
+                        = nothing 0 0
+                          name newel nothing 0 0
+                          call nothing 0 0
+                            name cmd2string nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name el nothing 0 0
+                                name cmd nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name ret nothing 0 0
+                      :: nothing 0 0
+                        name newel nothing 0 0
+                        name ret nothing 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name nl nothing 0 0
+                        tl nothing 0 0
+                          name nl nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name sl nothing 0 0
+          call nothing 0 0
+            name revstringlist nothing 0 0
+            seq nothing 0 0
+              name ret nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name sl nothing 0 0
+typecheck tree: 
+fn(){} fn(sl: list of string): list of ref Listnode 0 0
+  name stringlist2list fn(sl: list of string): list of ref Listnode 0 0
+  seq nothing 0 0
+    vardecl list of ref Listnode 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name sl nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name ret nothing 0 0
+                :: nothing 0 0
+                  ref nothing 0 0
+                    call nothing 0 0
+                      name Listnode nothing 0 0
+                      seq nothing 0 0
+                        name nil polymorphic type 0 0
+                        seq nothing 0 0
+                          hd nothing 0 0
+                            name sl nothing 0 0
+                  name ret nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name sl nothing 0 0
+                  tl nothing 0 0
+                    name sl nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          call nothing 0 0
+            name revlist nothing 0 0
+            seq nothing 0 0
+              name ret nothing 0 0
+typecheck tree: 
+fn(){} fn(l: list of string): list of string 0 0
+  name revstringlist fn(l: list of string): list of string 0 0
+  seq nothing 0 0
+    vardecl list of string 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name l nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name t nothing 0 0
+                :: nothing 0 0
+                  hd nothing 0 0
+                    name l nothing 0 0
+                  name t nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name l nothing 0 0
+                  tl nothing 0 0
+                    name l nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name t nothing 0 0
+typecheck tree: 
+fn(){} fn(l: list of ref Listnode): list of ref Listnode 0 0
+  name revlist fn(l: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    vardecl list of ref Listnode 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name l nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name t nothing 0 0
+                :: nothing 0 0
+                  hd nothing 0 0
+                    name l nothing 0 0
+                  name t nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name l nothing 0 0
+                  tl nothing 0 0
+                    name l nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name t nothing 0 0
+typecheck tree: 
+fn(){} fn(isassign: int, redir: ref Redir): string 0 0
+  name fdassignstr fn(isassign: int, redir: ref Redir): string 0 0
+  seq nothing 0 0
+    vardecli nothing 0 0
+      vardecl string 0 0
+        seq nothing 0 0
+      = nothing 0 0
+        name l nothing 0 0
+        name nil polymorphic type 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        >= nothing 0 0
+          . nothing 0 0
+            name redir nothing 0 0
+            name fd1 nothing 0 0
+          const (0) int 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name l nothing 0 0
+            cast string 0 0
+              . nothing 0 0
+                name redir nothing 0 0
+                name fd1 nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          name isassign nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                vardecli nothing 0 0
+                  vardecl string 0 0
+                    seq nothing 0 0
+                  = nothing 0 0
+                    name r nothing 0 0
+                    name nil polymorphic type 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    >= nothing 0 0
+                      . nothing 0 0
+                        name redir nothing 0 0
+                        name fd2 nothing 0 0
+                      const (0) int 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        name r nothing 0 0
+                        cast string 0 0
+                          . nothing 0 0
+                            name redir nothing 0 0
+                            name fd2 nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      + nothing 0 0
+                        + nothing 0 0
+                          + nothing 0 0
+                            + nothing 0 0
+                              const [ string 0 0
+                              name l nothing 0 0
+                            const = string 0 0
+                          name r nothing 0 0
+                        const ] string 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            + nothing 0 0
+              + nothing 0 0
+                const [ string 0 0
+                name l nothing 0 0
+              const ] string 0 0
+typecheck tree: 
+fn(){} fn(rtype: int): string 0 0
+  name redirstr fn(rtype: int): string 0 0
+  seq nothing 0 0
+    case nothing 0 0
+      name rtype nothing 0 0
+      seq nothing 0 0
+        label nothing 0 0
+          seq nothing 0 0
+            * nothing 0 0
+            seq nothing 0 0
+              -> nothing 0 0
+                name Sys nothing 0 0
+                name OREAD nothing 0 0
+          scope nothing 0 0
+            return nothing 0 0
+              const < string 0 0
+        seq nothing 0 0
+          label nothing 0 0
+            seq nothing 0 0
+              -> nothing 0 0
+                name Sys nothing 0 0
+                name OWRITE nothing 0 0
+            scope nothing 0 0
+              return nothing 0 0
+                const > string 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                | nothing 0 0
+                  -> nothing 0 0
+                    name Sys nothing 0 0
+                    name OWRITE nothing 0 0
+                  name OAPPEND nothing 0 0
+              scope nothing 0 0
+                return nothing 0 0
+                  const >> string 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  -> nothing 0 0
+                    name Sys nothing 0 0
+                    name ORDWR nothing 0 0
+                scope nothing 0 0
+                  return nothing 0 0
+                    const <> string 0 0
+typecheck tree: 
+fn(){} fn(n: ref Node): string 0 0
+  name cmd2string fn(c: ref Node): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name n nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          const  string 0 0
+    seq nothing 0 0
+      vardecl string 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        case nothing 0 0
+          . nothing 0 0
+            name n nothing 0 0
+            name ntype nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                name n_BLOCK nothing 0 0
+              scope nothing 0 0
+                = nothing 0 0
+                  name s nothing 0 0
+                  + nothing 0 0
+                    + nothing 0 0
+                      const { string 0 0
+                      call nothing 0 0
+                        name cmd2string nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            name n nothing 0 0
+                            name left nothing 0 0
+                    const } string 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  name n_VAR nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name s nothing 0 0
+                      + nothing 0 0
+                        const $ string 0 0
+                        call nothing 0 0
+                          name cmd2string nothing 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              name n nothing 0 0
+                              name left nothing 0 0
+                    if nothing 0 0
+                      != nothing 0 0
+                        . nothing 0 0
+                          name n nothing 0 0
+                          name right nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        += nothing 0 0
+                          name s nothing 0 0
+                          + nothing 0 0
+                            + nothing 0 0
+                              const ( string 0 0
+                              call nothing 0 0
+                                name cmd2string nothing 0 0
+                                seq nothing 0 0
+                                  . nothing 0 0
+                                    name n nothing 0 0
+                                    name right nothing 0 0
+                            const ) string 0 0
+              seq nothing 0 0
+                label nothing 0 0
+                  seq nothing 0 0
+                    name n_SQUASH nothing 0 0
+                  scope nothing 0 0
+                    = nothing 0 0
+                      name s nothing 0 0
+                      + nothing 0 0
+                        const $" string 0 0
+                        call nothing 0 0
+                          name cmd2string nothing 0 0
+                          seq nothing 0 0
+                            . nothing 0 0
+                              name n nothing 0 0
+                              name left nothing 0 0
+                seq nothing 0 0
+                  label nothing 0 0
+                    seq nothing 0 0
+                      name n_COUNT nothing 0 0
+                    scope nothing 0 0
+                      = nothing 0 0
+                        name s nothing 0 0
+                        + nothing 0 0
+                          const $# string 0 0
+                          call nothing 0 0
+                            name cmd2string nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name n nothing 0 0
+                                name left nothing 0 0
+                  seq nothing 0 0
+                    label nothing 0 0
+                      seq nothing 0 0
+                        name n_BQ nothing 0 0
+                      scope nothing 0 0
+  
+typecheck tree: 
+fn(){} fn(s: string, glob: int): string 0 0
+  name quote fn(s: string, glob: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name needquote nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name t nothing 0 0
+        const  string 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name i nothing 0 0
+            const (0) int 0 0
+          for nothing 0 0
+            < nothing 0 0
+              name i nothing 0 0
+              len nothing 0 0
+                name s nothing 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  case nothing 0 0
+                    index nothing 0 0
+                      name s nothing 0 0
+                      name i nothing 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          const (123) int 0 0
+                          seq nothing 0 0
+                            const (125) int 0 0
+                            seq nothing 0 0
+                              const (40) int 0 0
+                              seq nothing 0 0
+                                const (41) int 0 0
+                                seq nothing 0 0
+                                  const (96) int 0 0
+                                  seq nothing 0 0
+                                    const (38) int 0 0
+                                    seq nothing 0 0
+                                      const (59) int 0 0
+                                      seq nothing 0 0
+                                        const (61) int 0 0
+                                        seq nothing 0 0
+                                          const (62) int 0 0
+                                          seq nothing 0 0
+                                            const (60) int 0 0
+                                            seq nothing 0 0
+                                              const (35) int 0 0
+                                              seq nothing 0 0
+                                                const (124) int 0 0
+                                                seq nothing 0 0
+                                                  const (42) int 0 0
+                                                  seq nothing 0 0
+                                                    const (91) int 0 0
+                                                    seq nothing 0 0
+                                                      const (63) int 0 0
+                                                      seq nothing 0 0
+                                                        const (36) int 0 0
+                                                        seq nothing 0 0
+                                                          const (94) int 0 0
+                                                          seq nothing 0 0
+                                                            const (32) int 0 0
+                                                            seq nothing 0 0
+                                                              const (9) int 0 0
+                                                              seq nothing 0 0
+                                                                const (10) int 0 0
+                                                                seq nothing 0 0
+                                                                  const (13) int 0 0
+                        scope nothing 0 0
+                          = nothing 0 0
+                            name needquote nothing 0 0
+                            const (1) int 0 0
+                      seq nothing 0 0
+                        label nothing 0 0
+                          seq nothing 0 0
+                            const (39) int 0 0
+                          scope nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                index nothing 0 0
+                                  name t nothi
+typecheck tree: 
+fn(){} fn(l: list of string, sep: string): string 0 0
+  name squash fn(l: list of string, sep: string): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        name l nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name s nothing 0 0
+        hd nothing 0 0
+          name l nothing 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name l nothing 0 0
+            tl nothing 0 0
+              name l nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name l nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              += nothing 0 0
+                name s nothing 0 0
+                + nothing 0 0
+                  name sep nothing 0 0
+                  hd nothing 0 0
+                    name l nothing 0 0
+              = nothing 0 0
+                name l nothing 0 0
+                tl nothing 0 0
+                  name l nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name s nothing 0 0
+typecheck tree: 
+fn(){} fn(s: string) 0 0
+  name debug fn(s: string) 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      name DEBUG nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name sys nothing 0 0
+            name fprint nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name stderr nothing 0 0
+            seq nothing 0 0
+              const %s
+ string 0 0
+              seq nothing 0 0
+                + nothing 0 0
+                  + nothing 0 0
+                    cast string 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          name sys nothing 0 0
+                          name pctl nothing 0 0
+                        seq nothing 0 0
+                          const (0) int 0 0
+                          seq nothing 0 0
+                            name nil polymorphic type 0 0
+                    const :  string 0 0
+                  name s nothing 0 0
+typecheck tree: 
+fn(){} fn(c: ref Context, nil: Sh): string 0 0
+  name initbuiltin fn(c: ref Context, sh: Sh): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name names nothing 0 0
+      array nothing 0 0
+        nothing nothing 0 0
+        seq nothing 0 0
+          elem nothing 0 0
+            const load string 0 0
+          seq nothing 0 0
+            elem nothing 0 0
+              const unload string 0 0
+            seq nothing 0 0
+              elem nothing 0 0
+                const loaded string 0 0
+              seq nothing 0 0
+                elem nothing 0 0
+                  const builtin string 0 0
+                seq nothing 0 0
+                  elem nothing 0 0
+                    const syncenv string 0 0
+                  seq nothing 0 0
+                    elem nothing 0 0
+                      const whatis string 0 0
+                    seq nothing 0 0
+                      elem nothing 0 0
+                        const run string 0 0
+                      seq nothing 0 0
+                        elem nothing 0 0
+                          const exit string 0 0
+                        seq nothing 0 0
+                          elem nothing 0 0
+                            const @ string 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            len nothing 0 0
+              name names nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name c nothing 0 0
+                name addbuiltin nothing 0 0
+              seq nothing 0 0
+                index nothing 0 0
+                  name names nothing 0 0
+                  name i nothing 0 0
+                seq nothing 0 0
+                  name myselfbuiltin nothing 0 0
+            ++ nothing 0 0
+              name i nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name c nothing 0 0
+            name addsbuiltin nothing 0 0
+          seq nothing 0 0
+            const loaded string 0 0
+            seq nothing 0 0
+              name myselfbuiltin nothing 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            . nothing 0 0
+              name c nothing 0 0
+              name addsbuiltin nothing 0 0
+            seq nothing 0 0
+              const quote string 0 0
+              seq nothing 0 0
+                name myselfbuiltin nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name c nothing 0 0
+                name addsbuiltin nothing 0 0
+              seq nothing 0 0
+                const bquote string 0 0
+                seq nothing 0 0
+                  name myselfbuiltin nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name c nothing 0 0
+                  name addsbuiltin nothing 0 0
+                seq nothing 0 0
+                  const unquote string 0 0
+                  seq nothing 0 0
+                    name myselfbuiltin nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  . nothing 0 0
+                    name c nothing 0 0
+                    name addsbuiltin nothing 0 0
+                  seq nothing 0 0
+                    const builtin string 0 0
+                    seq nothing 0 0
+                      name myselfbuiltin nothing 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(nil: ref Context, nil: Sh, nil: string, nil: int): string 0 0
+  name whatis fn(nil: ref Context, nil: Sh, nil: string, nil: int): string 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, nil: Sh, argv: list of ref Listnode): list of ref Listnode 0 0
+  name runsbuiltin fn(c: ref Context, sh: Sh, cmd: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    case nothing 0 0
+      . nothing 0 0
+        hd nothing 0 0
+          name argv nothing 0 0
+        name word nothing 0 0
+      seq nothing 0 0
+        label nothing 0 0
+          seq nothing 0 0
+            const loaded string 0 0
+          scope nothing 0 0
+            return nothing 0 0
+              call nothing 0 0
+                name sbuiltin_loaded nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    name argv nothing 0 0
+        seq nothing 0 0
+          label nothing 0 0
+            seq nothing 0 0
+              const bquote string 0 0
+            scope nothing 0 0
+              return nothing 0 0
+                call nothing 0 0
+                  name sbuiltin_quote nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      name argv nothing 0 0
+                      seq nothing 0 0
+                        const (0) int 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                const quote string 0 0
+              scope nothing 0 0
+                return nothing 0 0
+                  call nothing 0 0
+                    name sbuiltin_quote nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        name argv nothing 0 0
+                        seq nothing 0 0
+                          const (1) int 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  const unquote string 0 0
+                scope nothing 0 0
+                  return nothing 0 0
+                    call nothing 0 0
+                      name sbuiltin_unquote nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          name argv nothing 0 0
+              seq nothing 0 0
+                label nothing 0 0
+                  seq nothing 0 0
+                    const builtin string 0 0
+                  scope nothing 0 0
+                    return nothing 0 0
+                      call nothing 0 0
+                        name sbuiltin_builtin nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            name argv nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, nil: Sh, args: list of ref Listnode, lseq: int): string 0 0
+  name runbuiltin fn(c: ref Context, sh: Sh, cmd: list of ref Listnode, last: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name status nothing 0 0
+      const  string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name name nothing 0 0
+        . nothing 0 0
+          hd nothing 0 0
+            name args nothing 0 0
+          name word nothing 0 0
+      seq nothing 0 0
+        case nothing 0 0
+          name name nothing 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                const load string 0 0
+              scope nothing 0 0
+                = nothing 0 0
+                  name status nothing 0 0
+                  call nothing 0 0
+                    name builtin_load nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        name args nothing 0 0
+                        seq nothing 0 0
+                          name lseq nothing 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  const loaded string 0 0
+                scope nothing 0 0
+                  = nothing 0 0
+                    name status nothing 0 0
+                    call nothing 0 0
+                      name builtin_loaded nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          name args nothing 0 0
+                          seq nothing 0 0
+                            name lseq nothing 0 0
+              seq nothing 0 0
+                label nothing 0 0
+                  seq nothing 0 0
+                    const unload string 0 0
+                  scope nothing 0 0
+                    = nothing 0 0
+                      name status nothing 0 0
+                      call nothing 0 0
+                        name builtin_unload nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            name args nothing 0 0
+                            seq nothing 0 0
+                              name lseq nothing 0 0
+                seq nothing 0 0
+                  label nothing 0 0
+                    seq nothing 0 0
+                      const builtin string 0 0
+                    scope nothing 0 0
+                      = nothing 0 0
+                        name status nothing 0 0
+                        call nothing 0 0
+                          name builtin_builtin nothing 0 0
+                          seq nothing 0 0
+                            name ctxt nothing 0 0
+                            seq nothing 0 0
+                              name args nothing 0 0
+                              seq nothing 0 0
+                                name lseq nothing 0 0
+                  seq nothing 0 0
+                    label nothing 0 0
+                      seq nothing 0 0
+                        const whatis string 0 0
+                      scope nothing 0 0
+                        = nothing 0 0
+                          name status nothing 0 0
+                          call nothing 0 0
+                            name builtin_whatis nothing 0 0
+                            seq nothing 0 0
+                              name ctxt nothing 0 0
+                              seq nothing 0 0
+                                name args nothing 0 0
+                                seq nothing 0 0
+                                  name lseq nothing 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          const run string 0 0
+                        scope nothing 0 0
+                          = nothing 0 0
+                            name status nothing 0 0
+                            call nothing 0 0
+                              name builtin_run nothing 0 0
+            
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, nil: list of ref Listnode): list of ref Listnode 0 0
+  name sbuiltin_loaded fn(ctxt: ref Context, nil: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    vardecl list of ref Listnode 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name bl nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name bmods nothing 0 0
+        for nothing 0 0
+          != nothing 0 0
+            name bl nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name name nothing 0 0
+                      seq nothing 0 0
+                        name nil polymorphic type 0 0
+                  hd nothing 0 0
+                    name bl nothing 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name v nothing 0 0
+                    :: nothing 0 0
+                      ref nothing 0 0
+                        call nothing 0 0
+                          name Listnode nothing 0 0
+                          seq nothing 0 0
+                            name nil polymorphic type 0 0
+                            seq nothing 0 0
+                              name name nothing 0 0
+                      name v nothing 0 0
+            = nothing 0 0
+              name bl nothing 0 0
+              tl nothing 0 0
+                name bl nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name v nothing 0 0
+typecheck tree: 
+fn(){} fn(nil: ref Context, argv: list of ref Listnode, quoteblocks: int): list of ref Listnode 0 0
+  name sbuiltin_quote fn(nil: ref Context, argv: list of ref Listnode, quoteblocks: int): list of ref Listnode 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      :: nothing 0 0
+        ref nothing 0 0
+          call nothing 0 0
+            name Listnode nothing 0 0
+            seq nothing 0 0
+              name nil polymorphic type 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name quoted nothing 0 0
+                  seq nothing 0 0
+                    tl nothing 0 0
+                      name argv nothing 0 0
+                    seq nothing 0 0
+                      name quoteblocks nothing 0 0
+        name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode): list of ref Listnode 0 0
+  name sbuiltin_builtin fn(ctxt: ref Context, args: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          name args nothing 0 0
+          name nil polymorphic type 0 0
+        == nothing 0 0
+          tl nothing 0 0
+            name args nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const builtin command [args ...] string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name name nothing 0 0
+        . nothing 0 0
+          hd nothing 0 0
+            tl nothing 0 0
+              name args nothing 0 0
+          name word nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          tuple nothing 0 0
+            seq nothing 0 0
+              name nil polymorphic type 0 0
+              seq nothing 0 0
+                name mods nothing 0 0
+          call nothing 0 0
+            name findbuiltin nothing 0 0
+            seq nothing 0 0
+              . nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name env nothing 0 0
+                name sbuiltins nothing 0 0
+              seq nothing 0 0
+                name name nothing 0 0
+        seq nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name mods nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  hd nothing 0 0
+                    name mods nothing 0 0
+                  name myselfbuiltin nothing 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    call nothing 0 0
+                      -> nothing 0 0
+                        hd nothing 0 0
+                          name mods nothing 0 0
+                        name runsbuiltin nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          name myself nothing 0 0
+                          seq nothing 0 0
+                            tl nothing 0 0
+                              name args nothing 0 0
+              = nothing 0 0
+                name mods nothing 0 0
+                tl nothing 0 0
+                  name mods nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name fail nothing 0 0
+              seq nothing 0 0
+                const builtin not found string 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name sprint nothing 0 0
+                    seq nothing 0 0
+                      const sh: builtin %s not found string 0 0
+                      seq nothing 0 0
+                        name name nothing 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, argv: list of ref Listnode): list of ref Listnode 0 0
+  name sbuiltin_unquote fn(ctxt: ref Context, argv: list of ref Listnode): list of ref Listnode 0 0
+  seq nothing 0 0
+    = nothing 0 0
+      name argv nothing 0 0
+      tl nothing 0 0
+        name argv nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        || nothing 0 0
+          == nothing 0 0
+            name argv nothing 0 0
+            name nil polymorphic type 0 0
+          != nothing 0 0
+            tl nothing 0 0
+              name argv nothing 0 0
+            name nil polymorphic type 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            name builtinusage nothing 0 0
+            seq nothing 0 0
+              name ctxt nothing 0 0
+              seq nothing 0 0
+                const unquote arg string 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name arg nothing 0 0
+          . nothing 0 0
+            hd nothing 0 0
+              name argv nothing 0 0
+            name word nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            && nothing 0 0
+              == nothing 0 0
+                name arg nothing 0 0
+                name nil polymorphic type 0 0
+              != nothing 0 0
+                . nothing 0 0
+                  hd nothing 0 0
+                    name argv nothing 0 0
+                  name cmd nothing 0 0
+                name nil polymorphic type 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name arg nothing 0 0
+                call nothing 0 0
+                  name cmd2string nothing 0 0
+                  seq nothing 0 0
+                    . nothing 0 0
+                      hd nothing 0 0
+                        name argv nothing 0 0
+                      name cmd nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              call nothing 0 0
+                name stringlist2list nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name str nothing 0 0
+                      name unquoted nothing 0 0
+                    seq nothing 0 0
+                      name arg nothing 0 0
+typecheck tree: 
+fn(){} fn(): Shellbuiltin 0 0
+  name getself fn(): Shellbuiltin 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      name myselfbuiltin nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, s: string) 0 0
+  name builtinusage fn(ctxt: ref Context, s: string) 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      . nothing 0 0
+        name ctxt nothing 0 0
+        name fail nothing 0 0
+      seq nothing 0 0
+        const usage string 0 0
+        seq nothing 0 0
+          + nothing 0 0
+            const sh: usage:  string 0 0
+            name s nothing 0 0
+typecheck tree: 
+fn(){} fn(nil: ref Context, nil: list of ref Listnode, nil: int): string 0 0
+  name builtin_exit fn(nil: ref Context, nil: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    exit nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  name builtin_subsh fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        tl nothing 0 0
+          name args nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name startchan nothing 0 0
+        chan chan of (int, ref Expropagate) 0 0
+      seq nothing 0 0
+        spawn nothing 0 0
+          call nothing 0 0
+            name runasync nothing 0 0
+            seq nothing 0 0
+              name ctxt nothing 0 0
+              seq nothing 0 0
+                const (0) int 0 0
+                seq nothing 0 0
+                  tl nothing 0 0
+                    name args nothing 0 0
+                  seq nothing 0 0
+                    ref nothing 0 0
+                      name Redirlist nothing 0 0
+                    seq nothing 0 0
+                      name startchan nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                name exepid nothing 0 0
+                seq nothing 0 0
+                  name exprop nothing 0 0
+            <- nothing 0 0
+              name startchan nothing 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name status nothing 0 0
+              call nothing 0 0
+                name waitfor nothing 0 0
+                seq nothing 0 0
+                  name ctxt nothing 0 0
+                  seq nothing 0 0
+                    :: nothing 0 0
+                      name exepid nothing 0 0
+                      name nil polymorphic type 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  . nothing 0 0
+                    name exprop nothing 0 0
+                    name name nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  raise nothing 0 0
+                    . nothing 0 0
+                      name exprop nothing 0 0
+                      name name nothing 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name status nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, nil: list of ref Listnode, nil: int): string 0 0
+  name builtin_loaded fn(ctxt: ref Context, nil: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name b nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name builtins nothing 0 0
+    seq nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name i nothing 0 0
+          const (0) int 0 0
+        for nothing 0 0
+          < nothing 0 0
+            name i nothing 0 0
+            . nothing 0 0
+              name b nothing 0 0
+              name n nothing 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name name nothing 0 0
+                      seq nothing 0 0
+                        name bmods nothing 0 0
+                  index nothing 0 0
+                    . nothing 0 0
+                      name b nothing 0 0
+                      name ba nothing 0 0
+                    name i nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name print nothing 0 0
+                    seq nothing 0 0
+                      const %s	%s
+ string 0 0
+                      seq nothing 0 0
+                        name name nothing 0 0
+                        seq nothing 0 0
+                          call nothing 0 0
+                            name modname nothing 0 0
+                            seq nothing 0 0
+                              name ctxt nothing 0 0
+                              seq nothing 0 0
+                                hd nothing 0 0
+                                  name bmods nothing 0 0
+            ++ nothing 0 0
+              name i nothing 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          name b nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name ctxt nothing 0 0
+              name env nothing 0 0
+            name sbuiltins nothing 0 0
+        seq nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name i nothing 0 0
+              const (0) int 0 0
+            for nothing 0 0
+              < nothing 0 0
+                name i nothing 0 0
+                . nothing 0 0
+                  name b nothing 0 0
+                  name n nothing 0 0
+              seq nothing 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      tuple nothing 0 0
+                        seq nothing 0 0
+                          name name nothing 0 0
+                          seq nothing 0 0
+                            name bmods nothing 0 0
+                      index nothing 0 0
+                        . nothing 0 0
+                          name b nothing 0 0
+                          name ba nothing 0 0
+                        name i nothing 0 0
+                    seq nothing 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          name sys nothing 0 0
+                          name print nothing 0 0
+                        seq nothing 0 0
+                          const ${%s}	%s
+ string 0 0
+                          seq nothing 0 0
+                            name name nothing 0 0
+                            seq nothing 0 0
+                              call nothing 0 0
+                                name modname nothing 0 0
+                                seq nothing 0 0
+                                  name ctxt nothing 0 0
+                                  seq nothing 0 0
+                                    hd nothing 0 0
+                                      name bmods nothing 0 0
+                ++ nothing 0 0
+                  name i nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  name builtin_load fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          tl nothing 0 0
+            name args nothing 0 0
+          name nil polymorphic type 0 0
+        == nothing 0 0
+          . nothing 0 0
+            hd nothing 0 0
+              tl nothing 0 0
+                name args nothing 0 0
+            name word nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const load path... string 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        name args nothing 0 0
+        tl nothing 0 0
+          name args nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name args nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              name builtinusage nothing 0 0
+              seq nothing 0 0
+                name ctxt nothing 0 0
+                seq nothing 0 0
+                  const load path... string 0 0
+        seq nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name args nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    name s nothing 0 0
+                    call nothing 0 0
+                      name loadmodule nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            hd nothing 0 0
+                              name args nothing 0 0
+                            name word nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      != nothing 0 0
+                        name s nothing 0 0
+                        name nil polymorphic type 0 0
+                      seq nothing 0 0
+                        raise nothing 0 0
+                          + nothing 0 0
+                            const fail: string 0 0
+                            name s nothing 0 0
+              = nothing 0 0
+                name args nothing 0 0
+                tl nothing 0 0
+                  name args nothing 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  name builtin_unload fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        tl nothing 0 0
+          name args nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const unload path... string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name status nothing 0 0
+        const  string 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name args nothing 0 0
+            tl nothing 0 0
+              name args nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name args nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  := nothing 0 0
+                    name s nothing 0 0
+                    call nothing 0 0
+                      name unloadmodule nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            hd nothing 0 0
+                              name args nothing 0 0
+                            name word nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name status nothing 0 0
+                    name s nothing 0 0
+              = nothing 0 0
+                name args nothing 0 0
+                tl nothing 0 0
+                  name args nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name status nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  name builtin_run fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      || nothing 0 0
+        == nothing 0 0
+          tl nothing 0 0
+            name args nothing 0 0
+          name nil polymorphic type 0 0
+        == nothing 0 0
+          . nothing 0 0
+            hd nothing 0 0
+              tl nothing 0 0
+                name args nothing 0 0
+            name word nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const run path string 0 0
+    seq nothing 0 0
+      call nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name push nothing 0 0
+      seq nothing 0 0
+        exstat nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name ctxt nothing 0 0
+                  name setoptions nothing 0 0
+                seq nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name INTERACTIVE nothing 0 0
+                  seq nothing 0 0
+                    const (0) int 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name runscript nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        hd nothing 0 0
+                          tl nothing 0 0
+                            name args nothing 0 0
+                        name word nothing 0 0
+                      seq nothing 0 0
+                        tl nothing 0 0
+                          tl nothing 0 0
+                            name args nothing 0 0
+                        seq nothing 0 0
+                          const (1) int 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name pop nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      name nil polymorphic type 0 0
+          except nothing 0 0
+            name e nothing 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  const fail:* string 0 0
+                scope nothing 0 0
+                  seq nothing 0 0
+                    call nothing 0 0
+                      . nothing 0 0
+                        name ctxt nothing 0 0
+                        name pop nothing 0 0
+                    return nothing 0 0
+                      call nothing 0 0
+                        name failurestatus nothing 0 0
+                        seq nothing 0 0
+                          name e nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  name builtin_whatis fn(ctxt: ref Context, args: list of ref Listnode, nil: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      < nothing 0 0
+        len nothing 0 0
+          name args nothing 0 0
+        const (2) int 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const whatis name ... string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name err nothing 0 0
+        const  string 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            name args nothing 0 0
+            tl nothing 0 0
+              name args nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name args nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  := nothing 0 0
+                    name e nothing 0 0
+                    call nothing 0 0
+                      name whatisit nothing 0 0
+                      seq nothing 0 0
+                        name ctxt nothing 0 0
+                        seq nothing 0 0
+                          hd nothing 0 0
+                            name args nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    name err nothing 0 0
+                    name e nothing 0 0
+              = nothing 0 0
+                name args nothing 0 0
+                tl nothing 0 0
+                  name args nothing 0 0
+        seq nothing 0 0
+          return nothing 0 0
+            name err nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, el: ref Listnode): string 0 0
+  name whatisit fn(ctxt: ref Context, el: ref Listnode): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      != nothing 0 0
+        . nothing 0 0
+          name el nothing 0 0
+          name cmd nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            call nothing 0 0
+              -> nothing 0 0
+                name sys nothing 0 0
+                name print nothing 0 0
+              seq nothing 0 0
+                const %s
+ string 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name cmd2string nothing 0 0
+                    seq nothing 0 0
+                      . nothing 0 0
+                        name el nothing 0 0
+                        name cmd nothing 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                name nil polymorphic type 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name found nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name name nothing 0 0
+          . nothing 0 0
+            name el nothing 0 0
+            name word nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            && nothing 0 0
+              != nothing 0 0
+                name name nothing 0 0
+                name nil polymorphic type 0 0
+              == nothing 0 0
+                index nothing 0 0
+                  name name nothing 0 0
+                  const (0) int 0 0
+                const (123) int 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name print nothing 0 0
+                    seq nothing 0 0
+                      const %s
+ string 0 0
+                      seq nothing 0 0
+                        name name nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      nothing nothing 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              == nothing 0 0
+                name name nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name nil polymorphic type 0 0
+            seq nothing 0 0
+              vardecl string 0 0
+                seq nothing 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name val nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name get nothing 0 0
+                    seq nothing 0 0
+                      name name nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    != nothing 0 0
+                      name val nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      scope nothing 0 0
+                        seq nothing 0 0
+                          ++ nothing 0 0
+                            name found nothing 0 0
+                          seq nothing 0 0
+                            += nothing 0 0
+                              name w nothing 0 0
+                              call nothing 0 0
+                                -> nothing 0 0
+                                  name sys nothing 0 0
+                                  name sprint nothing 0 0
+                                seq nothing 0 0
+                                  const %s=%s
+ string 0 0
+                                  seq nothing 0 0
+                                    call nothing 0 0
+                                      name quote nothing 0 0
+                                      seq nothing 0 0
+                                        name name nothing 0 0
+                                        seq not
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  name builtin_builtin fn(ctxt: ref Context, args: list of ref Listnode, last: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      < nothing 0 0
+        len nothing 0 0
+          name args nothing 0 0
+        const (2) int 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          name builtinusage nothing 0 0
+          seq nothing 0 0
+            name ctxt nothing 0 0
+            seq nothing 0 0
+              const builtin command [args ...] string 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name name nothing 0 0
+        . nothing 0 0
+          hd nothing 0 0
+            tl nothing 0 0
+              name args nothing 0 0
+          name word nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          || nothing 0 0
+            == nothing 0 0
+              name name nothing 0 0
+              name nil polymorphic type 0 0
+            == nothing 0 0
+              index nothing 0 0
+                name name nothing 0 0
+                const (0) int 0 0
+              const (123) int 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                call nothing 0 0
+                  name diagnostic nothing 0 0
+                  seq nothing 0 0
+                    name ctxt nothing 0 0
+                    seq nothing 0 0
+                      + nothing 0 0
+                        name name nothing 0 0
+                        const  not found string 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    const not found string 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            tuple nothing 0 0
+              seq nothing 0 0
+                name nil polymorphic type 0 0
+                seq nothing 0 0
+                  name mods nothing 0 0
+            call nothing 0 0
+              name findbuiltin nothing 0 0
+              seq nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name builtins nothing 0 0
+                seq nothing 0 0
+                  name name nothing 0 0
+          seq nothing 0 0
+            for nothing 0 0
+              != nothing 0 0
+                name mods nothing 0 0
+                name nil polymorphic type 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    hd nothing 0 0
+                      name mods nothing 0 0
+                    name myselfbuiltin nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      call nothing 0 0
+                        -> nothing 0 0
+                          hd nothing 0 0
+                            name mods nothing 0 0
+                          name runbuiltin nothing 0 0
+                        seq nothing 0 0
+                          name ctxt nothing 0 0
+                          seq nothing 0 0
+                            name myself nothing 0 0
+                            seq nothing 0 0
+                              tl nothing 0 0
+                                name args nothing 0 0
+                              seq nothing 0 0
+                                name last nothing 0 0
+                = nothing 0 0
+                  name mods nothing 0 0
+                  tl nothing 0 0
+                    name mods nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                & nothing 0 0
+                  call nothing 0 0
+                    . nothing 0 0
+                      name ctxt nothing 0 0
+                      name options nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name EXECPRINT nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    -> nothing 0 0
+                      name sys nothing 0 0
+                      name fprint nothing 0 0
+                    seq nothing 0 0
+                      
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, mod: Shellbuiltin): string 0 0
+  name modname fn(ctxt: ref Context, mod: Shellbuiltin): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name ml nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name bmods nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name ml nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                tuple nothing 0 0
+                  seq nothing 0 0
+                    name bname nothing 0 0
+                    seq nothing 0 0
+                      name bmod nothing 0 0
+                hd nothing 0 0
+                  name ml nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    name bmod nothing 0 0
+                    name mod nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      name bname nothing 0 0
+          = nothing 0 0
+            name ml nothing 0 0
+            tl nothing 0 0
+              name ml nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          const builtin string 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, name: string): string 0 0
+  name loadmodule fn(ctxt: ref Context, name: string): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name bl nothing 0 0
+      . nothing 0 0
+        . nothing 0 0
+          name ctxt nothing 0 0
+          name env nothing 0 0
+        name bmods nothing 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name bl nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                tuple nothing 0 0
+                  seq nothing 0 0
+                    name bname nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+                hd nothing 0 0
+                  name bl nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    name bname nothing 0 0
+                    name name nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      name nil polymorphic type 0 0
+          = nothing 0 0
+            name bl nothing 0 0
+            tl nothing 0 0
+              name bl nothing 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name path nothing 0 0
+          name name nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            || nothing 0 0
+              < nothing 0 0
+                len nothing 0 0
+                  name path nothing 0 0
+                const (4) int 0 0
+              != nothing 0 0
+                slice nothing 0 0
+                  name path nothing 0 0
+                  seq nothing 0 0
+                    - nothing 0 0
+                      len nothing 0 0
+                        name path nothing 0 0
+                      const (4) int 0 0
+                    nothing nothing 0 0
+                const .dis string 0 0
+            seq nothing 0 0
+              += nothing 0 0
+                name path nothing 0 0
+                const .dis string 0 0
+          seq nothing 0 0
+            if nothing 0 0
+              && nothing 0 0
+                != nothing 0 0
+                  index nothing 0 0
+                    name path nothing 0 0
+                    const (0) int 0 0
+                  const (47) int 0 0
+                != nothing 0 0
+                  slice nothing 0 0
+                    name path nothing 0 0
+                    seq nothing 0 0
+                      const (0) int 0 0
+                      const (2) int 0 0
+                  const ./ string 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name path nothing 0 0
+                  + nothing 0 0
+                    + nothing 0 0
+                      name BUILTINPATH nothing 0 0
+                      const / string 0 0
+                    name path nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name mod nothing 0 0
+                load Shellbuiltin 0 0
+                  name path nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  == nothing 0 0
+                    name mod nothing 0 0
+                    name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          name diagnostic nothing 0 0
+                          seq nothing 0 0
+                            name ctxt nothing 0 0
+                            seq nothing 0 0
+                              call nothing 0 0
+                                -> nothing 0 0
+                                  name sys nothing 0 0
+                                  name sprint nothing 0 0
+                                seq nothing 0 0
+                                  const load: cannot load %s: %r string 0 0
+                                  seq nothing 0 0
+                                    name path nothing 0 0
+                        seq nothing 0 0
+          
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, name: string): string 0 0
+  name unloadmodule fn(ctxt: ref Context, name: string): string 0 0
+  seq nothing 0 0
+    vardecl list of (string, Shellbuiltin) 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      vardecl Shellbuiltin 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name cl nothing 0 0
+            . nothing 0 0
+              . nothing 0 0
+                name ctxt nothing 0 0
+                name env nothing 0 0
+              name bmods nothing 0 0
+          for nothing 0 0
+            != nothing 0 0
+              name cl nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name bname nothing 0 0
+                        seq nothing 0 0
+                          name bmod nothing 0 0
+                    hd nothing 0 0
+                      name cl nothing 0 0
+                  seq nothing 0 0
+                    if nothing 0 0
+                      == nothing 0 0
+                        name bname nothing 0 0
+                        name name nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          name mod nothing 0 0
+                          name bmod nothing 0 0
+                        = nothing 0 0
+                          name bl nothing 0 0
+                          :: nothing 0 0
+                            hd nothing 0 0
+                              name cl nothing 0 0
+                            name bl nothing 0 0
+              = nothing 0 0
+                name cl nothing 0 0
+                tl nothing 0 0
+                  name cl nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              name mod nothing 0 0
+              name nil polymorphic type 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  call nothing 0 0
+                    name diagnostic nothing 0 0
+                    seq nothing 0 0
+                      name ctxt nothing 0 0
+                      seq nothing 0 0
+                        call nothing 0 0
+                          -> nothing 0 0
+                            name sys nothing 0 0
+                            name sprint nothing 0 0
+                          seq nothing 0 0
+                            const module %s not found string 0 0
+                            seq nothing 0 0
+                              name name nothing 0 0
+                  seq nothing 0 0
+                    return nothing 0 0
+                      const not found string 0 0
+          seq nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                . nothing 0 0
+                  . nothing 0 0
+                    name ctxt nothing 0 0
+                    name env nothing 0 0
+                  name bmods nothing 0 0
+                name nil polymorphic type 0 0
+              for nothing 0 0
+                != nothing 0 0
+                  name bl nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  = nothing 0 0
+                    . nothing 0 0
+                      . nothing 0 0
+                        name ctxt nothing 0 0
+                        name env nothing 0 0
+                      name bmods nothing 0 0
+                    :: nothing 0 0
+                      hd nothing 0 0
+                        name bl nothing 0 0
+                      . nothing 0 0
+                        . nothing 0 0
+                          name ctxt nothing 0 0
+                          name env nothing 0 0
+                        name bmods nothing 0 0
+                  = nothing 0 0
+                    name bl nothing 0 0
+                    tl nothing 0 0
+                      name bl nothing 0 0
+            seq nothing 0 0
+              call nothing 0 0
+
+typecheck tree: 
+fn(){} fn(s: (int, Sys->Dir), mode: int): int 0 0
+  name executable fn(s: (int, Sys->Dir), mode: int): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      tuple nothing 0 0
+        seq nothing 0 0
+          name ok nothing 0 0
+          seq nothing 0 0
+            name info nothing 0 0
+      name s nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        && nothing 0 0
+          && nothing 0 0
+            != nothing 0 0
+              name ok nothing 0 0
+              - nothing 0 0
+                const (1) int 0 0
+            == nothing 0 0
+              & nothing 0 0
+                . nothing 0 0
+                  name info nothing 0 0
+                  name mode nothing 0 0
+                -> nothing 0 0
+                  name Sys nothing 0 0
+                  name DMDIR nothing 0 0
+              const (0) int 0 0
+          != nothing 0 0
+            & nothing 0 0
+              . nothing 0 0
+                name info nothing 0 0
+                name mode nothing 0 0
+              name mode nothing 0 0
+            const (0) int 0 0
+typecheck tree: 
+fn(){} fn(val: list of ref Listnode, quoteblocks: int): string 0 0
+  name quoted fn(val: list of ref Listnode, quoteblocks: int): string 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name s nothing 0 0
+      const  string 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        != nothing 0 0
+          name val nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name el nothing 0 0
+                hd nothing 0 0
+                  name val nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  || nothing 0 0
+                    == nothing 0 0
+                      . nothing 0 0
+                        name el nothing 0 0
+                        name cmd nothing 0 0
+                      name nil polymorphic type 0 0
+                    && nothing 0 0
+                      name quoteblocks nothing 0 0
+                      != nothing 0 0
+                        . nothing 0 0
+                          name el nothing 0 0
+                          name word nothing 0 0
+                        name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    += nothing 0 0
+                      name s nothing 0 0
+                      call nothing 0 0
+                        name quote nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            name el nothing 0 0
+                            name word nothing 0 0
+                          seq nothing 0 0
+                            const (0) int 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          name cmd nothing 0 0
+                          call nothing 0 0
+                            name cmd2string nothing 0 0
+                            seq nothing 0 0
+                              . nothing 0 0
+                                name el nothing 0 0
+                                name cmd nothing 0 0
+                        seq nothing 0 0
+                          if nothing 0 0
+                            name quoteblocks nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name cmd nothing 0 0
+                                call nothing 0 0
+                                  name quote nothing 0 0
+                                  seq nothing 0 0
+                                    name cmd nothing 0 0
+                                    seq nothing 0 0
+                                      const (0) int 0 0
+                          seq nothing 0 0
+                            += nothing 0 0
+                              name s nothing 0 0
+                              name cmd nothing 0 0
+                seq nothing 0 0
+                  if nothing 0 0
+                    != nothing 0 0
+                      tl nothing 0 0
+                        name val nothing 0 0
+                      name nil polymorphic type 0 0
+                    seq nothing 0 0
+                      = nothing 0 0
+                        index nothing 0 0
+                          name s nothing 0 0
+                          len nothing 0 0
+                            name s nothing 0 0
+                        const (32) int 0 0
+          = nothing 0 0
+            name val nothing 0 0
+            tl nothing 0 0
+              name val nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name s nothing 0 0
+typecheck tree: 
+fn(){} fn(ctxt: ref Context, val: string): string 0 0
+  name setstatus fn(ctxt: ref Context, val: string): string 0 0
+  seq nothing 0 0
+    call nothing 0 0
+      . nothing 0 0
+        name ctxt nothing 0 0
+        name setlocal nothing 0 0
+      seq nothing 0 0
+        const status string 0 0
+        seq nothing 0 0
+          :: nothing 0 0
+            ref nothing 0 0
+              call nothing 0 0
+                name Listnode nothing 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    name val nothing 0 0
+            name nil polymorphic type 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        name val nothing 0 0
+typecheck tree: 
+fn(){} fn(l: ref YYLEX, prompt: string, showline: int): (ref Node, string) 0 0
+  name doparse fn(l: ref YYLEX, prompt: string, showline: int): (ref Node, string) 0 0
+  seq nothing 0 0
+    = nothing 0 0
+      . nothing 0 0
+        name l nothing 0 0
+        name prompt nothing 0 0
+      name prompt nothing 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        . nothing 0 0
+          name l nothing 0 0
+          name err nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          . nothing 0 0
+            . nothing 0 0
+              name l nothing 0 0
+              name lval nothing 0 0
+            name node nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          call nothing 0 0
+            name yyparse nothing 0 0
+            seq nothing 0 0
+              name l nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                name l nothing 0 0
+                name lastnl nothing 0 0
+              const (0) int 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                != nothing 0 0
+                  . nothing 0 0
+                    name l nothing 0 0
+                    name err nothing 0 0
+                  name nil polymorphic type 0 0
+                seq nothing 0 0
+                  scope nothing 0 0
+                    seq nothing 0 0
+                      vardecl string 0 0
+                        seq nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          == nothing 0 0
+                            . nothing 0 0
+                              name l nothing 0 0
+                              name err nothing 0 0
+                            name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            = nothing 0 0
+                              . nothing 0 0
+                                name l nothing 0 0
+                                name err nothing 0 0
+                              const unknown error string 0 0
+                        seq nothing 0 0
+                          if nothing 0 0
+                            && nothing 0 0
+                              > nothing 0 0
+                                . nothing 0 0
+                                  name l nothing 0 0
+                                  name errline nothing 0 0
+                                const (0) int 0 0
+                              name showline nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                name s nothing 0 0
+                                call nothing 0 0
+                                  -> nothing 0 0
+                                    name sys nothing 0 0
+                                    name sprint nothing 0 0
+                                  seq nothing 0 0
+                                    const %s:%d: %s string 0 0
+                                    seq nothing 0 0
+                                      . nothing 0 0
+                                        name l nothing 0 0
+                                        name path nothing 0 0
+                                      seq nothing 0 0
+                                        . nothing 0 0
+                                          name l nothing 0 0
+                                          name errline nothing 0 0
+                                        seq nothing 0 0
+                                          . nothing 0 0
+                                            name l nothing 0 0
+                                            name err nothing 0 0
+                              = nothing 0 0
+                                name s nothing 0 0
+                                + nothing 0 0
+                                  + nothing 0 0
+                                    . nothing 0 0
+                                      name l nothing 0 0
+                                      name path nothing 0 0
+                                    const : parse 
+typecheck tree: 
+fn(){} fn(s: string): ref YYLEX 0 0
+  . fn(s: string): ref YYLEX 0 0
+    name YYLEX YYLEX 0 0
+    name initstring nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name ret nothing 0 0
+      ref nothing 0 0
+        name blanklex nothing 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        . nothing 0 0
+          name ret nothing 0 0
+          name s nothing 0 0
+        name s nothing 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          . nothing 0 0
+            name ret nothing 0 0
+            name path nothing 0 0
+          const internal string 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            . nothing 0 0
+              name ret nothing 0 0
+              name strpos nothing 0 0
+            const (0) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name ret nothing 0 0
+typecheck tree: 
+fn(){} fn(fd: ref Sys->FD, path: string): ref YYLEX 0 0
+  . fn(fd: ref Sys->FD, path: string): ref YYLEX 0 0
+    name YYLEX YYLEX 0 0
+    name initfile nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name lex nothing 0 0
+      ref nothing 0 0
+        name blanklex nothing 0 0
+    seq nothing 0 0
+      = nothing 0 0
+        . nothing 0 0
+          name lex nothing 0 0
+          name f nothing 0 0
+        call nothing 0 0
+          -> nothing 0 0
+            name bufio nothing 0 0
+            name fopen nothing 0 0
+          seq nothing 0 0
+            name fd nothing 0 0
+            seq nothing 0 0
+              -> nothing 0 0
+                name bufio nothing 0 0
+                name OREAD nothing 0 0
+      seq nothing 0 0
+        = nothing 0 0
+          . nothing 0 0
+            name lex nothing 0 0
+            name path nothing 0 0
+          name path nothing 0 0
+        seq nothing 0 0
+          = nothing 0 0
+            . nothing 0 0
+              name lex nothing 0 0
+              name cbuf nothing 0 0
+            array array of int 0 0
+              const (2) int 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                name lex nothing 0 0
+                name linenum nothing 0 0
+              const (1) int 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                . nothing 0 0
+                  name lex nothing 0 0
+                  name prompt nothing 0 0
+                const  string 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  name lex nothing 0 0
+typecheck tree: 
+fn(){} fn(l: self ref YYLEX, s: string) 0 0
+  . fn(l: self ref YYLEX, err: string) 0 0
+    name YYLEX YYLEX 0 0
+    name error nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      == nothing 0 0
+        . nothing 0 0
+          name l nothing 0 0
+          name err nothing 0 0
+        name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              . nothing 0 0
+                name l nothing 0 0
+                name err nothing 0 0
+              name s nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                . nothing 0 0
+                  name l nothing 0 0
+                  name errline nothing 0 0
+                . nothing 0 0
+                  name l nothing 0 0
+                  name linenum nothing 0 0
+typecheck tree: 
+fn(){} fn(l: self ref YYLEX): int 0 0
+  . fn(l: self ref YYLEX): int 0 0
+    name YYLEX YYLEX 0 0
+    name lex nothing 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name endword nothing 0 0
+      const (0) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name wasdollar nothing 0 0
+        const (0) int 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name tok nothing 0 0
+          name NOTOKEN nothing 0 0
+        seq nothing 0 0
+          for nothing 0 0
+            == nothing 0 0
+              name tok nothing 0 0
+              name NOTOKEN nothing 0 0
+            seq nothing 0 0
+              scope nothing 0 0
+                seq nothing 0 0
+                  case nothing 0 0
+                    := nothing 0 0
+                      name c nothing 0 0
+                      call nothing 0 0
+                        . nothing 0 0
+                          name l nothing 0 0
+                          name getc nothing 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          . nothing 0 0
+                            name l nothing 0 0
+                            name EOF nothing 0 0
+                        scope nothing 0 0
+                          = nothing 0 0
+                            name tok nothing 0 0
+                            name END nothing 0 0
+                      seq nothing 0 0
+                        label nothing 0 0
+                          seq nothing 0 0
+                            const (10) int 0 0
+                          scope nothing 0 0
+                            = nothing 0 0
+                              name tok nothing 0 0
+                              const (10) int 0 0
+                        seq nothing 0 0
+                          label nothing 0 0
+                            seq nothing 0 0
+                              const (13) int 0 0
+                              seq nothing 0 0
+                                const (9) int 0 0
+                                seq nothing 0 0
+                                  const (32) int 0 0
+                            scope nothing 0 0
+                              nothing nothing 0 0
+                          seq nothing 0 0
+                            label nothing 0 0
+                              seq nothing 0 0
+                                const (35) int 0 0
+                              scope nothing 0 0
+                                seq nothing 0 0
+                                  for nothing 0 0
+                                    && nothing 0 0
+                                      != nothing 0 0
+                                        = nothing 0 0
+                                          name c nothing 0 0
+                                          call nothing 0 0
+                                            . nothing 0 0
+                                              name l nothing 0 0
+                                              name getc nothing 0 0
+                                        const (10) int 0 0
+                                      != nothing 0 0
+                                        name c nothing 0 0
+                                        . nothing 0 0
+                                          name l nothing 0 0
+                                          name EOF nothing 0 0
+                                    seq nothing 0 0
+                                      nothing nothing 0 0
+                                  call nothing 0 0
+                                    . nothing 0 0
+                                      name l nothing 0 0
+                                      name ungetc nothing 0 0
+                            seq nothing 0 0
+                              label nothing 0 0
+                                seq nothing 0 0
+                                  const (59) int 0 0
+                                scope nothing 0 0
+                                  = nothing 0 0
+                                    name tok nothing 0 0
+                                    const (59) int 0 0
+   
+typecheck tree: 
+fn(){} fn(t: int): string 0 0
+  name tokstr fn(t: int): string 0 0
+  seq nothing 0 0
+    vardecl string 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      case nothing 0 0
+        name t nothing 0 0
+        seq nothing 0 0
+          label nothing 0 0
+            seq nothing 0 0
+              const (10) int 0 0
+            scope nothing 0 0
+              = nothing 0 0
+                name s nothing 0 0
+                const '\n' string 0 0
+          seq nothing 0 0
+            label nothing 0 0
+              seq nothing 0 0
+                range nothing 0 0
+                  const (33) int 0 0
+                  const (127) int 0 0
+              scope nothing 0 0
+                = nothing 0 0
+                  name s nothing 0 0
+                  call nothing 0 0
+                    name sprint nothing 0 0
+                    seq nothing 0 0
+                      const '%c' string 0 0
+                      seq nothing 0 0
+                        name t nothing 0 0
+            seq nothing 0 0
+              label nothing 0 0
+                seq nothing 0 0
+                  name DUP nothing 0 0
+                scope nothing 0 0
+                  = nothing 0 0
+                    name s nothing 0 0
+                    const DUP string 0 0
+              seq nothing 0 0
+                label nothing 0 0
+                  seq nothing 0 0
+                    name REDIR nothing 0 0
+                  scope nothing 0 0
+                    = nothing 0 0
+                      name s nothing 0 0
+                      const REDIR string 0 0
+                seq nothing 0 0
+                  label nothing 0 0
+                    seq nothing 0 0
+                      name WORD nothing 0 0
+                    scope nothing 0 0
+                      = nothing 0 0
+                        name s nothing 0 0
+                        const WORD string 0 0
+                  seq nothing 0 0
+                    label nothing 0 0
+                      seq nothing 0 0
+                        name OP nothing 0 0
+                      scope nothing 0 0
+                        = nothing 0 0
+                          name s nothing 0 0
+                          const OP string 0 0
+                    seq nothing 0 0
+                      label nothing 0 0
+                        seq nothing 0 0
+                          name END nothing 0 0
+                        scope nothing 0 0
+                          = nothing 0 0
+                            name s nothing 0 0
+                            const END string 0 0
+                      seq nothing 0 0
+                        label nothing 0 0
+                          seq nothing 0 0
+                            name ERROR nothing 0 0
+                          scope nothing 0 0
+                            = nothing 0 0
+                              name s nothing 0 0
+                              const ERROR string 0 0
+                        seq nothing 0 0
+                          label nothing 0 0
+                            seq nothing 0 0
+                              * nothing 0 0
+                            scope nothing 0 0
+                              = nothing 0 0
+                                name s nothing 0 0
+                                + nothing 0 0
+                                  + nothing 0 0
+                                    const <unknowntok string 0 0
+                                    cast string 0 0
+                                      name t nothing 0 0
+                                  const > string 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          name s nothing 0 0
+typecheck tree: 
+fn(){} fn(lex: self ref YYLEX) 0 0
+  . fn(l: self ref YYLEX) 0 0
+    name YYLEX YYLEX 0 0
+    name ungetc nothing 0 0
+  seq nothing 0 0
+    -- nothing 0 0
+      . nothing 0 0
+        name lex nothing 0 0
+        name strpos nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          . nothing 0 0
+            name lex nothing 0 0
+            name f nothing 0 0
+          name nil polymorphic type 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              ++ nothing 0 0
+                . nothing 0 0
+                  name lex nothing 0 0
+                  name ncbuf nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  < nothing 0 0
+                    . nothing 0 0
+                      name lex nothing 0 0
+                      name strpos nothing 0 0
+                    const (0) int 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      . nothing 0 0
+                        name lex nothing 0 0
+                        name strpos nothing 0 0
+                      - nothing 0 0
+                        len nothing 0 0
+                          . nothing 0 0
+                            name lex nothing 0 0
+                            name cbuf nothing 0 0
+                        const (1) int 0 0
+typecheck tree: 
+fn(){} fn(lex: self ref YYLEX): int 0 0
+  . fn(l: self ref YYLEX): int 0 0
+    name YYLEX YYLEX 0 0
+    name getc nothing 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      . nothing 0 0
+        name lex nothing 0 0
+        name eof nothing 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          . nothing 0 0
+            name lex nothing 0 0
+            name EOF nothing 0 0
+    seq nothing 0 0
+      vardecl int 0 0
+        seq nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          != nothing 0 0
+            . nothing 0 0
+              name lex nothing 0 0
+              name f nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            scope nothing 0 0
+              seq nothing 0 0
+                if nothing 0 0
+                  > nothing 0 0
+                    . nothing 0 0
+                      name lex nothing 0 0
+                      name ncbuf nothing 0 0
+                    const (0) int 0 0
+                  seq nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        = nothing 0 0
+                          name c nothing 0 0
+                          index nothing 0 0
+                            . nothing 0 0
+                              name lex nothing 0 0
+                              name cbuf nothing 0 0
+                            ++ nothing 0 0
+                              . nothing 0 0
+                                name lex nothing 0 0
+                                name strpos nothing 0 0
+                        seq nothing 0 0
+                          if nothing 0 0
+                            >= nothing 0 0
+                              . nothing 0 0
+                                name lex nothing 0 0
+                                name strpos nothing 0 0
+                              len nothing 0 0
+                                . nothing 0 0
+                                  name lex nothing 0 0
+                                  name cbuf nothing 0 0
+                            seq nothing 0 0
+                              = nothing 0 0
+                                . nothing 0 0
+                                  name lex nothing 0 0
+                                  name strpos nothing 0 0
+                                const (0) int 0 0
+                          seq nothing 0 0
+                            -- nothing 0 0
+                              . nothing 0 0
+                                name lex nothing 0 0
+                                name ncbuf nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        if nothing 0 0
+                          && nothing 0 0
+                            . nothing 0 0
+                              name lex nothing 0 0
+                              name lastnl nothing 0 0
+                            != nothing 0 0
+                              . nothing 0 0
+                                name lex nothing 0 0
+                                name prompt nothing 0 0
+                              name nil polymorphic type 0 0
+                          seq nothing 0 0
+                            call nothing 0 0
+                              -> nothing 0 0
+                                name sys nothing 0 0
+                                name fprint nothing 0 0
+                              seq nothing 0 0
+                                call nothing 0 0
+                                  name stderr nothing 0 0
+                                seq nothing 0 0
+                                  const %s string 0 0
+                                  seq nothing 0 0
+                                    . nothing 0 0
+                                      name lex nothing 0 0
+                                      name prompt nothing 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            name c nothing 0 0
+                            call nothing 0 0
+                              -> nothing 0 0
+                                name bufio nothi
+typecheck tree: 
+fn(){} fn(lex: ref YYLEX): int 0 0
+  name readnum fn(lex: ref YYLEX): int 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name sum nothing 0 0
+      := nothing 0 0
+        name nc nothing 0 0
+        const (0) int 0 0
+    seq nothing 0 0
+      for nothing 0 0
+        && nothing 0 0
+          >= nothing 0 0
+            := nothing 0 0
+              name c nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name lex nothing 0 0
+                  name getc nothing 0 0
+            const (48) int 0 0
+          <= nothing 0 0
+            name c nothing 0 0
+            const (57) int 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name sum nothing 0 0
+                + nothing 0 0
+                  * nothing 0 0
+                    name sum nothing 0 0
+                    const (10) int 0 0
+                  - nothing 0 0
+                    name c nothing 0 0
+                    const (48) int 0 0
+              seq nothing 0 0
+                ++ nothing 0 0
+                  name nc nothing 0 0
+      seq nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name lex nothing 0 0
+            name ungetc nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            == nothing 0 0
+              name nc nothing 0 0
+              const (0) int 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                - nothing 0 0
+                  const (1) int 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name sum nothing 0 0
+typecheck tree: 
+fn(){} fn(lex: ref YYLEX): (int, ref Redir) 0 0
+  name readfdassign fn(lex: ref YYLEX): (int, ref Redir) 0 0
+  seq nothing 0 0
+    := nothing 0 0
+      name n1 nothing 0 0
+      call nothing 0 0
+        name readnum nothing 0 0
+        seq nothing 0 0
+          name lex nothing 0 0
+    seq nothing 0 0
+      if nothing 0 0
+        != nothing 0 0
+          := nothing 0 0
+            name c nothing 0 0
+            call nothing 0 0
+              . nothing 0 0
+                name lex nothing 0 0
+                name getc nothing 0 0
+          const (61) int 0 0
+        seq nothing 0 0
+          scope nothing 0 0
+            seq nothing 0 0
+              if nothing 0 0
+                == nothing 0 0
+                  name c nothing 0 0
+                  const (93) int 0 0
+                seq nothing 0 0
+                  return nothing 0 0
+                    tuple nothing 0 0
+                      seq nothing 0 0
+                        name REDIR nothing 0 0
+                        seq nothing 0 0
+                          ref nothing 0 0
+                            call nothing 0 0
+                              name Redir nothing 0 0
+                              seq nothing 0 0
+                                - nothing 0 0
+                                  const (1) int 0 0
+                                seq nothing 0 0
+                                  name n1 nothing 0 0
+                                  seq nothing 0 0
+                                    - nothing 0 0
+                                      const (1) int 0 0
+              seq nothing 0 0
+                return nothing 0 0
+                  tuple nothing 0 0
+                    seq nothing 0 0
+                      name ERROR nothing 0 0
+                      seq nothing 0 0
+                        name nil polymorphic type 0 0
+      seq nothing 0 0
+        := nothing 0 0
+          name n2 nothing 0 0
+          call nothing 0 0
+            name readnum nothing 0 0
+            seq nothing 0 0
+              name lex nothing 0 0
+        seq nothing 0 0
+          if nothing 0 0
+            != nothing 0 0
+              call nothing 0 0
+                . nothing 0 0
+                  name lex nothing 0 0
+                  name getc nothing 0 0
+              const (93) int 0 0
+            seq nothing 0 0
+              return nothing 0 0
+                tuple nothing 0 0
+                  seq nothing 0 0
+                    name ERROR nothing 0 0
+                    seq nothing 0 0
+                      name nil polymorphic type 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              tuple nothing 0 0
+                seq nothing 0 0
+                  name DUP nothing 0 0
+                  seq nothing 0 0
+                    ref nothing 0 0
+                      call nothing 0 0
+                        name Redir nothing 0 0
+                        seq nothing 0 0
+                          - nothing 0 0
+                            const (1) int 0 0
+                          seq nothing 0 0
+                            name n1 nothing 0 0
+                            seq nothing 0 0
+                              name n2 nothing 0 0
+typecheck tree: 
+fn(){} fn(left: ref Node, right: ref Node): ref Node 0 0
+  name mkseq fn(left: ref Node, right: ref Node): ref Node 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      && nothing 0 0
+        != nothing 0 0
+          name left nothing 0 0
+          name nil polymorphic type 0 0
+        != nothing 0 0
+          name right nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          call nothing 0 0
+            name mk nothing 0 0
+            seq nothing 0 0
+              name n_SEQ nothing 0 0
+              seq nothing 0 0
+                name left nothing 0 0
+                seq nothing 0 0
+                  name right nothing 0 0
+        if nothing 0 0
+          == nothing 0 0
+            name left nothing 0 0
+            name nil polymorphic type 0 0
+          seq nothing 0 0
+            return nothing 0 0
+              name right nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        name left nothing 0 0
+typecheck tree: 
+fn(){} fn(ntype: int, left: ref Node, right: ref Node): ref Node 0 0
+  name mk fn(ntype: int, left: ref Node, right: ref Node): ref Node 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      ref nothing 0 0
+        call nothing 0 0
+          name Node nothing 0 0
+          seq nothing 0 0
+            name ntype nothing 0 0
+            seq nothing 0 0
+              name left nothing 0 0
+              seq nothing 0 0
+                name right nothing 0 0
+                seq nothing 0 0
+                  name nil polymorphic type 0 0
+                  seq nothing 0 0
+                    name nil polymorphic type 0 0
+typecheck tree: 
+fn(){} fn(): ref Sys->FD 0 0
+  name stderr fn(): ref Sys->FD 0 0
+  seq nothing 0 0
+    return nothing 0 0
+      call nothing 0 0
+        -> nothing 0 0
+          name sys nothing 0 0
+          name fildes nothing 0 0
+        seq nothing 0 0
+          const (2) int 0 0
+typecheck tree: 
+fn(){} fn(yyc: int): string 0 0
+  name yytokname fn(yyc: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      && nothing 0 0
+        && nothing 0 0
+          > nothing 0 0
+            name yyc nothing 0 0
+            const (0) int 0 0
+          <= nothing 0 0
+            name yyc nothing 0 0
+            len nothing 0 0
+              name yytoknames nothing 0 0
+        != nothing 0 0
+          index nothing 0 0
+            name yytoknames nothing 0 0
+            - nothing 0 0
+              name yyc nothing 0 0
+              const (1) int 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          index nothing 0 0
+            name yytoknames nothing 0 0
+            - nothing 0 0
+              name yyc nothing 0 0
+              const (1) int 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        + nothing 0 0
+          + nothing 0 0
+            const < string 0 0
+            cast string 0 0
+              name yyc nothing 0 0
+          const > string 0 0
+typecheck tree: 
+fn(){} fn(yys: int): string 0 0
+  name yystatname fn(yys: int): string 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      && nothing 0 0
+        && nothing 0 0
+          >= nothing 0 0
+            name yys nothing 0 0
+            const (0) int 0 0
+          < nothing 0 0
+            name yys nothing 0 0
+            len nothing 0 0
+              name yystates nothing 0 0
+        != nothing 0 0
+          index nothing 0 0
+            name yystates nothing 0 0
+            name yys nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        return nothing 0 0
+          index nothing 0 0
+            name yystates nothing 0 0
+            name yys nothing 0 0
+    seq nothing 0 0
+      return nothing 0 0
+        + nothing 0 0
+          + nothing 0 0
+            const < string 0 0
+            cast string 0 0
+              name yys nothing 0 0
+          const >
+ string 0 0
+typecheck tree: 
+fn(){} fn(yylex: ref YYLEX): int 0 0
+  name yylex1 fn(yylex: ref YYLEX): int 0 0
+  seq nothing 0 0
+    vardecl int 0 0
+      seq nothing 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name yychar nothing 0 0
+        call nothing 0 0
+          . nothing 0 0
+            name yylex nothing 0 0
+            name lex nothing 0 0
+      seq nothing 0 0
+        if nothing 0 0
+          <= nothing 0 0
+            name yychar nothing 0 0
+            const (0) int 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name c nothing 0 0
+              index nothing 0 0
+                name yytok1 nothing 0 0
+                const (0) int 0 0
+            if nothing 0 0
+              < nothing 0 0
+                name yychar nothing 0 0
+                len nothing 0 0
+                  name yytok1 nothing 0 0
+              seq nothing 0 0
+                = nothing 0 0
+                  name c nothing 0 0
+                  index nothing 0 0
+                    name yytok1 nothing 0 0
+                    name yychar nothing 0 0
+                if nothing 0 0
+                  && nothing 0 0
+                    >= nothing 0 0
+                      name yychar nothing 0 0
+                      name YYPRIVATE nothing 0 0
+                    < nothing 0 0
+                      name yychar nothing 0 0
+                      + nothing 0 0
+                        name YYPRIVATE nothing 0 0
+                        len nothing 0 0
+                          name yytok2 nothing 0 0
+                  seq nothing 0 0
+                    = nothing 0 0
+                      name c nothing 0 0
+                      index nothing 0 0
+                        name yytok2 nothing 0 0
+                        - nothing 0 0
+                          name yychar nothing 0 0
+                          name YYPRIVATE nothing 0 0
+                    scope nothing 0 0
+                      seq nothing 0 0
+                        := nothing 0 0
+                          name n nothing 0 0
+                          len nothing 0 0
+                            name yytok3 nothing 0 0
+                        seq nothing 0 0
+                          = nothing 0 0
+                            name c nothing 0 0
+                            const (0) int 0 0
+                          seq nothing 0 0
+                            seq nothing 0 0
+                              := nothing 0 0
+                                name i nothing 0 0
+                                const (0) int 0 0
+                              for nothing 0 0
+                                < nothing 0 0
+                                  name i nothing 0 0
+                                  name n nothing 0 0
+                                seq nothing 0 0
+                                  scope nothing 0 0
+                                    seq nothing 0 0
+                                      if nothing 0 0
+                                        == nothing 0 0
+                                          index nothing 0 0
+                                            name yytok3 nothing 0 0
+                                            + nothing 0 0
+                                              name i nothing 0 0
+                                              const (0) int 0 0
+                                          name yychar nothing 0 0
+                                        seq nothing 0 0
+                                          scope nothing 0 0
+                                            seq nothing 0 0
+                                              = nothing 0 0
+                                                name c nothing 0 0
+                                                index nothing 0 0
+                                                  name yytok3 nothing 0 0
+                                                  + nothing 0 0
+                                                    name i nothing 0 0
+                                                    const (1) int 0 0
+                                              seq nothing 0 0
+                                                b
+typecheck tree: 
+fn(){} fn(yylex: ref YYLEX): int 0 0
+  name yyparse fn(yylex: ref YYLEX): int 0 0
+  seq nothing 0 0
+    if nothing 0 0
+      && nothing 0 0
+        >= nothing 0 0
+          name yydebug nothing 0 0
+          const (1) int 0 0
+        == nothing 0 0
+          name yysys nothing 0 0
+          name nil polymorphic type 0 0
+      seq nothing 0 0
+        scope nothing 0 0
+          seq nothing 0 0
+            = nothing 0 0
+              name yysys nothing 0 0
+              load YYSys 0 0
+                const $Sys string 0 0
+            seq nothing 0 0
+              = nothing 0 0
+                name yystderr nothing 0 0
+                call nothing 0 0
+                  -> nothing 0 0
+                    name yysys nothing 0 0
+                    name fildes nothing 0 0
+                  seq nothing 0 0
+                    const (2) int 0 0
+    seq nothing 0 0
+      := nothing 0 0
+        name yys nothing 0 0
+        array array of YYS 0 0
+          name YYMAXDEPTH nothing 0 0
+      seq nothing 0 0
+        vardecl YYSTYPE 0 0
+          seq nothing 0 0
+        seq nothing 0 0
+          := nothing 0 0
+            name yystate nothing 0 0
+            const (0) int 0 0
+          seq nothing 0 0
+            := nothing 0 0
+              name yychar nothing 0 0
+              - nothing 0 0
+                const (1) int 0 0
+            seq nothing 0 0
+              := nothing 0 0
+                name yynerrs nothing 0 0
+                const (0) int 0 0
+              seq nothing 0 0
+                := nothing 0 0
+                  name yyerrflag nothing 0 0
+                  const (0) int 0 0
+                seq nothing 0 0
+                  := nothing 0 0
+                    name yyp nothing 0 0
+                    - nothing 0 0
+                      const (1) int 0 0
+                  seq nothing 0 0
+                    := nothing 0 0
+                      name yyn nothing 0 0
+                      const (0) int 0 0
+                    seq nothing 0 0
+                      for nothing 0 0
+                        nothing nothing 0 0
+                        seq nothing 0 0
+                          scope nothing 0 0
+                            seq nothing 0 0
+                              if nothing 0 0
+                                >= nothing 0 0
+                                  name yydebug nothing 0 0
+                                  const (4) int 0 0
+                                seq nothing 0 0
+                                  call nothing 0 0
+                                    -> nothing 0 0
+                                      name yysys nothing 0 0
+                                      name fprint nothing 0 0
+                                    seq nothing 0 0
+                                      name yystderr nothing 0 0
+                                      seq nothing 0 0
+                                        const char %s in %s string 0 0
+                                        seq nothing 0 0
+                                          call nothing 0 0
+                                            name yytokname nothing 0 0
+                                            seq nothing 0 0
+                                              name yychar nothing 0 0
+                                          seq nothing 0 0
+                                            call nothing 0 0
+                                              name yystatname nothing 0 0
+                                              seq nothing 0 0
+                                                name yystate nothing 0 0
+                              seq nothing 0 0
+                                ++ nothing 0 0
+                                  name yyp nothing 0 0
+                                seq nothing 0 0
+                                  if nothing 0 0
+                                    >= nothing 0 0
+                                      name yyp nothing 0 0
+                                      len nothing 0 0
+                                        name yys nothing 0 0
+                                    seq nothing 0 0
+                          
+fncom: usage 2 417ba8
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(fd: ref Sys->FD, s: string, *): int 12 1
+      name sys Sys 1 0
+      name fprint nothing 11 1
+    seq no type 10 2
+      call ref Sys->FD 10 2
+        -> fn(fd: int): ref Sys->FD 12 1
+          name sys Sys 1 0
+          name fildes nothing 11 1
+        seq no type 10 1
+          const (2) int 6 0
+      seq no type 10 1
+        const usage: sh [-ilexn] [-c command] [file [arg...]]
+ string 1 0
+ecom: 
+call int 10 2
+  -> fn(fd: ref Sys->FD, s: string, *): int 12 1
+    name sys Sys 1 0
+    name fprint nothing 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (2) int 6 0
+    seq no type 10 1
+      const usage: sh [-ilexn] [-c command] [file [arg...]]
+ string 1 0
+ecom to: 
+name .t0 int 0 0
+generate desc for Sys->fprint
+descmap offset 0
+descmap fd type ref Sys->FD offset 64 (d->offset=64 start=0) returns 64
+descmap s type string offset 72 (d->offset=72 start=0) returns 72
+generate desc for big
+generate desc for big
+	desc	$-1,8,""
+generate desc for ref Sys->FD
+generate desc for ref Sys->FD
+	desc	$-1,8,"80"
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (2) int 6 0
+ecom to: 
+name .b2 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (2) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b3 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b2 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b1 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b2 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b2 ref Sys->FD 0 0
+ecom: 
+const usage: sh [-ilexn] [-c command] [file [arg...]]
+ string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b1 big 0 0
+    const (72) int 6 0
+ecom: 
+raise nothing 10 1
+  const fail:usage string 1 0
+fn: usage
+64: local .t0 int ref 1
+72: local .b1 big ref 1
+80: local .b2 ref Sys->FD ref 1
+88: local .b3 big ref 1
+generate desc for usage
+descmap offset 0
+descmap .t0 type int offset 64 (d->offset=64 start=0) returns -1
+descmap .b1 type big offset 72 (d->offset=72 start=0) returns -1
+descmap .b2 type ref Sys->FD offset 80 (d->offset=80 start=0) returns 80
+descmap .b3 type big offset 88 (d->offset=88 start=0) returns -1
+fncom: badmodule 6 417c68
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+      name sys Sys 1 0
+      name fprint nothing 11 1
+    seq no type 10 2
+      call ref Sys->FD 10 2
+        -> fn(fd: int): ref Sys->FD 12 1
+          name sys Sys 1 0
+          name fildes nothing 11 1
+        seq no type 10 1
+          const (2) int 6 0
+      seq no type 10 1
+        const sh: cannot load %s: %r
+ string 1 0
+        seq no type 10 1
+          name path string 0 0
+ecom: 
+call int 10 2
+  -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+    name sys Sys 1 0
+    name fprint nothing 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (2) int 6 0
+    seq no type 10 1
+      const sh: cannot load %s: %r
+ string 1 0
+      seq no type 10 1
+        name path string 0 0
+ecom to: 
+name .t4 int 0 0
+generate desc for Sys->fprint
+descmap offset 0
+descmap fd type ref Sys->FD offset 64 (d->offset=64 start=0) returns 64
+descmap s type string offset 72 (d->offset=72 start=0) returns 72
+descmap type string offset 80 returns 80
+generate desc for big
+generate desc for ref Sys->FD
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (2) int 6 0
+ecom to: 
+name .b6 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (2) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b7 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b6 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b5 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b6 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b6 ref Sys->FD 0 0
+ecom: 
+const sh: cannot load %s: %r
+ string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b5 big 0 0
+    const (72) int 6 0
+ecom: 
+name path string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b5 big 0 0
+    const (80) int 6 0
+ecom: 
+raise nothing 10 1
+  const fail:bad module string 1 0
+fn: badmodule
+64: argument path string ref 1
+72: local .t4 int ref 1
+80: local .b5 big ref 1
+88: local .b6 ref Sys->FD ref 1
+96: local .b7 big ref 1
+generate desc for badmodule
+descmap offset 0
+descmap path type string offset 64 (d->offset=64 start=0) returns 64
+descmap .t4 type int offset 72 (d->offset=72 start=0) returns -1
+descmap .b5 type big offset 80 (d->offset=80 start=0) returns -1
+descmap .b6 type ref Sys->FD offset 88 (d->offset=88 start=0) returns 88
+descmap .b7 type big offset 96 (d->offset=96 start=0) returns -1
+fncom: initialise 7 4b6b60
+ecom: 
+= Sys 10 1
+  name sys Sys 1 0
+  load Sys 10 1
+    const $Sys string 1 0
+    name .m.Sys Sys 17 1
+ecom: 
+load Sys 10 1
+  const $Sys string 1 0
+  name .m.Sys Sys 17 1
+ecom to: 
+name sys Sys 1 0
+ecom: 
+= Filepat 10 1
+  name filepat Filepat 1 0
+  load Filepat 10 1
+    const /dis/lib/filepat.dis string 1 0
+    name .m.Filepat Filepat 17 1
+ecom: 
+load Filepat 10 1
+  const /dis/lib/filepat.dis string 1 0
+  name .m.Filepat Filepat 17 1
+ecom to: 
+name filepat Filepat 1 0
+ecom: 
+call no type 10 2
+  name badmodule fn(path: string) 11 1
+  seq no type 10 1
+    const /dis/lib/filepat.dis string 1 0
+generate desc for big
+ecom: 
+const /dis/lib/filepat.dis string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b9 big 0 0
+    const (64) int 6 0
+ecom: 
+= String 10 1
+  name str String 1 0
+  load String 10 1
+    const /dis/lib/string.dis string 1 0
+    name .m.String String 17 1
+ecom: 
+load String 10 1
+  const /dis/lib/string.dis string 1 0
+  name .m.String String 17 1
+ecom to: 
+name str String 1 0
+ecom: 
+call no type 10 2
+  name badmodule fn(path: string) 11 1
+  seq no type 10 1
+    const /dis/lib/string.dis string 1 0
+generate desc for big
+ecom: 
+const /dis/lib/string.dis string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b9 big 0 0
+    const (64) int 6 0
+ecom: 
+= Bufio 10 1
+  name bufio Bufio 1 0
+  load Bufio 10 1
+    const /dis/lib/bufio.dis string 1 0
+    name .m.Bufio Bufio 17 1
+ecom: 
+load Bufio 10 1
+  const /dis/lib/bufio.dis string 1 0
+  name .m.Bufio Bufio 17 1
+ecom to: 
+name bufio Bufio 1 0
+ecom: 
+call no type 10 2
+  name badmodule fn(path: string) 11 1
+  seq no type 10 1
+    const /dis/lib/bufio.dis string 1 0
+generate desc for big
+ecom: 
+const /dis/lib/bufio.dis string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b9 big 0 0
+    const (64) int 6 0
+ecom: 
+= Sh 10 1
+  name myself Sh 1 0
+  load Sh 10 1
+    const $self string 1 0
+    name .m.Sh Sh 17 1
+ecom: 
+load Sh 10 1
+  const $self string 1 0
+  name .m.Sh Sh 17 1
+ecom to: 
+name myself Sh 1 0
+ecom: 
+call no type 10 2
+  name badmodule fn(path: string) 11 1
+  seq no type 10 1
+    const $self(Sh) string 1 0
+generate desc for big
+ecom: 
+const $self(Sh) string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b9 big 0 0
+    const (64) int 6 0
+ecom: 
+= Shellbuiltin 10 1
+  name myselfbuiltin Shellbuiltin 1 0
+  load Shellbuiltin 10 1
+    const $self string 1 0
+    name .m.Shellbuiltin Shellbuiltin 17 1
+ecom: 
+load Shellbuiltin 10 1
+  const $self string 1 0
+  name .m.Shellbuiltin Shellbuiltin 17 1
+ecom to: 
+name myselfbuiltin Shellbuiltin 1 0
+ecom: 
+call no type 10 2
+  name badmodule fn(path: string) 11 1
+  seq no type 10 1
+    const $self(Shellbuiltin) string 1 0
+generate desc for big
+ecom: 
+const $self(Shellbuiltin) string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b9 big 0 0
+    const (64) int 6 0
+ecom: 
+= Env 10 1
+  name env Env 1 0
+  load Env 10 1
+    const /dis/lib/env.dis string 1 0
+    name .m.Env Env 17 1
+ecom: 
+load Env 10 1
+  const /dis/lib/env.dis string 1 0
+  name .m.Env Env 17 1
+ecom to: 
+name env Env 1 0
+fn: initialise
+64: local .t8 int ref 1
+72: local .b9 big ref 5
+generate desc for initialise
+descmap offset 0
+descmap .t8 type int offset 64 (d->offset=64 start=0) returns -1
+descmap .b9 type big offset 72 (d->offset=72 start=0) returns -1
+fncom: init 2 4b6d80
+ecom: 
+call no type 10 1
+  name initialise fn() 11 1
+generate desc for big
+ecom: 
+= Options 10 1
+  name opts Options 0 0
+  name blankopts Options 1 0
+ecom: 
+name blankopts Options 1 0
+ecom to: 
+name opts Options 0 0
+generate desc for Options
+descmap adt offset 0
+descmap offset 0
+descmap lflag type int offset 0 (d->offset=0 start=0) returns -1
+descmap nflag type int offset 4 (d->offset=4 start=0) returns -1
+descmap ctxtflags type int offset 8 (d->offset=8 start=0) returns -1
+descmap carg type string offset 16 (d->offset=16 start=0) returns 16
+generate desc for Options
+	desc	$-1,24,"20"
+eacom: 
+inds int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+  const (0) int 6 0
+ecom: 
+inds int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+  const (0) int 6 0
+ecom to: 
+name .t11 int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+++ int 10 1
+  * int 0 0
+    adr int 13 1
+      name opts Options 0 0
+  const (1) int 6 0
+ecom: 
+= list of string 10 1
+  name argv list of string 0 0
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name argv list of string 0 0
+ecom: 
+= int 10 1
+  name interactive int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name interactive int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+eacom: 
+inds int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+  const (0) int 6 0
+ecom: 
+inds int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+  const (0) int 6 0
+ecom to: 
+name .t11 int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name i int 0 0
+eacom: 
+len int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+ecom: 
+len int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+ecom to: 
+name .t11 int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= int 10 1
+  name c int 0 0
+  inds int 10 1
+    hd string 10 1
+      name argv list of string 0 0
+    name i int 0 0
+ecom: 
+inds int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+  name i int 0 0
+ecom to: 
+name c int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= int 10 1
+  name interactive int 0 0
+  const INTERACTIVE (1) int 6 0
+ecom: 
+const INTERACTIVE (1) int 6 0
+ecom to: 
+name interactive int 0 0
+ecom: 
+++ int 10 1
+  * int 0 0
+    adr int 13 1
+      name opts Options 0 0
+  const (1) int 6 0
+ecom: 
+++ int 10 1
+  * int 0 0
+    + int 13 1
+      adr int 13 1
+        name opts Options 0 0
+      const nflag (4) int 6 0
+  const (1) int 6 0
+ecom: 
+|= int 10 1
+  * int 0 0
+    + int 13 1
+      adr int 13 1
+        name opts Options 0 0
+      const ctxtflags (8) int 6 0
+  const ERROREXIT (8) int 6 0
+ecom: 
+|= int 10 1
+  * int 0 0
+    + int 13 1
+      adr int 13 1
+        name opts Options 0 0
+      const ctxtflags (8) int 6 0
+  const EXECPRINT (4) int 6 0
+eacom: 
+- int 10 1
+  len int 10 1
+    hd string 10 1
+      name argv list of string 0 0
+  const (1) int 6 0
+ecom: 
+- int 10 1
+  len int 10 1
+    hd string 10 1
+      name argv list of string 0 0
+  const (1) int 6 0
+ecom to: 
+name .t11 int 0 0
+ecom: 
+len int 10 1
+  hd string 10 1
+    name argv list of string 0 0
+ecom to: 
+name .t11 int 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+= string 10 2
+  name arg string 0 0
+  slice string 10 2
+    hd string 10 1
+      name argv list of string 0 0
+    seq no type 10 2
+      + int 15 1
+        name i int 0 0
+        const (1) int 6 0
+      nothing no type 10 1
+ecom: 
+slice string 10 2
+  hd string 10 1
+    name argv list of string 0 0
+  seq no type 10 2
+    + int 15 1
+      name i int 0 0
+      const (1) int 6 0
+    nothing no type 10 1
+ecom to: 
+name arg string 0 0
+eacom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+len int 10 1
+  name .t12 string 0 0
+ecom to: 
+name .t11 int 0 0
+eacom: 
++ int 15 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
++ int 15 1
+  name i int 0 0
+  const (1) int 6 0
+ecom to: 
+name .t13 int 0 0
+ecom: 
+name .t12 string 0 0
+ecom to: 
+name arg string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+eacom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t12 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t12 list of string 0 0
+eacom: 
+hd string 10 1
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom: 
+hd string 10 1
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom to: 
+name .t12 string 0 0
+eacom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 list of string 0 0
+ecom: 
+= string 10 1
+  name .t12 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t12 string 0 0
+ecom: 
+call no type 10 1
+  name usage fn() 11 1
+generate desc for big
+ecom: 
+= string 10 1
+  name arg string 0 0
+  hd string 10 1
+    tl list of string 10 1
+      name argv list of string 0 0
+ecom: 
+hd string 10 1
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom to: 
+name arg string 0 0
+eacom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name .t12 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t12 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t12 list of string 0 0
+ecom: 
+= list of string 10 1
+  name argv list of string 0 0
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name argv list of string 0 0
+ecom: 
+= list of string 10 1
+  name argv list of string 0 0
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name argv list of string 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name opts Options 0 0
+      const carg (16) int 6 0
+  name arg string 0 0
+ecom: 
+name arg string 0 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name opts Options 0 0
+    const carg (16) int 6 0
+ecom: 
+= string 10 1
+  name arg string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name arg string 0 0
+ecom: 
+= string 10 1
+  name arg string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name arg string 0 0
+ecom: 
+++ int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+= list of string 10 1
+  name argv list of string 0 0
+  tl list of string 10 1
+    name argv list of string 0 0
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+name argv list of string 0 0
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(flags: int, movefd: list of int): int 12 1
+      name sys Sys 1 0
+      name pctl nothing 11 1
+    seq no type 10 1
+      const FORKFD (2) int 6 0
+      seq no type 10 1
+        name nil list of int 1 0
+ecom: 
+call int 10 2
+  -> fn(flags: int, movefd: list of int): int 12 1
+    name sys Sys 1 0
+    name pctl nothing 11 1
+  seq no type 10 1
+    const FORKFD (2) int 6 0
+    seq no type 10 1
+      name nil list of int 1 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+ecom: 
+const FORKFD (2) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name nil list of int 1 0
+ecom to: 
+* list of int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (72) int 6 0
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(flags: int, movefd: list of int): int 12 1
+      name sys Sys 1 0
+      name pctl nothing 11 1
+    seq no type 10 1
+      const FORKNS (8) int 6 0
+      seq no type 10 1
+        name nil list of int 1 0
+ecom: 
+call int 10 2
+  -> fn(flags: int, movefd: list of int): int 12 1
+    name sys Sys 1 0
+    name pctl nothing 11 1
+  seq no type 10 1
+    const FORKNS (8) int 6 0
+    seq no type 10 1
+      name nil list of int 1 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+ecom: 
+const FORKNS (8) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name nil list of int 1 0
+ecom to: 
+* list of int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (72) int 6 0
+ecom: 
+= ref Context 10 2
+  name ctxt ref Context 0 0
+  call ref Context 10 2
+    name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+    seq no type 10 1
+      name drawcontext ref Draw->Context 0 0
+ecom: 
+call ref Context 10 2
+  name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+  seq no type 10 1
+    name drawcontext ref Draw->Context 0 0
+ecom to: 
+name ctxt ref Context 0 0
+generate desc for big
+ecom: 
+name drawcontext ref Draw->Context 0 0
+ecom to: 
+* ref Draw->Context 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+used int 10 2
+  call int 10 2
+    name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+    seq nothing 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * int 0 0
+          + int 13 1
+            adr int 13 1
+              name opts Options 0 0
+            const ctxtflags (8) int 6 0
+        seq no type 10 1
+          const (1) int 6 0
+ecom: 
+call int 10 2
+  name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * int 0 0
+        + int 13 1
+          adr int 13 1
+            name opts Options 0 0
+          const ctxtflags (8) int 6 0
+      seq no type 10 1
+        const (1) int 6 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      name opts Options 0 0
+    const ctxtflags (8) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (72) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (76) int 6 0
+ecom: 
+call no type 10 2
+  name runscript fn(ctxt: ref Context, path: string, args: list of ref Listnode, reporterr: int) 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const /lib/sh/profile string 1 0
+      seq no type 10 1
+        name nil list of ref Listnode 1 0
+        seq no type 10 1
+          const (0) int 6 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+const /lib/sh/profile string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (72) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (80) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (88) int 6 0
+ecom: 
+= string 10 2
+  name status string 0 0
+  call string 10 2
+    name run fn(ctxt: self ref Context, args: list of ref Listnode, last: int): string 11 1
+    seq nothing 10 2
+      name ctxt ref Context 0 0
+      seq no type 10 2
+        call list of ref Listnode 10 2
+          name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+          seq no type 10 1
+            :: list of string 10 1
+              + string 10 1
+                + string 10 1
+                  const { string 1 0
+                  * string 0 0
+                    + int 13 1
+                      adr int 13 1
+                        name opts Options 0 0
+                      const carg (16) int 6 0
+                const } string 1 0
+              name argv list of string 0 0
+        seq no type 10 1
+          ! int 10 1
+            name interactive int 0 0
+ecom: 
+call string 10 2
+  name run fn(ctxt: self ref Context, args: list of ref Listnode, last: int): string 11 1
+  seq nothing 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+        seq no type 10 1
+          :: list of string 10 1
+            + string 10 1
+              + string 10 1
+                const { string 1 0
+                * string 0 0
+                  + int 13 1
+                    adr int 13 1
+                      name opts Options 0 0
+                    const carg (16) int 6 0
+              const } string 1 0
+            name argv list of string 0 0
+      seq no type 10 1
+        ! int 10 1
+          name interactive int 0 0
+ecom to: 
+name status string 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+  seq no type 10 1
+    :: list of string 10 1
+      + string 10 1
+        + string 10 1
+          const { string 1 0
+          * string 0 0
+            + int 13 1
+              adr int 13 1
+                name opts Options 0 0
+              const carg (16) int 6 0
+        const } string 1 0
+      name argv list of string 0 0
+ecom to: 
+name .t12 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+:: list of string 10 1
+  + string 10 1
+    + string 10 1
+      const { string 1 0
+      * string 0 0
+        + int 13 1
+          adr int 13 1
+            name opts Options 0 0
+          const carg (16) int 6 0
+    const } string 1 0
+  name argv list of string 0 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+eacom: 
++ string 10 1
+  + string 10 1
+    const { string 1 0
+    * string 0 0
+      + int 13 1
+        adr int 13 1
+          name opts Options 0 0
+        const carg (16) int 6 0
+  const } string 1 0
+ecom: 
++ string 10 1
+  + string 10 1
+    const { string 1 0
+    * string 0 0
+      + int 13 1
+        adr int 13 1
+          name opts Options 0 0
+        const carg (16) int 6 0
+  const } string 1 0
+ecom to: 
+name .t15 string 0 0
+ecom: 
++ string 10 1
+  const { string 1 0
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name opts Options 0 0
+      const carg (16) int 6 0
+ecom to: 
+name .t15 string 0 0
+ecom: 
+name argv list of string 0 0
+ecom to: 
+name .t16 list of string 0 0
+ecom: 
+= string 10 1
+  name .t15 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t15 string 0 0
+ecom: 
+= list of string 10 1
+  name .t16 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t16 list of string 0 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name .t12 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t12 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t12 list of ref Listnode 0 0
+ecom: 
+! int 10 1
+  name interactive int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (80) int 6 0
+ecom: 
+raise nothing 10 1
+  + string 10 1
+    const fail: string 1 0
+    name status string 0 0
+eacom: 
++ string 10 1
+  const fail: string 1 0
+  name status string 0 0
+ecom: 
++ string 10 1
+  const fail: string 1 0
+  name status string 0 0
+ecom to: 
+name .t16 string 0 0
+ecom: 
+= string 10 1
+  name .t16 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t16 string 0 0
+ecom: 
+used string 10 2
+  call string 10 2
+    name setstatus fn(ctxt: ref Context, val: string): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name status string 0 0
+ecom: 
+call string 10 2
+  name setstatus fn(ctxt: ref Context, val: string): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name status string 0 0
+ecom to: 
+name .t16 string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+name status string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (72) int 6 0
+ecom: 
+= string 10 1
+  name .t16 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t16 string 0 0
+ecom: 
+= string 10 1
+  name status string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name status string 0 0
+eacom: 
+call int 10 2
+  name isconsole fn(fd: ref Sys->FD): int 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (0) int 6 0
+ecom: 
+call int 10 2
+  name isconsole fn(fd: ref Sys->FD): int 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+generate desc for ref Sys->FD
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (0) int 6 0
+ecom to: 
+name .b17 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b17 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b17 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b17 ref Sys->FD 0 0
+ecom: 
+|= int 10 1
+  name interactive int 0 0
+  const INTERACTIVE (1) int 6 0
+ecom: 
+used int 10 2
+  call int 10 2
+    name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+    seq nothing 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name interactive int 0 0
+        seq no type 10 1
+          const (1) int 6 0
+ecom: 
+call int 10 2
+  name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name interactive int 0 0
+      seq no type 10 1
+        const (1) int 6 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+name interactive int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (72) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (76) int 6 0
+ecom: 
+call no type 10 2
+  name runfile fn(ctxt: ref Context, fd: ref Sys->FD, path: string, args: list of ref Listnode) 11 1
+  seq no type 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      call ref Sys->FD 10 2
+        -> fn(fd: int): ref Sys->FD 12 1
+          name sys Sys 1 0
+          name fildes nothing 11 1
+        seq no type 10 1
+          const (0) int 6 0
+      seq no type 10 1
+        const stdin string 1 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+generate desc for big
+generate desc for ref Sys->FD
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (0) int 6 0
+ecom to: 
+name .b17 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b17 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (72) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b17 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b17 ref Sys->FD 0 0
+ecom: 
+const stdin string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (88) int 6 0
+ecom: 
+used int 10 2
+  call int 10 2
+    name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+    seq nothing 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name interactive int 0 0
+        seq no type 10 1
+          const (1) int 6 0
+ecom: 
+call int 10 2
+  name setoptions fn(ctxt: self ref Context, flags: int, on: int): int 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name interactive int 0 0
+      seq no type 10 1
+        const (1) int 6 0
+ecom to: 
+name .t13 int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+name interactive int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (72) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (76) int 6 0
+ecom: 
+call no type 10 2
+  name runscript fn(ctxt: ref Context, path: string, args: list of ref Listnode, reporterr: int) 11 1
+  seq no type 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      hd string 10 1
+        name argv list of string 0 0
+      seq no type 10 2
+        call list of ref Listnode 10 2
+          name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+          seq no type 10 1
+            tl list of string 10 1
+              name argv list of string 0 0
+        seq no type 10 1
+          const (1) int 6 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+  seq no type 10 1
+    tl list of string 10 1
+      name argv list of string 0 0
+ecom to: 
+name .t16 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+tl list of string 10 1
+  name argv list of string 0 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b10 big 0 0
+    const (64) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (64) int 6 0
+ecom: 
+hd string 10 1
+  name argv list of string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t16 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t16 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t16 list of ref Listnode 0 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b14 big 0 0
+    const (88) int 6 0
+fn: init
+64: argument drawcontext ref Draw->Context ref 1
+72: argument argv list of string ref 24
+80: local interactive int ref 7
+84: local i int ref 6
+88: local c int ref 2
+92: local .t11 int ref 1
+96: local .t13 int ref 1
+104: local opts Options ref 12
+128: local .b10 big ref 11
+136: local ctxt ref Context ref 10
+144: local .b14 big ref 7
+152: local status string ref 4
+160: local arg string ref 3
+168: local .b17 ref Sys->FD ref 2
+176: local .t12 string ref 1
+184: local .t15 string ref 1
+192: local .t16 list of string ref 1
+generate desc for init
+descmap offset 0
+descmap drawcontext type ref Draw->Context offset 64 (d->offset=64 start=0) returns 64
+descmap argv type list of string offset 72 (d->offset=72 start=0) returns 72
+descmap interactive type int offset 80 (d->offset=80 start=0) returns -1
+descmap i type int offset 84 (d->offset=84 start=0) returns -1
+descmap c type int offset 88 (d->offset=88 start=0) returns -1
+descmap .t11 type int offset 92 (d->offset=92 start=0) returns -1
+descmap .t13 type int offset 96 (d->offset=96 start=0) returns -1
+descmap adt offset 104
+descmap offset 104
+descmap lflag type int offset 104 (d->offset=0 start=104) returns -1
+descmap nflag type int offset 108 (d->offset=4 start=104) returns -1
+descmap ctxtflags type int offset 112 (d->offset=8 start=104) returns -1
+descmap carg type string offset 120 (d->offset=16 start=104) returns 120
+descmap opts type Options offset 104 (d->offset=104 start=0) returns 120
+descmap .b10 type big offset 128 (d->offset=128 start=0) returns -1
+descmap ctxt type ref Context offset 136 (d->offset=136 start=0) returns 136
+descmap .b14 type big offset 144 (d->offset=144 start=0) returns -1
+descmap status type string offset 152 (d->offset=152 start=0) returns 152
+descmap arg type string offset 160 (d->offset=160 start=0) returns 160
+descmap .b17 type ref Sys->FD offset 168 (d->offset=168 start=0) returns 168
+descmap .t12 type string offset 176 (d->offset=176 start=0) returns 176
+descmap .t15 type string offset 184 (d->offset=184 start=0) returns 184
+descmap .t16 type list of string offset 192 (d->offset=192 start=0) returns 192
+fncom: parse 3 4b8580
+ecom: 
+call no type 10 1
+  name initialise fn() 11 1
+generate desc for big
+ecom: 
+= ref YYLEX 10 2
+  name lex ref YYLEX 0 0
+  call ref YYLEX 10 2
+    name initstring fn(s: string): ref YYLEX 11 1
+    seq no type 10 1
+      name s string 0 0
+ecom: 
+call ref YYLEX 10 2
+  name initstring fn(s: string): ref YYLEX 11 1
+  seq no type 10 1
+    name s string 0 0
+ecom to: 
+name lex ref YYLEX 0 0
+generate desc for big
+ecom: 
+name s string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (64) int 6 0
+ecom: 
+call (ref Node, string) 10 2
+  name doparse fn(l: ref YYLEX, prompt: string, showline: int): (ref Node, string) 11 1
+  seq no type 10 1
+    name lex ref YYLEX 0 0
+    seq no type 10 1
+      const  string 1 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+* (ref Node, string) 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name lex ref YYLEX 0 0
+ecom to: 
+* ref YYLEX 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (64) int 6 0
+ecom: 
+const  string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (72) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b18 big 0 0
+    const (80) int 6 0
+fn: parse
+64: argument s string ref 1
+72: local .b18 big ref 3
+80: local lex ref YYLEX ref 2
+generate desc for parse
+descmap offset 0
+descmap s type string offset 64 (d->offset=64 start=0) returns 64
+descmap .b18 type big offset 72 (d->offset=72 start=0) returns -1
+descmap lex type ref YYLEX offset 80 (d->offset=80 start=0) returns 80
+fncom: system 2 4b74e0
+ecom: 
+call no type 10 1
+  name initialise fn() 11 1
+generate desc for big
+ecom: 
+= (ref Node, string) 10 2
+  tuple (ref Node, string) 10 1
+    seq nothing 10 1
+      name n ref Node 0 0
+      seq nothing 10 1
+        name err string 0 0
+  call (ref Node, string) 10 2
+    name parse fn(s: string): (ref Node, string) 11 1
+    seq no type 10 1
+      name cmd string 0 0
+ecom: 
+call (ref Node, string) 10 2
+  name parse fn(s: string): (ref Node, string) 11 1
+  seq no type 10 1
+    name cmd string 0 0
+ecom to: 
+name n (ref Node, string) 0 0
+generate desc for big
+ecom: 
+name cmd string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b19 big 0 0
+    const (64) int 6 0
+ecom: 
+name err string 0 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+call string 10 3
+  name run fn(ctxt: self ref Context, args: list of ref Listnode, last: int): string 11 1
+  seq nothing 10 3
+    call ref Context 10 2
+      name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+      seq no type 10 1
+        name drawctxt ref Draw->Context 0 0
+    seq no type 10 2
+      :: list of ref Listnode 10 1
+        ref ref Listnode 10 1
+          tuple Listnode 10 1
+            seq no type 10 1
+              name n ref Node 0 0
+              seq no type 10 1
+                name nil polymorphic type 1 0
+        name nil polymorphic type 1 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+generate desc for ref Context
+generate desc for ref Context
+	desc	$-1,8,"80"
+ecom: 
+call ref Context 10 2
+  name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+  seq no type 10 1
+    name drawctxt ref Draw->Context 0 0
+ecom to: 
+name .b20 ref Context 0 0
+generate desc for big
+ecom: 
+name drawctxt ref Draw->Context 0 0
+ecom to: 
+* ref Draw->Context 8 0
+  + int 15 0
+    name .b21 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b20 ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b19 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Context 10 1
+  name .b20 ref Context 0 0
+  name nil ref Context 1 0
+ecom: 
+name nil ref Context 1 0
+ecom to: 
+name .b20 ref Context 0 0
+ecom: 
+:: list of ref Listnode 10 1
+  ref ref Listnode 10 1
+    tuple Listnode 10 1
+      seq no type 10 1
+        name n ref Node 0 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+  name nil polymorphic type 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b19 big 0 0
+    const (72) int 6 0
+eacom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+ecom to: 
+name .b20 ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for Listnode
+descmap adt offset 0
+descmap offset 0
+descmap cmd type ref Node offset 0 (d->offset=0 start=0) returns 0
+descmap word type string offset 8 (d->offset=8 start=0) returns 8
+generate desc for Listnode
+	desc	$-1,16,"c0"
+ecom: 
+tuple Listnode 10 1
+  seq no type 10 1
+    name n ref Node 0 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+ecom to: 
+* Listnode 8 0
+  name .b20 ref Listnode 0 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b20 ref Listnode 0 0
+    const (0) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b20 ref Listnode 0 0
+    const (8) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t22 list of ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b20 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b20 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t22 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t22 list of ref Listnode 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b19 big 0 0
+    const (80) int 6 0
+ecom: 
+= ref Node 10 1
+  * ref Node 0 0
+    adr int 13 1
+      name n (ref Node, string) 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+* ref Node 0 0
+  adr int 13 1
+    name n (ref Node, string) 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name n (ref Node, string) 0 0
+      const t1 (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name n (ref Node, string) 0 0
+    const t1 (8) int 6 0
+ecom: 
+= string 10 1
+  name err string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name err string 0 0
+ecom: 
+call string 10 2
+  name failurestatus fn(e: string): string 11 1
+  seq no type 10 1
+    name e string 0 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name e string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b21 big 0 0
+    const (64) int 6 0
+fn: system
+64: argument drawctxt ref Draw->Context ref 1
+72: argument cmd string ref 1
+80: local e ref exception ref 2
+88: local .b19 big ref 3
+96: local .b20 ref Context ref 3
+104: local n ref Node ref 3
+112: local err string ref 3
+120: local .b21 big ref 2
+128: local .t22 list of ref Listnode ref 1
+generate desc for system
+descmap offset 0
+descmap drawctxt type ref Draw->Context offset 64 (d->offset=64 start=0) returns 64
+descmap cmd type string offset 72 (d->offset=72 start=0) returns 72
+descmap e type ref exception offset 80 (d->offset=80 start=0) returns 80
+descmap .b19 type big offset 88 (d->offset=88 start=0) returns -1
+descmap .b20 type ref Context offset 96 (d->offset=96 start=0) returns 96
+descmap n type ref Node offset 104 (d->offset=104 start=0) returns 104
+descmap err type string offset 112 (d->offset=112 start=0) returns 112
+descmap .b21 type big offset 120 (d->offset=120 start=0) returns -1
+descmap .t22 type list of ref Listnode offset 128 (d->offset=128 start=0) returns 128
+generate desc for e
+descmap offset 0
+descmap n type ref Node offset 104 (d->offset=104 start=0) returns 104
+descmap err type string offset 112 (d->offset=112 start=0) returns 112
+fncom: run 2 4b7d80
+ecom: 
+call no type 10 1
+  name initialise fn() 11 1
+generate desc for big
+ecom: 
+call string 10 3
+  name run fn(ctxt: self ref Context, args: list of ref Listnode, last: int): string 11 1
+  seq nothing 10 3
+    call ref Context 10 2
+      name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+      seq no type 10 1
+        name drawctxt ref Draw->Context 0 0
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+        seq no type 10 1
+          name argv list of string 0 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+generate desc for ref Context
+ecom: 
+call ref Context 10 2
+  name new fn(drawcontext: ref Draw->Context): ref Context 11 1
+  seq no type 10 1
+    name drawctxt ref Draw->Context 0 0
+ecom to: 
+name .b24 ref Context 0 0
+generate desc for big
+ecom: 
+name drawctxt ref Draw->Context 0 0
+ecom to: 
+* ref Draw->Context 8 0
+  + int 15 0
+    name .b25 big 0 0
+    const (64) int 6 0
+ecom: 
+call list of ref Listnode 10 2
+  name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+  seq no type 10 1
+    name argv list of string 0 0
+ecom to: 
+name .t26 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name argv list of string 0 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b25 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b24 ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b23 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Context 10 1
+  name .b24 ref Context 0 0
+  name nil ref Context 1 0
+ecom: 
+name nil ref Context 1 0
+ecom to: 
+name .b24 ref Context 0 0
+ecom: 
+name .t26 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b23 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t26 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t26 list of ref Listnode 0 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b23 big 0 0
+    const (80) int 6 0
+ecom: 
+call string 10 2
+  name failurestatus fn(e: string): string 11 1
+  seq no type 10 1
+    name e string 0 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name e string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b25 big 0 0
+    const (64) int 6 0
+fn: run
+64: argument drawctxt ref Draw->Context ref 1
+72: argument argv list of string ref 1
+80: local e ref exception ref 2
+88: local .b25 big ref 3
+96: local .b23 big ref 2
+104: local .b24 ref Context ref 1
+112: local .t26 list of ref Listnode ref 1
+generate desc for run
+descmap offset 0
+descmap drawctxt type ref Draw->Context offset 64 (d->offset=64 start=0) returns 64
+descmap argv type list of string offset 72 (d->offset=72 start=0) returns 72
+descmap e type ref exception offset 80 (d->offset=80 start=0) returns 80
+descmap .b25 type big offset 88 (d->offset=88 start=0) returns -1
+descmap .b23 type big offset 96 (d->offset=96 start=0) returns -1
+descmap .b24 type ref Context offset 104 (d->offset=104 start=0) returns 104
+descmap .t26 type list of ref Listnode offset 112 (d->offset=112 start=0) returns 112
+fncom: isconsole 2 417d28
+ecom: 
+= (int, Sys->Dir) 10 2
+  tuple (int, Sys->Dir) 10 1
+    seq nothing 10 1
+      name ok1 int 0 0
+      seq nothing 10 1
+        name d1 Sys->Dir 0 0
+  call (int, Sys->Dir) 10 2
+    -> fn(fd: ref Sys->FD): (int, Sys->Dir) 12 1
+      name sys Sys 1 0
+      name fstat nothing 11 1
+    seq no type 10 1
+      name fd ref Sys->FD 0 0
+ecom: 
+call (int, Sys->Dir) 10 2
+  -> fn(fd: ref Sys->FD): (int, Sys->Dir) 12 1
+    name sys Sys 1 0
+    name fstat nothing 11 1
+  seq no type 10 1
+    name fd ref Sys->FD 0 0
+ecom to: 
+name ok1 (int, Sys->Dir) 0 0
+generate desc for big
+ecom: 
+name fd ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b27 big 0 0
+    const (64) int 6 0
+ecom: 
+= (int, Sys->Dir) 10 2
+  tuple (int, Sys->Dir) 10 1
+    seq nothing 10 1
+      name ok2 int 0 0
+      seq nothing 10 1
+        name d2 Sys->Dir 0 0
+  call (int, Sys->Dir) 10 2
+    -> fn(s: string): (int, Sys->Dir) 12 1
+      name sys Sys 1 0
+      name stat nothing 11 1
+    seq no type 10 1
+      const /dev/cons string 1 0
+ecom: 
+call (int, Sys->Dir) 10 2
+  -> fn(s: string): (int, Sys->Dir) 12 1
+    name sys Sys 1 0
+    name stat nothing 11 1
+  seq no type 10 1
+    const /dev/cons string 1 0
+ecom to: 
+name ok2 (int, Sys->Dir) 0 0
+generate desc for big
+ecom: 
+const /dev/cons string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b27 big 0 0
+    const (64) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+&& int 10 2
+  == int 10 1
+    * int 0 0
+      + int 13 1
+        adr int 13 1
+          name d1 Sys->Dir 0 0
+        const dtype (72) int 6 0
+    * int 0 0
+      + int 13 1
+        adr int 13 1
+          name d2 Sys->Dir 0 0
+        const dtype (72) int 6 0
+  == int 10 1
+    * big 0 0
+      + int 13 1
+        adr int 13 1
+          name d1 Sys->Dir 0 0
+        const (32) int 6 0
+    * big 0 0
+      + int 13 1
+        adr int 13 1
+          name d2 Sys->Dir 0 0
+        const (32) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+fn: isconsole
+64: argument fd ref Sys->FD ref 1
+72: local ok1 int ref 2
+80: local d1 Sys->Dir ref 3
+160: local ok2 int ref 2
+168: local d2 Sys->Dir ref 3
+248: local .b27 big ref 2
+generate desc for isconsole
+descmap offset 0
+descmap fd type ref Sys->FD offset 64 (d->offset=64 start=0) returns 64
+descmap ok1 type int offset 72 (d->offset=72 start=0) returns -1
+descmap adt offset 80
+descmap offset 80
+descmap name type string offset 80 (d->offset=0 start=80) returns 80
+descmap uid type string offset 88 (d->offset=8 start=80) returns 88
+descmap gid type string offset 96 (d->offset=16 start=80) returns 96
+descmap muid type string offset 104 (d->offset=24 start=80) returns 104
+descmap adt offset 112
+descmap offset 112
+descmap path type big offset 112 (d->offset=0 start=112) returns -1
+descmap vers type int offset 120 (d->offset=8 start=112) returns -1
+descmap qtype type int offset 124 (d->offset=12 start=112) returns -1
+descmap qid type Sys->Qid offset 112 (d->offset=32 start=80) returns -1
+descmap mode type int offset 128 (d->offset=48 start=80) returns -1
+descmap atime type int offset 132 (d->offset=52 start=80) returns -1
+descmap mtime type int offset 136 (d->offset=56 start=80) returns -1
+descmap length type big offset 144 (d->offset=64 start=80) returns -1
+descmap dtype type int offset 152 (d->offset=72 start=80) returns -1
+descmap dev type int offset 156 (d->offset=76 start=80) returns -1
+descmap d1 type Sys->Dir offset 80 (d->offset=80 start=0) returns 104
+descmap ok2 type int offset 160 (d->offset=160 start=0) returns -1
+descmap adt offset 168
+descmap offset 168
+descmap name type string offset 168 (d->offset=0 start=168) returns 168
+descmap uid type string offset 176 (d->offset=8 start=168) returns 176
+descmap gid type string offset 184 (d->offset=16 start=168) returns 184
+descmap muid type string offset 192 (d->offset=24 start=168) returns 192
+descmap adt offset 200
+descmap offset 200
+descmap path type big offset 200 (d->offset=0 start=200) returns -1
+descmap vers type int offset 208 (d->offset=8 start=200) returns -1
+descmap qtype type int offset 212 (d->offset=12 start=200) returns -1
+descmap qid type Sys->Qid offset 200 (d->offset=32 start=168) returns -1
+descmap mode type int offset 216 (d->offset=48 start=168) returns -1
+descmap atime type int offset 220 (d->offset=52 start=168) returns -1
+descmap mtime type int offset 224 (d->offset=56 start=168) returns -1
+descmap length type big offset 232 (d->offset=64 start=168) returns -1
+descmap dtype type int offset 240 (d->offset=72 start=168) returns -1
+descmap dev type int offset 244 (d->offset=76 start=168) returns -1
+descmap d2 type Sys->Dir offset 168 (d->offset=168 start=0) returns 192
+descmap .b27 type big offset 248 (d->offset=248 start=0) returns -1
+fncom: runscript 4 417de8
+ecom: 
+= ref Sys->FD 10 2
+  name fd ref Sys->FD 0 0
+  call ref Sys->FD 10 2
+    -> fn(s: string, mode: int): ref Sys->FD 12 1
+      name sys Sys 1 0
+      name open nothing 11 1
+    seq no type 10 1
+      name path string 0 0
+      seq no type 10 1
+        const OREAD (0) int 6 0
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(s: string, mode: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name open nothing 11 1
+  seq no type 10 1
+    name path string 0 0
+    seq no type 10 1
+      const OREAD (0) int 6 0
+ecom to: 
+name fd ref Sys->FD 0 0
+generate desc for big
+ecom: 
+name path string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (64) int 6 0
+ecom: 
+const OREAD (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (72) int 6 0
+ecom: 
+call no type 10 2
+  name runfile fn(ctxt: ref Context, fd: ref Sys->FD, path: string, args: list of ref Listnode) 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name fd ref Sys->FD 0 0
+      seq no type 10 1
+        name path string 0 0
+        seq no type 10 1
+          name args list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (64) int 6 0
+ecom: 
+name fd ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (72) int 6 0
+ecom: 
+name path string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (80) int 6 0
+ecom: 
+name args list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (88) int 6 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      const bad script path string 1 0
+      seq no type 10 2
+        call string 10 2
+          -> fn(s: string, nil: string, *): string 12 1
+            name sys Sys 1 0
+            name sprint nothing 11 1
+          seq no type 10 1
+            const sh: cannot open %s: %r string 1 0
+            seq no type 10 1
+              name path string 0 0
+generate desc for big
+ecom: 
+call string 10 2
+  -> fn(s: string, nil: string, *): string 12 1
+    name sys Sys 1 0
+    name sprint nothing 11 1
+  seq no type 10 1
+    const sh: cannot open %s: %r string 1 0
+    seq no type 10 1
+      name path string 0 0
+ecom to: 
+name .t29 string 0 0
+generate desc for Sys->sprint
+descmap offset 0
+descmap s type string offset 64 (d->offset=64 start=0) returns 64
+descmap type string offset 72 returns 72
+generate desc for big
+ecom: 
+const sh: cannot open %s: %r string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b30 big 0 0
+    const (64) int 6 0
+ecom: 
+name path string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b30 big 0 0
+    const (72) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad script path string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t29 string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b28 big 0 0
+    const (80) int 6 0
+ecom: 
+= string 10 1
+  name .t29 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t29 string 0 0
+ecom: 
+= ref Sys->FD 10 1
+  name fd ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name fd ref Sys->FD 0 0
+ecom: 
+raise nothing 10 1
+  name .ex0 exception 0 0
+fn: runscript
+64: argument ctxt ref Context ref 2
+72: argument path string ref 3
+80: argument args list of ref Listnode ref 1
+88: argument reporterr int ref 2
+92: local .ex0 ref exception ref 1
+96: local .b28 big ref 3
+104: local fd ref Sys->FD ref 3
+112: local .b30 big ref 1
+120: local .t29 string ref 1
+generate desc for runscript
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap path type string offset 72 (d->offset=72 start=0) returns 72
+descmap args type list of ref Listnode offset 80 (d->offset=80 start=0) returns 80
+descmap reporterr type int offset 88 (d->offset=88 start=0) returns -1
+descmap .ex0 type ref exception offset 92 (d->offset=92 start=0) returns 96
+descmap .b28 type big offset 96 (d->offset=96 start=0) returns -1
+descmap fd type ref Sys->FD offset 104 (d->offset=104 start=0) returns 104
+descmap .b30 type big offset 112 (d->offset=112 start=0) returns -1
+descmap .t29 type string offset 120 (d->offset=120 start=0) returns 120
+generate desc for .ex0
+descmap offset 0
+descmap fd type ref Sys->FD offset 104 (d->offset=104 start=0) returns 104
+fncom: runfile 3 417ea8
+ecom: 
+call no type 10 2
+  name push fn(ctxt: self ref Context) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (64) int 6 0
+ecom: 
+call no type 10 2
+  name setlocal fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 11 1
+  seq nothing 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      const 0 string 1 0
+      seq no type 10 2
+        call list of ref Listnode 10 2
+          name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+          seq no type 10 1
+            :: list of string 10 1
+              name path string 0 0
+              name nil polymorphic type 1 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name stringlist2list fn(sl: list of string): list of ref Listnode 11 1
+  seq no type 10 1
+    :: list of string 10 1
+      name path string 0 0
+      name nil polymorphic type 1 0
+ecom to: 
+name .t32 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+:: list of string 10 1
+  name path string 0 0
+  name nil polymorphic type 1 0
+ecom to: 
+* list of string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t34 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (64) int 6 0
+ecom: 
+const 0 string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t32 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t32 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t32 list of ref Listnode 0 0
+ecom: 
+call no type 10 2
+  name setlocal fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const * string 1 0
+      seq no type 10 1
+        name args list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+const * string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+name args list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+ecom: 
+= ref YYLEX 10 2
+  name lex ref YYLEX 0 0
+  call ref YYLEX 10 2
+    name initfile fn(fd: ref Sys->FD, path: string): ref YYLEX 11 1
+    seq no type 10 1
+      name fd ref Sys->FD 0 0
+      seq no type 10 1
+        name path string 0 0
+ecom: 
+call ref YYLEX 10 2
+  name initfile fn(fd: ref Sys->FD, path: string): ref YYLEX 11 1
+  seq no type 10 1
+    name fd ref Sys->FD 0 0
+    seq no type 10 1
+      name path string 0 0
+ecom to: 
+name lex ref YYLEX 0 0
+generate desc for big
+ecom: 
+name fd ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+name path string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of string 10 1
+  name prompt list of string 0 0
+    name lex ref YYLEX 0 0
+  :: list of string 10 1
+    const  string 1 0
+    :: list of string 10 1
+      const  string 1 0
+      name nil polymorphic type 1 0
+ecom: 
+:: list of string 10 1
+  const  string 1 0
+  :: list of string 10 1
+    const  string 1 0
+    name nil polymorphic type 1 0
+ecom to: 
+name prompt list of string 0 0
+  name lex ref YYLEX 0 0
+ecom: 
+:: list of string 10 1
+  const  string 1 0
+  name nil polymorphic type 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t34 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= int 10 1
+  name interactive int 0 0
+  & int 10 1
+    * int 10 1
+      + int 10 1
+        * ref Localenv 10 1
+          + int 10 1
+            * ref Environment 8 0
+              name ctxt ref Context 0 0
+            const localenv (24) int 6 0
+        const flags (16) int 6 0
+    const INTERACTIVE (1) int 6 0
+ecom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Localenv 10 1
+        + int 10 1
+          * ref Environment 8 0
+            name ctxt ref Context 0 0
+          const localenv (24) int 6 0
+      const flags (16) int 6 0
+  const INTERACTIVE (1) int 6 0
+ecom to: 
+name interactive int 0 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Localenv 10 1
+      + int 10 1
+        * ref Environment 8 0
+          name ctxt ref Context 0 0
+        const localenv (24) int 6 0
+    const flags (16) int 6 0
+generate desc for ref Localenv
+generate desc for ref Localenv
+	desc	$-1,8,"80"
+ecom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+ecom to: 
+name .b35 ref Localenv 0 0
+eacom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+generate desc for ref Environment
+generate desc for ref Environment
+	desc	$-1,8,"80"
+ecom: 
+* ref Environment 8 0
+  name ctxt ref Context 0 0
+ecom to: 
+name .b35 ref Environment 0 0
+ecom: 
+= ref Localenv 10 1
+  name .b35 ref Localenv 0 0
+  name nil ref Localenv 1 0
+ecom: 
+name nil ref Localenv 1 0
+ecom to: 
+name .b35 ref Localenv 0 0
+ecom: 
+= list of string 10 2
+  name prompt list of string 0 0
+  call list of string 10 2
+    name list2stringlist fn(nl: list of ref Listnode): list of string 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name get fn(ctxt: self ref Context, name: string): list of ref Listnode 11 1
+        seq nothing 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            const prompt string 1 0
+ecom: 
+call list of string 10 2
+  name list2stringlist fn(nl: list of ref Listnode): list of string 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name get fn(ctxt: self ref Context, name: string): list of ref Listnode 11 1
+      seq nothing 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          const prompt string 1 0
+ecom to: 
+name prompt list of string 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name get fn(ctxt: self ref Context, name: string): list of ref Listnode 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const prompt string 1 0
+ecom to: 
+name .t34 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (64) int 6 0
+ecom: 
+const prompt string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t34 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t34 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t34 list of ref Listnode 0 0
+ecom: 
+= list of string 10 1
+  name prompt list of string 0 0
+  :: list of string 10 1
+    const ;  string 1 0
+    :: list of string 10 1
+      const  string 1 0
+      name nil polymorphic type 1 0
+ecom: 
+:: list of string 10 1
+  const ;  string 1 0
+  :: list of string 10 1
+    const  string 1 0
+    name nil polymorphic type 1 0
+ecom to: 
+name prompt list of string 0 0
+ecom: 
+:: list of string 10 1
+  const  string 1 0
+  name nil polymorphic type 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t34 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+      name sys Sys 1 0
+      name fprint nothing 11 1
+    seq no type 10 2
+      call ref Sys->FD 10 2
+        -> fn(fd: int): ref Sys->FD 12 1
+          name sys Sys 1 0
+          name fildes nothing 11 1
+        seq no type 10 1
+          const (2) int 6 0
+      seq no type 10 1
+        const %s string 1 0
+        seq no type 10 1
+          hd string 10 1
+            name prompt list of string 0 0
+ecom: 
+call int 10 2
+  -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+    name sys Sys 1 0
+    name fprint nothing 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (2) int 6 0
+    seq no type 10 1
+      const %s string 1 0
+      seq no type 10 1
+        hd string 10 1
+          name prompt list of string 0 0
+ecom to: 
+name .t36 int 0 0
+generate desc for Sys->fprint
+descmap offset 0
+descmap fd type ref Sys->FD offset 64 (d->offset=64 start=0) returns 64
+descmap s type string offset 72 (d->offset=72 start=0) returns 72
+descmap type string offset 80 returns 80
+generate desc for big
+generate desc for ref Sys->FD
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (2) int 6 0
+ecom to: 
+name .b35 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (2) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b35 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b35 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b35 ref Sys->FD 0 0
+ecom: 
+const %s string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+hd string 10 1
+  name prompt list of string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+eacom: 
+tl list of string 10 1
+  name prompt list of string 0 0
+ecom: 
+tl list of string 10 1
+  name prompt list of string 0 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t34 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 2
+  name prompt list of string 0 0
+  :: list of string 10 2
+    hd string 10 1
+      name prompt list of string 0 0
+    :: list of string 10 1
+      const  string 1 0
+      name nil polymorphic type 1 0
+ecom: 
+:: list of string 10 2
+  hd string 10 1
+    name prompt list of string 0 0
+  :: list of string 10 1
+    const  string 1 0
+    name nil polymorphic type 1 0
+ecom to: 
+name prompt list of string 0 0
+eacom: 
+hd string 10 1
+  name prompt list of string 0 0
+ecom: 
+hd string 10 1
+  name prompt list of string 0 0
+ecom to: 
+name .t34 string 0 0
+ecom: 
+:: list of string 10 1
+  const  string 1 0
+  name nil polymorphic type 1 0
+ecom to: 
+name .t32 list of string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t32 list of string 0 0
+ecom: 
+= string 10 1
+  name .t34 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t34 string 0 0
+ecom: 
+= list of string 10 1
+  name .t32 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t32 list of string 0 0
+ecom: 
+= (ref Node, string) 10 2
+  tuple (ref Node, string) 10 1
+    seq nothing 10 1
+      name n ref Node 0 0
+      seq nothing 10 1
+        name err string 0 0
+  call (ref Node, string) 10 2
+    name doparse fn(l: ref YYLEX, prompt: string, showline: int): (ref Node, string) 11 1
+    seq no type 10 2
+      name lex ref YYLEX 0 0
+      seq no type 10 2
+        hd string 10 1
+          tl list of string 10 1
+            name prompt list of string 0 0
+        seq no type 10 1
+          ! int 10 1
+            name interactive int 0 0
+ecom: 
+call (ref Node, string) 10 2
+  name doparse fn(l: ref YYLEX, prompt: string, showline: int): (ref Node, string) 11 1
+  seq no type 10 2
+    name lex ref YYLEX 0 0
+    seq no type 10 2
+      hd string 10 1
+        tl list of string 10 1
+          name prompt list of string 0 0
+      seq no type 10 1
+        ! int 10 1
+          name interactive int 0 0
+ecom to: 
+name n (ref Node, string) 0 0
+generate desc for big
+ecom: 
+name lex ref YYLEX 0 0
+ecom to: 
+* ref YYLEX 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+hd string 10 1
+  tl list of string 10 1
+    name prompt list of string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+eacom: 
+tl list of string 10 1
+  name prompt list of string 0 0
+ecom: 
+tl list of string 10 1
+  name prompt list of string 0 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+= list of string 10 1
+  name .t34 list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name .t34 list of string 0 0
+ecom: 
+! int 10 1
+  name interactive int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+ecom: 
+used int 10 2
+  call int 10 2
+    -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+      name sys Sys 1 0
+      name fprint nothing 11 1
+    seq no type 10 2
+      call ref Sys->FD 10 2
+        -> fn(fd: int): ref Sys->FD 12 1
+          name sys Sys 1 0
+          name fildes nothing 11 1
+        seq no type 10 1
+          const (2) int 6 0
+      seq no type 10 1
+        const sh: %s
+ string 1 0
+        seq no type 10 1
+          name err string 0 0
+ecom: 
+call int 10 2
+  -> fn(fd: ref Sys->FD, s: string, nil: string, *): int 12 1
+    name sys Sys 1 0
+    name fprint nothing 11 1
+  seq no type 10 2
+    call ref Sys->FD 10 2
+      -> fn(fd: int): ref Sys->FD 12 1
+        name sys Sys 1 0
+        name fildes nothing 11 1
+      seq no type 10 1
+        const (2) int 6 0
+    seq no type 10 1
+      const sh: %s
+ string 1 0
+      seq no type 10 1
+        name err string 0 0
+ecom to: 
+name .t36 int 0 0
+generate desc for Sys->fprint
+descmap offset 0
+descmap fd type ref Sys->FD offset 64 (d->offset=64 start=0) returns 64
+descmap s type string offset 72 (d->offset=72 start=0) returns 72
+descmap type string offset 80 returns 80
+generate desc for big
+generate desc for ref Sys->FD
+ecom: 
+call ref Sys->FD 10 2
+  -> fn(fd: int): ref Sys->FD 12 1
+    name sys Sys 1 0
+    name fildes nothing 11 1
+  seq no type 10 1
+    const (2) int 6 0
+ecom to: 
+name .b35 ref Sys->FD 0 0
+generate desc for big
+ecom: 
+const (2) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b31 big 0 0
+    const (64) int 6 0
+ecom: 
+name .b35 ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  name .b35 ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name .b35 ref Sys->FD 0 0
+ecom: 
+const sh: %s
+ string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+name err string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+ecom: 
+raise nothing 10 1
+  const fail:parse error string 1 0
+ecom: 
+= string 10 2
+  name laststatus string 0 0
+  call string 10 2
+    name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name n ref Node 0 0
+        seq no type 10 1
+          const (0) int 6 0
+ecom: 
+call string 10 2
+  name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+name laststatus string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+ecom: 
+= string 10 2
+  name laststatus string 0 0
+  call string 10 2
+    name failurestatus fn(e: string): string 11 1
+    seq no type 10 1
+      name e2 string 0 0
+ecom: 
+call string 10 2
+  name failurestatus fn(e: string): string 11 1
+  seq no type 10 1
+    name e2 string 0 0
+ecom to: 
+name laststatus string 0 0
+generate desc for big
+ecom: 
+name e2 string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+= string 10 2
+  name laststatus string 0 0
+  call string 10 2
+    name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name n ref Node 0 0
+        seq no type 10 1
+          const (0) int 6 0
+ecom: 
+call string 10 2
+  name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+name laststatus string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (80) int 6 0
+ecom: 
+used string 10 2
+  call string 10 2
+    name setstatus fn(ctxt: ref Context, val: string): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name laststatus string 0 0
+ecom: 
+call string 10 2
+  name setstatus fn(ctxt: ref Context, val: string): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name laststatus string 0 0
+ecom to: 
+name .t34 string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+name laststatus string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (72) int 6 0
+ecom: 
+= string 10 1
+  name .t34 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t34 string 0 0
+eacom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Localenv 10 1
+        + int 10 1
+          * ref Environment 8 0
+            name ctxt ref Context 0 0
+          const localenv (24) int 6 0
+      const flags (16) int 6 0
+  const ERROREXIT (8) int 6 0
+ecom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Localenv 10 1
+        + int 10 1
+          * ref Environment 8 0
+            name ctxt ref Context 0 0
+          const localenv (24) int 6 0
+      const flags (16) int 6 0
+  const ERROREXIT (8) int 6 0
+ecom to: 
+name .t36 int 0 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Localenv 10 1
+      + int 10 1
+        * ref Environment 8 0
+          name ctxt ref Context 0 0
+        const localenv (24) int 6 0
+    const flags (16) int 6 0
+generate desc for ref Localenv
+ecom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+ecom to: 
+name .b35 ref Localenv 0 0
+eacom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+generate desc for ref Environment
+ecom: 
+* ref Environment 8 0
+  name ctxt ref Context 0 0
+ecom to: 
+name .b35 ref Environment 0 0
+ecom: 
+= ref Localenv 10 1
+  name .b35 ref Localenv 0 0
+  name nil ref Localenv 1 0
+ecom: 
+name nil ref Localenv 1 0
+ecom to: 
+name .b35 ref Localenv 0 0
+ecom: 
+= ref Node 10 1
+  * ref Node 0 0
+    adr int 13 1
+      name n (ref Node, string) 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+* ref Node 0 0
+  adr int 13 1
+    name n (ref Node, string) 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name n (ref Node, string) 0 0
+      const t1 (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name n (ref Node, string) 0 0
+    const t1 (8) int 6 0
+ecom: 
+= string 10 1
+  name err string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name err string 0 0
+ecom: 
+= ref Node 10 1
+  * ref Node 0 0
+    adr int 13 1
+      name n (ref Node, string) 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+* ref Node 0 0
+  adr int 13 1
+    name n (ref Node, string) 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name n (ref Node, string) 0 0
+      const t1 (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name n (ref Node, string) 0 0
+    const t1 (8) int 6 0
+ecom: 
+= string 10 1
+  name err string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name err string 0 0
+ecom: 
+raise nothing 10 1
+  + string 10 1
+    const fail: string 1 0
+    name laststatus string 0 0
+eacom: 
++ string 10 1
+  const fail: string 1 0
+  name laststatus string 0 0
+ecom: 
++ string 10 1
+  const fail: string 1 0
+  name laststatus string 0 0
+ecom to: 
+name .t34 string 0 0
+ecom: 
+= string 10 1
+  name .t34 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t34 string 0 0
+ecom: 
+call no type 10 2
+  name pop fn(ctxt: self ref Context) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+= string 10 1
+  name laststatus string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name laststatus string 0 0
+ecom: 
+= list of string 10 1
+  name prompt list of string 0 0
+  name nil list of string 1 0
+ecom: 
+name nil list of string 1 0
+ecom to: 
+name prompt list of string 0 0
+ecom: 
+= ref YYLEX 10 1
+  name lex ref YYLEX 0 0
+  name nil ref YYLEX 1 0
+ecom: 
+name nil ref YYLEX 1 0
+ecom to: 
+name lex ref YYLEX 0 0
+ecom: 
+call no type 10 2
+  name pop fn(ctxt: self ref Context) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b33 big 0 0
+    const (64) int 6 0
+ecom: 
+raise nothing 10 1
+  name .ex1 exception 0 0
+fn: runfile
+64: argument ctxt ref Context ref 15
+72: argument fd ref Sys->FD ref 1
+80: argument path string ref 2
+88: argument args list of ref Listnode ref 1
+96: local interactive int ref 5
+100: local e2 ref exception ref 2
+104: local .ex1 ref exception ref 1
+108: local .t36 int ref 1
+112: local .b33 big ref 13
+120: local prompt list of string ref 9
+128: local laststatus string ref 7
+136: local .b35 ref Localenv ref 6
+144: local .b31 big ref 5
+152: local n ref Node ref 4
+160: local err string ref 3
+168: local lex ref YYLEX ref 3
+176: local .t32 list of ref Listnode ref 1
+184: local .t34 list of string ref 1
+generate desc for runfile
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap fd type ref Sys->FD offset 72 (d->offset=72 start=0) returns 72
+descmap path type string offset 80 (d->offset=80 start=0) returns 80
+descmap args type list of ref Listnode offset 88 (d->offset=88 start=0) returns 88
+descmap interactive type int offset 96 (d->offset=96 start=0) returns -1
+descmap e2 type ref exception offset 100 (d->offset=100 start=0) returns 104
+descmap .ex1 type ref exception offset 104 (d->offset=104 start=0) returns 104
+descmap .t36 type int offset 108 (d->offset=108 start=0) returns -1
+descmap .b33 type big offset 112 (d->offset=112 start=0) returns -1
+descmap prompt type list of string offset 120 (d->offset=120 start=0) returns 120
+descmap laststatus type string offset 128 (d->offset=128 start=0) returns 128
+descmap .b35 type ref Localenv offset 136 (d->offset=136 start=0) returns 136
+descmap .b31 type big offset 144 (d->offset=144 start=0) returns -1
+descmap n type ref Node offset 152 (d->offset=152 start=0) returns 152
+descmap err type string offset 160 (d->offset=160 start=0) returns 160
+descmap lex type ref YYLEX offset 168 (d->offset=168 start=0) returns 168
+descmap .t32 type list of ref Listnode offset 176 (d->offset=176 start=0) returns 176
+descmap .t34 type list of string offset 184 (d->offset=184 start=0) returns 184
+generate desc for .ex1
+descmap offset 0
+descmap n type ref Node offset 152 (d->offset=152 start=0) returns 152
+descmap err type string offset 160 (d->offset=160 start=0) returns 160
+descmap laststatus type string offset 128 (d->offset=128 start=0) returns 128
+descmap prompt type list of string offset 120 (d->offset=120 start=0) returns 120
+descmap lex type ref YYLEX offset 168 (d->offset=168 start=0) returns 168
+fncom: nonexistent 5 417f68
+ecom: 
+= array of string 10 2
+  name errs array of string 0 0
+  array array of string 10 2
+    const (2) int 6 0
+    seq array initializers 10 2
+      elem string 10 1
+        seq nothing 10 1
+          const (0) int 6 0
+        const does not exist string 1 0
+      seq no type 10 1
+        elem string 10 1
+          seq nothing 10 1
+            const (1) int 6 0
+          const directory entry not found string 1 0
+ecom: 
+array array of string 10 2
+  const (2) int 6 0
+  seq array initializers 10 2
+    elem string 10 1
+      seq nothing 10 1
+        const (0) int 6 0
+      const does not exist string 1 0
+    seq no type 10 1
+      elem string 10 1
+        seq nothing 10 1
+          const (1) int 6 0
+        const directory entry not found string 1 0
+ecom to: 
+name errs array of string 0 0
+generate desc for string
+generate desc for string
+	desc	$-1,8,"80"
+generate desc for big
+ecom: 
+indx big 10 0
+  name errs array of string 0 0
+  const (0) int 6 0
+ecom to: 
+name .b37 big 0 0
+ecom: 
+const does not exist string 1 0
+ecom to: 
+* string 8 0
+  name .b37 big 0 0
+ecom: 
+indx big 10 0
+  name errs array of string 0 0
+  const (1) int 6 0
+ecom to: 
+name .b37 big 0 0
+ecom: 
+const directory entry not found string 1 0
+ecom to: 
+* string 8 0
+  name .b37 big 0 0
+ecom: 
+= int 10 1
+  name i int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name i int 0 0
+eacom: 
+len int 10 1
+  name errs array of string 0 0
+ecom: 
+len int 10 1
+  name errs array of string 0 0
+ecom to: 
+name .t38 int 0 0
+ecom: 
+= int 10 1
+  name j int 0 0
+  len int 10 1
+    * string 10 1
+      indx big 10 1
+        name errs array of string 0 0
+        name i int 0 0
+ecom: 
+len int 10 1
+  * string 10 1
+    indx big 10 1
+      name errs array of string 0 0
+      name i int 0 0
+ecom to: 
+name j int 0 0
+eacom: 
+* string 10 1
+  indx big 10 1
+    name errs array of string 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name errs array of string 0 0
+  name i int 0 0
+ecom to: 
+name .b37 big 0 0
+eacom: 
+len int 10 1
+  name e string 0 0
+ecom: 
+len int 10 1
+  name e string 0 0
+ecom to: 
+name .t38 int 0 0
+eacom: 
+slice string 10 2
+  name e string 0 0
+  seq no type 10 2
+    - int 10 1
+      len int 10 1
+        name e string 0 0
+      name j int 0 0
+    nothing no type 10 1
+ecom: 
+slice string 10 2
+  name e string 0 0
+  seq no type 10 2
+    - int 10 1
+      len int 10 1
+        name e string 0 0
+      name j int 0 0
+    nothing no type 10 1
+ecom to: 
+name .t39 string 0 0
+ecom: 
+len int 10 1
+  name e string 0 0
+ecom to: 
+name .t38 int 0 0
+eacom: 
+- int 10 1
+  len int 10 1
+    name e string 0 0
+  name j int 0 0
+ecom: 
+- int 10 1
+  len int 10 1
+    name e string 0 0
+  name j int 0 0
+ecom to: 
+name .t40 int 0 0
+ecom: 
+len int 10 1
+  name e string 0 0
+ecom to: 
+name .t40 int 0 0
+ecom: 
+name e string 0 0
+ecom to: 
+name .t39 string 0 0
+ecom: 
+* string 10 1
+  indx big 10 1
+    name errs array of string 0 0
+    name i int 0 0
+ecom to: 
+name .t41 string 0 0
+eacom: 
+* string 10 1
+  indx big 10 1
+    name errs array of string 0 0
+    name i int 0 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name errs array of string 0 0
+  name i int 0 0
+ecom to: 
+name .b37 big 0 0
+ecom: 
+= string 10 1
+  name .t39 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t39 string 0 0
+ecom: 
+= string 10 1
+  name .t41 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t41 string 0 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+ecom: 
+++ int 10 1
+  name i int 0 0
+  const (1) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  name .ret int 0 0
+fn: nonexistent
+64: argument e string ref 3
+72: local i int ref 5
+76: local j int ref 3
+80: local .t38 int ref 1
+84: local .t40 int ref 1
+88: local errs array of string ref 4
+96: local .b37 big ref 3
+104: local .t39 string ref 1
+112: local .t41 string ref 1
+generate desc for nonexistent
+descmap offset 0
+descmap e type string offset 64 (d->offset=64 start=0) returns 64
+descmap i type int offset 72 (d->offset=72 start=0) returns -1
+descmap j type int offset 76 (d->offset=76 start=0) returns -1
+descmap .t38 type int offset 80 (d->offset=80 start=0) returns -1
+descmap .t40 type int offset 84 (d->offset=84 start=0) returns -1
+descmap errs type array of string offset 88 (d->offset=88 start=0) returns 88
+descmap .b37 type big offset 96 (d->offset=96 start=0) returns -1
+descmap .t39 type string offset 104 (d->offset=104 start=0) returns 104
+descmap .t41 type string offset 112 (d->offset=112 start=0) returns 112
+fncom: pipe2cmd 2 418028
+fncom: walk 5 4180e8
+ecom: 
+= string 10 2
+  name status string 0 0
+  call string 10 2
+    name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 1
+          const (0) int 6 0
+ecom: 
+call string 10 2
+  name walk fn(ctxt: ref Context, n: ref Node, last: int): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        const (0) int 6 0
+ecom to: 
+name status string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (72) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (80) int 6 0
+eacom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Localenv 10 1
+        + int 10 1
+          * ref Environment 8 0
+            name ctxt ref Context 0 0
+          const localenv (24) int 6 0
+      const flags (16) int 6 0
+  const ERROREXIT (8) int 6 0
+ecom: 
+& int 10 1
+  * int 10 1
+    + int 10 1
+      * ref Localenv 10 1
+        + int 10 1
+          * ref Environment 8 0
+            name ctxt ref Context 0 0
+          const localenv (24) int 6 0
+      const flags (16) int 6 0
+  const ERROREXIT (8) int 6 0
+ecom to: 
+name .t43 int 0 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Localenv 10 1
+      + int 10 1
+        * ref Environment 8 0
+          name ctxt ref Context 0 0
+        const localenv (24) int 6 0
+    const flags (16) int 6 0
+generate desc for ref Localenv
+ecom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+ecom to: 
+name .b44 ref Localenv 0 0
+eacom: 
+* ref Localenv 10 1
+  + int 10 1
+    * ref Environment 8 0
+      name ctxt ref Context 0 0
+    const localenv (24) int 6 0
+generate desc for ref Environment
+ecom: 
+* ref Environment 8 0
+  name ctxt ref Context 0 0
+ecom to: 
+name .b44 ref Environment 0 0
+ecom: 
+= ref Localenv 10 1
+  name .b44 ref Localenv 0 0
+  name nil ref Localenv 1 0
+ecom: 
+name nil ref Localenv 1 0
+ecom to: 
+name .b44 ref Localenv 0 0
+ecom: 
+raise nothing 10 1
+  + string 10 1
+    const fail: string 1 0
+    name status string 0 0
+eacom: 
++ string 10 1
+  const fail: string 1 0
+  name status string 0 0
+ecom: 
++ string 10 1
+  const fail: string 1 0
+  name status string 0 0
+ecom to: 
+name .t45 string 0 0
+ecom: 
+= string 10 1
+  name .t45 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t45 string 0 0
+ecom: 
+used string 10 2
+  call string 10 2
+    name setstatus fn(ctxt: ref Context, val: string): string 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name status string 0 0
+ecom: 
+call string 10 2
+  name setstatus fn(ctxt: ref Context, val: string): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name status string 0 0
+ecom to: 
+name .t45 string 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (64) int 6 0
+ecom: 
+name status string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (72) int 6 0
+ecom: 
+= string 10 1
+  name .t45 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t45 string 0 0
+ecom: 
+= ref Node 10 1
+  name n ref Node 0 0
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const right (16) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+name n ref Node 0 0
+ecom: 
+= string 10 1
+  name status string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name status string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+call string 10 2
+  name waitfor fn(ctxt: ref Context, pids: list of int): string 11 1
+  seq no type 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      call list of int 10 2
+        name walkpipeline fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 11 1
+        seq no type 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            name n ref Node 0 0
+            seq no type 10 1
+              name nil ref Sys->FD 1 0
+              seq no type 10 1
+                const (-1) int 6 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+call list of int 10 2
+  name walkpipeline fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name nil ref Sys->FD 1 0
+        seq no type 10 1
+          const (-1) int 6 0
+ecom to: 
+name .t45 list of int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (72) int 6 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (80) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (88) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (64) int 6 0
+ecom: 
+name .t45 list of int 0 0
+ecom to: 
+* list of int 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of int 10 1
+  name .t45 list of int 0 0
+  name nil list of int 1 0
+ecom: 
+name nil list of int 1 0
+ecom to: 
+name .t45 list of int 0 0
+ecom: 
+used list of ref Listnode 10 2
+  call list of ref Listnode 10 2
+    name assign fn(ctxt: ref Context, n: ref Node): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name n ref Node 0 0
+ecom: 
+call list of ref Listnode 10 2
+  name assign fn(ctxt: ref Context, n: ref Node): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t45 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+= int 10 1
+  name bg int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name bg int 0 0
+ecom: 
+= int 10 1
+  name bg int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name bg int 0 0
+ecom: 
+= ref Node 10 3
+  name n ref Node 0 0
+  if ref Node 10 3
+    || int 10 2
+      == int 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        name nil ref Node 1 0
+      != int 10 1
+        * int 10 1
+          * ref Node 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const left (8) int 6 0
+        const n_PIPE (9) int 6 0
+    seq ref Node 10 2
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      ref ref Node 10 2
+        tuple Node 10 2
+          seq no type 10 2
+            const n_ADJ (10) int 6 0
+            seq no type 10 2
+              ref ref Node 10 1
+                tuple Node 10 1
+                  seq no type 10 1
+                    const n_BLOCK (0) int 6 0
+                    seq no type 10 1
+                      * ref Node 8 0
+                        + int 15 1
+                          name n ref Node 0 0
+                          const left (8) int 6 0
+                      seq no type 10 1
+                        name nil ref Node 1 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+                          seq no type 10 1
+                            name nil polymorphic type 1 0
+              seq no type 10 2
+                ref ref Node 10 2
+                  tuple Node 10 2
+                    seq no type 10 2
+                      const n_VAR (1) int 6 0
+                      seq no type 10 2
+                        ref ref Node 10 1
+                          tuple Node 10 1
+                            seq no type 10 1
+                              const n_WORD (11) int 6 0
+                              seq no type 10 1
+                                name nil polymorphic type 1 0
+                                seq no type 10 1
+                                  name nil polymorphic type 1 0
+                                  seq no type 10 1
+                                    const * string 1 0
+                                    seq no type 10 1
+                                      name nil polymorphic type 1 0
+                        seq no type 10 1
+                          name nil ref Node 1 0
+                          seq no type 10 1
+                            name nil polymorphic type 1 0
+                            seq no type 10 1
+                              name nil polymorphic type 1 0
+                seq no type 10 1
+                  name nil polymorphic type 1 0
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+ecom: 
+if ref Node 10 3
+  || int 10 2
+    == int 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      name nil ref Node 1 0
+    != int 10 1
+      * int 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+      const n_PIPE (9) int 6 0
+  seq ref Node 10 2
+    * ref Node 8 0
+      + int 15 1
+        name n ref Node 0 0
+        const left (8) int 6 0
+    ref ref Node 10 2
+      tuple Node 10 2
+        seq no type 10 2
+          const n_ADJ (10) int 6 0
+          seq no type 10 2
+            ref ref Node 10 1
+              tuple Node 10 1
+                seq no type 10 1
+                  const n_BLOCK (0) int 6 0
+                  seq no type 10 1
+                    * ref Node 8 0
+                      + int 15 1
+                        name n ref Node 0 0
+                        const left (8) int 6 0
+                    seq no type 10 1
+                      name nil ref Node 1 0
+                      seq no type 10 1
+                        name nil polymorphic type 1 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+            seq no type 10 2
+              ref ref Node 10 2
+                tuple Node 10 2
+                  seq no type 10 2
+                    const n_VAR (1) int 6 0
+                    seq no type 10 2
+                      ref ref Node 10 1
+                        tuple Node 10 1
+                          seq no type 10 1
+                            const n_WORD (11) int 6 0
+                            seq no type 10 1
+                              name nil polymorphic type 1 0
+                              seq no type 10 1
+                                name nil polymorphic type 1 0
+                                seq no type 10 1
+                                  const * string 1 0
+                                  seq no type 10 1
+                                    name nil polymorphic type 1 0
+                      seq no type 10 1
+                        name nil ref Node 1 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+                          seq no type 10 1
+                            name nil polymorphic type 1 0
+              seq no type 10 1
+                name nil polymorphic type 1 0
+                seq no type 10 1
+                  name nil polymorphic type 1 0
+ecom to: 
+name n ref Node 0 0
+eacom: 
+* int 10 1
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const left (8) int 6 0
+generate desc for ref Node
+generate desc for ref Node
+	desc	$-1,8,"80"
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+name .b44 ref Node 0 0
+ecom: 
+= ref Node 10 1
+  name .b44 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b44 ref Node 0 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+name n ref Node 0 0
+ecom: 
+ref ref Node 10 2
+  tuple Node 10 2
+    seq no type 10 2
+      const n_ADJ (10) int 6 0
+      seq no type 10 2
+        ref ref Node 10 1
+          tuple Node 10 1
+            seq no type 10 1
+              const n_BLOCK (0) int 6 0
+              seq no type 10 1
+                * ref Node 8 0
+                  + int 15 1
+                    name n ref Node 0 0
+                    const left (8) int 6 0
+                seq no type 10 1
+                  name nil ref Node 1 0
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+                    seq no type 10 1
+                      name nil polymorphic type 1 0
+        seq no type 10 2
+          ref ref Node 10 2
+            tuple Node 10 2
+              seq no type 10 2
+                const n_VAR (1) int 6 0
+                seq no type 10 2
+                  ref ref Node 10 1
+                    tuple Node 10 1
+                      seq no type 10 1
+                        const n_WORD (11) int 6 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+                          seq no type 10 1
+                            name nil polymorphic type 1 0
+                            seq no type 10 1
+                              const * string 1 0
+                              seq no type 10 1
+                                name nil polymorphic type 1 0
+                  seq no type 10 1
+                    name nil ref Node 1 0
+                    seq no type 10 1
+                      name nil polymorphic type 1 0
+                      seq no type 10 1
+                        name nil polymorphic type 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+ecom to: 
+name n ref Node 0 0
+generate desc for ref Node
+generate desc for ref Node
+	desc	$-1,8,"80"
+generate desc for Node
+descmap adt offset 0
+descmap offset 0
+descmap ntype type int offset 0 (d->offset=0 start=0) returns -1
+descmap left type ref Node offset 8 (d->offset=8 start=0) returns 8
+descmap right type ref Node offset 16 (d->offset=16 start=0) returns 16
+descmap word type string offset 24 (d->offset=24 start=0) returns 24
+descmap redir type ref Redir offset 32 (d->offset=32 start=0) returns 32
+generate desc for Node
+	desc	$-1,40,"78"
+ecom: 
+tuple Node 10 2
+  seq no type 10 2
+    const n_ADJ (10) int 6 0
+    seq no type 10 2
+      ref ref Node 10 1
+        tuple Node 10 1
+          seq no type 10 1
+            const n_BLOCK (0) int 6 0
+            seq no type 10 1
+              * ref Node 8 0
+                + int 15 1
+                  name n ref Node 0 0
+                  const left (8) int 6 0
+              seq no type 10 1
+                name nil ref Node 1 0
+                seq no type 10 1
+                  name nil polymorphic type 1 0
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+      seq no type 10 2
+        ref ref Node 10 2
+          tuple Node 10 2
+            seq no type 10 2
+              const n_VAR (1) int 6 0
+              seq no type 10 2
+                ref ref Node 10 1
+                  tuple Node 10 1
+                    seq no type 10 1
+                      const n_WORD (11) int 6 0
+                      seq no type 10 1
+                        name nil polymorphic type 1 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+                          seq no type 10 1
+                            const * string 1 0
+                            seq no type 10 1
+                              name nil polymorphic type 1 0
+                seq no type 10 1
+                  name nil ref Node 1 0
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+                    seq no type 10 1
+                      name nil polymorphic type 1 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+ecom to: 
+* Node 8 0
+  name .b44 ref Node 0 0
+ecom: 
+const n_ADJ (10) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b44 ref Node 0 0
+    const (0) int 6 0
+ecom: 
+ref ref Node 10 1
+  tuple Node 10 1
+    seq no type 10 1
+      const n_BLOCK (0) int 6 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 1
+          name nil ref Node 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b44 ref Node 0 0
+    const (8) int 6 0
+generate desc for ref Node
+generate desc for ref Node
+	desc	$-1,8,"80"
+generate desc for Node
+ecom: 
+tuple Node 10 1
+  seq no type 10 1
+    const n_BLOCK (0) int 6 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        name nil ref Node 1 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+ecom to: 
+* Node 8 0
+  name .b47 ref Node 0 0
+ecom: 
+const n_BLOCK (0) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (0) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (8) int 6 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (16) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (24) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Redir 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (32) int 6 0
+ecom: 
+= ref Node 10 1
+  name .b47 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b47 ref Node 0 0
+ecom: 
+ref ref Node 10 2
+  tuple Node 10 2
+    seq no type 10 2
+      const n_VAR (1) int 6 0
+      seq no type 10 2
+        ref ref Node 10 1
+          tuple Node 10 1
+            seq no type 10 1
+              const n_WORD (11) int 6 0
+              seq no type 10 1
+                name nil polymorphic type 1 0
+                seq no type 10 1
+                  name nil polymorphic type 1 0
+                  seq no type 10 1
+                    const * string 1 0
+                    seq no type 10 1
+                      name nil polymorphic type 1 0
+        seq no type 10 1
+          name nil ref Node 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b44 ref Node 0 0
+    const (16) int 6 0
+generate desc for ref Node
+generate desc for Node
+ecom: 
+tuple Node 10 2
+  seq no type 10 2
+    const n_VAR (1) int 6 0
+    seq no type 10 2
+      ref ref Node 10 1
+        tuple Node 10 1
+          seq no type 10 1
+            const n_WORD (11) int 6 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+              seq no type 10 1
+                name nil polymorphic type 1 0
+                seq no type 10 1
+                  const * string 1 0
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+      seq no type 10 1
+        name nil ref Node 1 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+ecom to: 
+* Node 8 0
+  name .b47 ref Node 0 0
+ecom: 
+const n_VAR (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (0) int 6 0
+ecom: 
+ref ref Node 10 1
+  tuple Node 10 1
+    seq no type 10 1
+      const n_WORD (11) int 6 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            const * string 1 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (8) int 6 0
+generate desc for ref Node
+generate desc for Node
+ecom: 
+tuple Node 10 1
+  seq no type 10 1
+    const n_WORD (11) int 6 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          const * string 1 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+ecom to: 
+* Node 8 0
+  name .b48 ref Node 0 0
+ecom: 
+const n_WORD (11) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b48 ref Node 0 0
+    const (0) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b48 ref Node 0 0
+    const (8) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b48 ref Node 0 0
+    const (16) int 6 0
+ecom: 
+const * string 1 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b48 ref Node 0 0
+    const (24) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Redir 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b48 ref Node 0 0
+    const (32) int 6 0
+ecom: 
+= ref Node 10 1
+  name .b48 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b48 ref Node 0 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (16) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (24) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Redir 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b47 ref Node 0 0
+    const (32) int 6 0
+ecom: 
+= ref Node 10 1
+  name .b47 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b47 ref Node 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b44 ref Node 0 0
+    const (24) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Redir 8 0
+  + int 15 1
+    adr int 15 1
+      * Node 8 0
+        name .b44 ref Node 0 0
+    const (32) int 6 0
+ecom: 
+= ref Node 10 1
+  name .b44 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b44 ref Node 0 0
+ecom: 
+= ref Redirlist 10 1
+  name redirs ref Redirlist 0 0
+  ref ref Redirlist 10 1
+    tuple Redirlist 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+ecom: 
+ref ref Redirlist 10 1
+  tuple Redirlist 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+ecom to: 
+name redirs ref Redirlist 0 0
+generate desc for ref Redirlist
+generate desc for ref Redirlist
+	desc	$-1,8,"80"
+generate desc for Redirlist
+descmap adt offset 0
+descmap offset 0
+descmap r type list of Redirword offset 0 (d->offset=0 start=0) returns 0
+generate desc for Redirlist
+	desc	$-1,8,"80"
+ecom: 
+tuple Redirlist 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+ecom to: 
+* Redirlist 8 0
+  name .b48 ref Redirlist 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* list of Redirword 8 0
+  + int 15 1
+    adr int 15 1
+      * Redirlist 8 0
+        name .b48 ref Redirlist 0 0
+    const (0) int 6 0
+ecom: 
+= ref Redirlist 10 1
+  name .b48 ref Redirlist 0 0
+  name nil ref Redirlist 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name .b48 ref Redirlist 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name line list of ref Listnode 0 0
+    name redirs ref Redirlist 0 0
+  call list of ref Listnode 10 2
+    name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+        seq no type 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            name n ref Node 0 0
+            seq no type 10 1
+              name redirs ref Redirlist 0 0
+              seq no type 10 1
+                name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+      seq no type 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          name n ref Node 0 0
+          seq no type 10 1
+            name redirs ref Redirlist 0 0
+            seq no type 10 1
+              name nil list of ref Listnode 1 0
+ecom to: 
+name line list of ref Listnode 0 0
+  name redirs ref Redirlist 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b42 big 0 0
+    const (88) int 6 0
+ecom: 
+name .t45 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t45 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+ecom: 
+= chan of (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+  chan chan of (int, ref Expropagate) 10 1
+    const (0) int 6 0
+ecom: 
+chan chan of (int, ref Expropagate) 10 1
+  const (0) int 6 0
+ecom to: 
+name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type ref Expropagate offset 8 (d->offset=8 start=0) returns 8
+generate desc for (int, ref Expropagate)
+	desc	$-1,16,"40"
+ecom: 
+spawn nothing 10 2
+  call no type 10 2
+    name runasync fn(ctxt: ref Context, copyenv: int, argv: list of ref Listnode, redirs: ref Redirlist, startchan: chan of (int, ref Expropagate)) 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        const (1) int 6 0
+        seq no type 10 1
+          name line list of ref Listnode 0 0
+          seq no type 10 1
+            name redirs ref Redirlist 0 0
+            seq no type 10 1
+              name startchan chan of (int, ref Expropagate) 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (72) int 6 0
+ecom: 
+name line list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (80) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (88) int 6 0
+ecom: 
+name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+* chan of (int, ref Expropagate) 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (96) int 6 0
+ecom: 
+= (int, ref Expropagate) 10 2
+  tuple (int, ref Expropagate) 10 1
+    seq nothing 10 1
+      name pid int 0 0
+      seq nothing 10 1
+        name nil polymorphic type 1 0
+    name startchan chan of (int, ref Expropagate) 0 0
+  <- (int, ref Expropagate) 10 1
+    name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+ecom: 
+<- (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+name .b49 (int, ref Expropagate) 0 0
+ecom: 
+= ref Expropagate 10 1
+  * ref Expropagate 0 0
+    + int 13 1
+      adr int 13 1
+        name .b49 (int, ref Expropagate) 0 0
+      const t1 (8) int 6 0
+  name nil ref Expropagate 1 0
+ecom: 
+name nil ref Expropagate 1 0
+ecom to: 
+* ref Expropagate 0 0
+  + int 13 1
+    adr int 13 1
+      name .b49 (int, ref Expropagate) 0 0
+    const t1 (8) int 6 0
+ecom: 
+= ref Redirlist 10 1
+  name redirs ref Redirlist 0 0
+  name nil polymorphic type 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name redirs ref Redirlist 0 0
+ecom: 
+call no type 10 2
+  name set fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const apid string 1 0
+      seq no type 10 1
+        :: list of ref Listnode 10 1
+          ref ref Listnode 10 1
+            tuple Listnode 10 1
+              seq no type 10 1
+                name nil polymorphic type 1 0
+                seq no type 10 1
+                  cast string 10 1
+                    name pid int 0 0
+          name nil polymorphic type 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+const apid string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (72) int 6 0
+ecom: 
+:: list of ref Listnode 10 1
+  ref ref Listnode 10 1
+    tuple Listnode 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          cast string 10 1
+            name pid int 0 0
+  name nil polymorphic type 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (80) int 6 0
+eacom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        cast string 10 1
+          name pid int 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        cast string 10 1
+          name pid int 0 0
+ecom to: 
+name .b48 ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for Listnode
+ecom: 
+tuple Listnode 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+    seq no type 10 1
+      cast string 10 1
+        name pid int 0 0
+ecom to: 
+* Listnode 8 0
+  name .b48 ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b48 ref Listnode 0 0
+    const (0) int 6 0
+ecom: 
+cast string 10 1
+  name pid int 0 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b48 ref Listnode 0 0
+    const (8) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b48 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b48 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t45 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t45 list of ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+= chan of (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+  name nil chan of (int, ref Expropagate) 1 0
+ecom: 
+name nil chan of (int, ref Expropagate) 1 0
+ecom to: 
+name startchan chan of (int, ref Expropagate) 0 0
+ecom: 
+call string 10 2
+  name runsync fn(ctxt: ref Context, argv: list of ref Listnode, redirs: ref Redirlist, last: int): string 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name line list of ref Listnode 0 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name last int 0 0
+ecom to: 
+* string 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (64) int 6 0
+ecom: 
+name line list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (80) int 6 0
+ecom: 
+name last int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b46 big 0 0
+    const (88) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name line list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name line list of ref Listnode 0 0
+ecom: 
+= ref Redirlist 10 1
+  name redirs ref Redirlist 0 0
+  name nil ref Redirlist 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name redirs ref Redirlist 0 0
+fn: walk
+64: argument ctxt ref Context ref 11
+72: argument n ref Node ref 14
+80: argument last int ref 1
+84: local bg int ref 3
+88: local pid int ref 3
+92: local .t43 int ref 1
+96: local .b46 big ref 6
+104: local redirs ref Redirlist ref 5
+112: local .b42 big ref 4
+120: local .b44 ref Localenv ref 4
+128: local .b48 ref Node ref 4
+136: local status string ref 4
+144: local line list of ref Listnode ref 3
+152: local startchan chan of (int, ref Expropagate) ref 3
+160: local .b47 ref Node ref 2
+168: local .t45 string ref 1
+176: local .b49 (int, ref Expropagate) ref 1
+generate desc for walk
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap n type ref Node offset 72 (d->offset=72 start=0) returns 72
+descmap last type int offset 80 (d->offset=80 start=0) returns -1
+descmap bg type int offset 84 (d->offset=84 start=0) returns -1
+descmap pid type int offset 88 (d->offset=88 start=0) returns -1
+descmap .t43 type int offset 92 (d->offset=92 start=0) returns -1
+descmap .b46 type big offset 96 (d->offset=96 start=0) returns -1
+descmap redirs type ref Redirlist offset 104 (d->offset=104 start=0) returns 104
+descmap .b42 type big offset 112 (d->offset=112 start=0) returns -1
+descmap .b44 type ref Localenv offset 120 (d->offset=120 start=0) returns 120
+descmap .b48 type ref Node offset 128 (d->offset=128 start=0) returns 128
+descmap status type string offset 136 (d->offset=136 start=0) returns 136
+descmap line type list of ref Listnode offset 144 (d->offset=144 start=0) returns 144
+descmap startchan type chan of (int, ref Expropagate) offset 152 (d->offset=152 start=0) returns 152
+descmap .b47 type ref Node offset 160 (d->offset=160 start=0) returns 160
+descmap .t45 type string offset 168 (d->offset=168 start=0) returns 168
+descmap adt offset 176
+descmap offset 176
+descmap t0 type int offset 176 (d->offset=0 start=176) returns -1
+descmap t1 type ref Expropagate offset 184 (d->offset=8 start=176) returns 184
+descmap .b49 type (int, ref Expropagate) offset 176 (d->offset=176 start=0) returns 184
+fncom: assign 3 4181a8
+ecom: 
+= ref Redirlist 10 1
+  name redirs ref Redirlist 0 0
+  ref ref Redirlist 10 1
+    name Redirlist Redirlist 10 1
+ecom: 
+ref ref Redirlist 10 1
+  name Redirlist Redirlist 10 1
+ecom to: 
+name redirs ref Redirlist 0 0
+generate desc for Redirlist
+eacom: 
+* int 10 1
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const right (16) int 6 0
+generate desc for ref Node
+generate desc for ref Node
+	desc	$-1,8,"80"
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+name .b50 ref Node 0 0
+ecom: 
+= ref Node 10 1
+  name .b50 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b50 ref Node 0 0
+eacom: 
+* int 10 1
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const right (16) int 6 0
+generate desc for ref Node
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+name .b50 ref Node 0 0
+ecom: 
+= ref Node 10 1
+  name .b50 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b50 ref Node 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name val list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name assign fn(ctxt: ref Context, n: ref Node): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const right (16) int 6 0
+ecom: 
+call list of ref Listnode 10 2
+  name assign fn(ctxt: ref Context, n: ref Node): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const right (16) int 6 0
+ecom to: 
+name val list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b51 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b51 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 2
+  name val list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+        seq no type 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            * ref Node 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const right (16) int 6 0
+            seq no type 10 1
+              name redirs ref Redirlist 0 0
+              seq no type 10 1
+                name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+      seq no type 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          * ref Node 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const right (16) int 6 0
+          seq no type 10 1
+            name redirs ref Redirlist 0 0
+            seq no type 10 1
+              name nil list of ref Listnode 1 0
+ecom to: 
+name val list of ref Listnode 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const right (16) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (88) int 6 0
+ecom: 
+name .t52 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b51 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t52 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name vars list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 1
+          name redirs ref Redirlist 0 0
+          seq no type 10 1
+            name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name vars list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (88) int 6 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const bad assign string 1 0
+      seq no type 10 1
+        const sh: nil variable name string 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad assign string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+const sh: nil variable name string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const bad assign string 1 0
+      seq no type 10 1
+        const sh: redirections not allowed in assignment string 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad assign string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+const sh: redirections not allowed in assignment string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name tval list of ref Listnode 0 0
+  name val list of ref Listnode 0 0
+ecom: 
+name val list of ref Listnode 0 0
+ecom to: 
+name tval list of ref Listnode 0 0
+ecom: 
+= string 10 2
+  name vname string 0 0
+  call string 10 2
+    name deglob fn(s: string): string 11 1
+    seq no type 10 1
+      * string 10 1
+        + int 10 1
+          hd ref Listnode 10 1
+            name vars list of ref Listnode 0 0
+          const word (8) int 6 0
+ecom: 
+call string 10 2
+  name deglob fn(s: string): string 11 1
+  seq no type 10 1
+    * string 10 1
+      + int 10 1
+        hd ref Listnode 10 1
+          name vars list of ref Listnode 0 0
+        const word (8) int 6 0
+ecom to: 
+name vname string 0 0
+generate desc for big
+ecom: 
+* string 10 1
+  + int 10 1
+    hd ref Listnode 10 1
+      name vars list of ref Listnode 0 0
+    const word (8) int 6 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+eacom: 
+* string 10 1
+  + int 10 1
+    hd ref Listnode 10 1
+      name vars list of ref Listnode 0 0
+    const word (8) int 6 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+hd ref Listnode 10 1
+  name vars list of ref Listnode 0 0
+ecom to: 
+name .b50 ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b50 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b50 ref Listnode 0 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const bad assign string 1 0
+      seq no type 10 1
+        const sh: bad variable name string 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad assign string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+const sh: bad variable name string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name v list of ref Listnode 0 0
+  name nil polymorphic type 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name v list of ref Listnode 0 0
+eacom: 
+tl list of ref Listnode 10 1
+  name vars list of ref Listnode 0 0
+ecom: 
+tl list of ref Listnode 10 1
+  name vars list of ref Listnode 0 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t52 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name v list of ref Listnode 0 0
+  name tval list of ref Listnode 0 0
+ecom: 
+name tval list of ref Listnode 0 0
+ecom to: 
+name v list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name v list of ref Listnode 0 0
+  :: list of ref Listnode 10 1
+    hd ref Listnode 10 1
+      name tval list of ref Listnode 0 0
+    name nil polymorphic type 1 0
+ecom: 
+:: list of ref Listnode 10 1
+  hd ref Listnode 10 1
+    name tval list of ref Listnode 0 0
+  name nil polymorphic type 1 0
+ecom to: 
+name v list of ref Listnode 0 0
+eacom: 
+hd ref Listnode 10 1
+  name tval list of ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+hd ref Listnode 10 1
+  name tval list of ref Listnode 0 0
+ecom to: 
+name .b50 ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b50 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b50 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t52 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t52 list of ref Listnode 0 0
+ecom: 
+call no type 10 2
+  name set fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name vname string 0 0
+      seq no type 10 1
+        name v list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+name vname string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+name v list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+call no type 10 2
+  name setlocal fn(ctxt: self ref Context, name: string, val: list of ref Listnode) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name vname string 0 0
+      seq no type 10 1
+        name v list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (64) int 6 0
+ecom: 
+name vname string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (72) int 6 0
+ecom: 
+name v list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b53 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name tval list of ref Listnode 0 0
+  tl list of ref Listnode 10 1
+    name tval list of ref Listnode 0 0
+ecom: 
+tl list of ref Listnode 10 1
+  name tval list of ref Listnode 0 0
+ecom to: 
+name tval list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name v list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name v list of ref Listnode 0 0
+ecom: 
+= string 10 1
+  name vname string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name vname string 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name vars list of ref Listnode 0 0
+  tl list of ref Listnode 10 1
+    name vars list of ref Listnode 0 0
+ecom: 
+tl list of ref Listnode 10 1
+  name vars list of ref Listnode 0 0
+ecom to: 
+name vars list of ref Listnode 0 0
+ecom: 
+name val list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  name .ret int 0 0
+fn: assign
+64: argument ctxt ref Context ref 8
+72: argument n ref Node ref 7
+80: local .b53 big ref 8
+88: local tval list of ref Listnode ref 7
+96: local vars list of ref Listnode ref 7
+104: local v list of ref Listnode ref 5
+112: local .b50 ref Node ref 4
+120: local redirs ref Redirlist ref 4
+128: local val list of ref Listnode ref 4
+136: local vname string ref 4
+144: local .b51 big ref 2
+152: local .t52 list of ref Listnode ref 1
+generate desc for assign
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap n type ref Node offset 72 (d->offset=72 start=0) returns 72
+descmap .b53 type big offset 80 (d->offset=80 start=0) returns -1
+descmap tval type list of ref Listnode offset 88 (d->offset=88 start=0) returns 88
+descmap vars type list of ref Listnode offset 96 (d->offset=96 start=0) returns 96
+descmap v type list of ref Listnode offset 104 (d->offset=104 start=0) returns 104
+descmap .b50 type ref Node offset 112 (d->offset=112 start=0) returns 112
+descmap redirs type ref Redirlist offset 120 (d->offset=120 start=0) returns 120
+descmap val type list of ref Listnode offset 128 (d->offset=128 start=0) returns 128
+descmap vname type string offset 136 (d->offset=136 start=0) returns 136
+descmap .b51 type big offset 144 (d->offset=144 start=0) returns -1
+descmap .t52 type list of ref Listnode offset 152 (d->offset=152 start=0) returns 152
+fncom: walkpipeline 3 418268
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+= array of ref Sys->FD 10 1
+  name fds array of ref Sys->FD 0 0
+  array array of ref Sys->FD 10 1
+    const (2) int 6 0
+ecom: 
+array array of ref Sys->FD 10 1
+  const (2) int 6 0
+ecom to: 
+name fds array of ref Sys->FD 0 0
+generate desc for ref Sys->FD
+generate desc for ref Sys->FD
+	desc	$-1,8,"80"
+ecom: 
+= int 10 1
+  name rfdno int 0 0
+  const (-1) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+name rfdno int 0 0
+eacom: 
+call int 10 2
+  -> fn(fds: array of ref Sys->FD): int 12 1
+    name sys Sys 1 0
+    name pipe nothing 11 1
+  seq no type 10 1
+    name fds array of ref Sys->FD 0 0
+ecom: 
+call int 10 2
+  -> fn(fds: array of ref Sys->FD): int 12 1
+    name sys Sys 1 0
+    name pipe nothing 11 1
+  seq no type 10 1
+    name fds array of ref Sys->FD 0 0
+ecom to: 
+name .t54 int 0 0
+generate desc for big
+ecom: 
+name fds array of ref Sys->FD 0 0
+ecom to: 
+* array of ref Sys->FD 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (64) int 6 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      const no pipe string 1 0
+      seq no type 10 2
+        call string 10 2
+          -> fn(s: string, *): string 12 1
+            name sys Sys 1 0
+            name sprint nothing 11 1
+          seq no type 10 1
+            const sh: cannot make pipe: %r string 1 0
+generate desc for big
+ecom: 
+call string 10 2
+  -> fn(s: string, *): string 12 1
+    name sys Sys 1 0
+    name sprint nothing 11 1
+  seq no type 10 1
+    const sh: cannot make pipe: %r string 1 0
+ecom to: 
+name .t56 string 0 0
+generate desc for Sys->sprint
+descmap offset 0
+descmap s type string offset 64 (d->offset=64 start=0) returns 64
+generate desc for big
+ecom: 
+const sh: cannot make pipe: %r string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (64) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (64) int 6 0
+ecom: 
+const no pipe string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t56 string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (80) int 6 0
+ecom: 
+= string 10 1
+  name .t56 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t56 string 0 0
+ecom: 
+= int 10 1
+  name nwfdno int 0 0
+  const (-1) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+name nwfdno int 0 0
+ecom: 
+= (int, int) 10 2
+  tuple (int, int) 10 1
+    seq nothing 10 1
+      name fd1 int 0 0
+      seq nothing 10 1
+        name fd2 int 0 0
+  tuple (int, int) 10 2
+    seq no type 10 2
+      * int 10 1
+        + int 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+          const fd2 (8) int 6 0
+      seq no type 10 1
+        * int 10 1
+          + int 10 1
+            * ref Redir 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const redir (32) int 6 0
+            const fd1 (4) int 6 0
+ecom: 
+tuple (int, int) 10 2
+  seq no type 10 2
+    * int 10 1
+      + int 10 1
+        * ref Redir 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const redir (32) int 6 0
+        const fd2 (8) int 6 0
+    seq no type 10 1
+      * int 10 1
+        + int 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+          const fd1 (4) int 6 0
+ecom to: 
+name fd1 (int, int) 0 0
+ecom: 
+* int 10 1
+  + int 10 1
+    * ref Redir 8 0
+      + int 15 1
+        name n ref Node 0 0
+        const redir (32) int 6 0
+    const fd2 (8) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      name fd1 (int, int) 0 0
+    const (0) int 6 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Redir 8 0
+      + int 15 1
+        name n ref Node 0 0
+        const redir (32) int 6 0
+    const fd2 (8) int 6 0
+generate desc for ref Redir
+generate desc for ref Redir
+	desc	$-1,8,"80"
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+name .b58 ref Redir 0 0
+ecom: 
+= ref Redir 10 1
+  name .b58 ref Redir 0 0
+  name nil ref Redir 1 0
+ecom: 
+name nil ref Redir 1 0
+ecom to: 
+name .b58 ref Redir 0 0
+ecom: 
+* int 10 1
+  + int 10 1
+    * ref Redir 8 0
+      + int 15 1
+        name n ref Node 0 0
+        const redir (32) int 6 0
+    const fd1 (4) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      name fd1 (int, int) 0 0
+    const (4) int 6 0
+eacom: 
+* int 10 1
+  + int 10 1
+    * ref Redir 8 0
+      + int 15 1
+        name n ref Node 0 0
+        const redir (32) int 6 0
+    const fd1 (4) int 6 0
+generate desc for ref Redir
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+name .b58 ref Redir 0 0
+ecom: 
+= ref Redir 10 1
+  name .b58 ref Redir 0 0
+  name nil ref Redir 1 0
+ecom: 
+name nil ref Redir 1 0
+ecom to: 
+name .b58 ref Redir 0 0
+ecom: 
+= (int, int) 10 2
+  tuple (int, int) 10 1
+    seq no type 10 1
+      name fd1 int 0 0
+      seq no type 10 1
+        name fd2 int 0 0
+  tuple (int, int) 10 1
+    seq no type 10 1
+      name fd2 int 0 0
+      seq no type 10 1
+        name fd1 int 0 0
+generate desc for (int, int)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type int offset 4 (d->offset=4 start=0) returns -1
+generate desc for (int, int)
+	desc	$-1,8,""
+ecom: 
+tuple (int, int) 10 1
+  seq no type 10 1
+    name fd2 int 0 0
+    seq no type 10 1
+      name fd1 int 0 0
+ecom to: 
+name .b59 (int, int) 0 0
+ecom: 
+name fd2 int 0 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      name .b59 (int, int) 0 0
+    const (0) int 6 0
+ecom: 
+name fd1 int 0 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      name .b59 (int, int) 0 0
+    const (4) int 6 0
+ecom: 
+= (int, int) 10 2
+  tuple (int, int) 10 1
+    seq no type 10 1
+      name nwfdno int 0 0
+      seq no type 10 1
+        name rfdno int 0 0
+  tuple (int, int) 10 1
+    seq no type 10 1
+      name fd2 int 0 0
+      seq no type 10 1
+        name fd1 int 0 0
+ecom: 
+= int 10 1
+  name nwfdno int 0 0
+  name fd2 int 0 0
+ecom: 
+name fd2 int 0 0
+ecom to: 
+name nwfdno int 0 0
+ecom: 
+= int 10 1
+  name rfdno int 0 0
+  name fd1 int 0 0
+ecom: 
+name fd1 int 0 0
+ecom to: 
+name rfdno int 0 0
+ecom: 
+= list of int 10 2
+  name pids list of int 0 0
+  call list of int 10 2
+    name walkpipeline fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 11 1
+    seq no type 10 2
+      name ctxt ref Context 0 0
+      seq no type 10 2
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 2
+          * ref Sys->FD 10 1
+            indx big 10 1
+              name fds array of ref Sys->FD 0 0
+              const (1) int 6 0
+          seq no type 10 1
+            name nwfdno int 0 0
+ecom: 
+call list of int 10 2
+  name walkpipeline fn(ctxt: ref Context, n: ref Node, wrpipe: ref Sys->FD, wfdno: int): list of int 11 1
+  seq no type 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 2
+        * ref Sys->FD 10 1
+          indx big 10 1
+            name fds array of ref Sys->FD 0 0
+            const (1) int 6 0
+        seq no type 10 1
+          name nwfdno int 0 0
+ecom to: 
+name pids list of int 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (72) int 6 0
+ecom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (1) int 6 0
+ecom to: 
+* ref Sys->FD 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (80) int 6 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (1) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name fds array of ref Sys->FD 0 0
+  const (1) int 6 0
+ecom to: 
+name .b55 big 0 0
+ecom: 
+name nwfdno int 0 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (88) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 10 1
+    indx big 10 1
+      name fds array of ref Sys->FD 0 0
+      const (1) int 6 0
+  name nil polymorphic type 1 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (1) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name fds array of ref Sys->FD 0 0
+  const (1) int 6 0
+ecom to: 
+name .b57 big 0 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 8 1
+  name .b57 big 0 0
+ecom: 
+= ref Node 10 1
+  name n ref Node 0 0
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const right (16) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+name n ref Node 0 0
+ecom: 
+= ref Redirlist 10 1
+  name r ref Redirlist 0 0
+  ref ref Redirlist 10 1
+    tuple Redirlist 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+ecom: 
+ref ref Redirlist 10 1
+  tuple Redirlist 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+ecom to: 
+name r ref Redirlist 0 0
+generate desc for ref Redirlist
+generate desc for ref Redirlist
+	desc	$-1,8,"80"
+generate desc for Redirlist
+ecom: 
+tuple Redirlist 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+ecom to: 
+* Redirlist 8 0
+  name .b58 ref Redirlist 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* list of Redirword 8 0
+  + int 15 1
+    adr int 15 1
+      * Redirlist 8 0
+        name .b58 ref Redirlist 0 0
+    const (0) int 6 0
+ecom: 
+= ref Redirlist 10 1
+  name .b58 ref Redirlist 0 0
+  name nil ref Redirlist 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name .b58 ref Redirlist 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name rlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+        seq no type 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            name n ref Node 0 0
+            seq no type 10 1
+              name r ref Redirlist 0 0
+              seq no type 10 1
+                name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+      seq no type 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          name n ref Node 0 0
+          seq no type 10 1
+            name r ref Redirlist 0 0
+            seq no type 10 1
+              name nil list of ref Listnode 1 0
+ecom to: 
+name rlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name r ref Redirlist 0 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name .t56 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (72) int 6 0
+ecom: 
+name r ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b55 big 0 0
+    const (88) int 6 0
+ecom: 
+name .t56 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t56 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t56 list of ref Listnode 0 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (0) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name fds array of ref Sys->FD 0 0
+  const (0) int 6 0
+ecom to: 
+name .b57 big 0 0
+ecom: 
+= int 10 1
+  name rfdno int 0 0
+  const (0) int 6 0
+ecom: 
+const (0) int 6 0
+ecom to: 
+name rfdno int 0 0
+ecom: 
+= list of Redirword 10 2
+  * list of Redirword 8 0
+    name r ref Redirlist 0 0
+  :: list of Redirword 10 2
+    tuple Redirword 10 2
+      seq no type 10 2
+        * ref Sys->FD 10 1
+          indx big 10 1
+            name fds array of ref Sys->FD 0 0
+            const (0) int 6 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            tuple Redir 10 1
+              seq no type 10 1
+                const OREAD (0) int 6 0
+                seq no type 10 1
+                  name rfdno int 0 0
+                  seq no type 10 1
+                    const (-1) int 6 0
+    * list of Redirword 8 0
+      name r ref Redirlist 0 0
+ecom: 
+:: list of Redirword 10 2
+  tuple Redirword 10 2
+    seq no type 10 2
+      * ref Sys->FD 10 1
+        indx big 10 1
+          name fds array of ref Sys->FD 0 0
+          const (0) int 6 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          tuple Redir 10 1
+            seq no type 10 1
+              const OREAD (0) int 6 0
+              seq no type 10 1
+                name rfdno int 0 0
+                seq no type 10 1
+                  const (-1) int 6 0
+  * list of Redirword 8 0
+    name r ref Redirlist 0 0
+ecom to: 
+* list of Redirword 8 0
+  name r ref Redirlist 0 0
+eacom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    * ref Sys->FD 10 1
+      indx big 10 1
+        name fds array of ref Sys->FD 0 0
+        const (0) int 6 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        tuple Redir 10 1
+          seq no type 10 1
+            const OREAD (0) int 6 0
+            seq no type 10 1
+              name rfdno int 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+generate desc for Redirword
+descmap adt offset 0
+descmap offset 0
+descmap fd type ref Sys->FD offset 0 (d->offset=0 start=0) returns 0
+descmap w type string offset 8 (d->offset=8 start=0) returns 8
+descmap adt offset 16
+descmap offset 16
+descmap rtype type int offset 16 (d->offset=0 start=16) returns -1
+descmap fd1 type int offset 20 (d->offset=4 start=16) returns -1
+descmap fd2 type int offset 24 (d->offset=8 start=16) returns -1
+descmap r type Redir offset 16 (d->offset=16 start=0) returns -1
+generate desc for Redirword
+	desc	$-1,32,"c0"
+ecom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    * ref Sys->FD 10 1
+      indx big 10 1
+        name fds array of ref Sys->FD 0 0
+        const (0) int 6 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        tuple Redir 10 1
+          seq no type 10 1
+            const OREAD (0) int 6 0
+            seq no type 10 1
+              name rfdno int 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+ecom to: 
+name .b60 Redirword 0 0
+ecom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (0) int 6 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (0) int 6 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name fds array of ref Sys->FD 0 0
+    const (0) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name fds array of ref Sys->FD 0 0
+  const (0) int 6 0
+ecom to: 
+name .b57 big 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (8) int 6 0
+ecom: 
+tuple Redir 10 1
+  seq no type 10 1
+    const OREAD (0) int 6 0
+    seq no type 10 1
+      name rfdno int 0 0
+      seq no type 10 1
+        const (-1) int 6 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (16) int 6 0
+ecom: 
+const OREAD (0) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (0) int 6 0
+ecom: 
+name rfdno int 0 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (4) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (8) int 6 0
+generate desc for Redirword
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b60 Redirword 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b60 Redirword 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b60 Redirword 0 0
+      const w (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const w (8) int 6 0
+ecom: 
+= int 10 1
+  name wfdno int 0 0
+  const (1) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+name wfdno int 0 0
+ecom: 
+= list of Redirword 10 1
+  * list of Redirword 8 0
+    name r ref Redirlist 0 0
+  :: list of Redirword 10 1
+    tuple Redirword 10 1
+      seq no type 10 1
+        name wrpipe ref Sys->FD 0 0
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            tuple Redir 10 1
+              seq no type 10 1
+                const OWRITE (1) int 6 0
+                seq no type 10 1
+                  name wfdno int 0 0
+                  seq no type 10 1
+                    const (-1) int 6 0
+    * list of Redirword 8 0
+      name r ref Redirlist 0 0
+ecom: 
+:: list of Redirword 10 1
+  tuple Redirword 10 1
+    seq no type 10 1
+      name wrpipe ref Sys->FD 0 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          tuple Redir 10 1
+            seq no type 10 1
+              const OWRITE (1) int 6 0
+              seq no type 10 1
+                name wfdno int 0 0
+                seq no type 10 1
+                  const (-1) int 6 0
+  * list of Redirword 8 0
+    name r ref Redirlist 0 0
+ecom to: 
+* list of Redirword 8 0
+  name r ref Redirlist 0 0
+eacom: 
+tuple Redirword 10 1
+  seq no type 10 1
+    name wrpipe ref Sys->FD 0 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        tuple Redir 10 1
+          seq no type 10 1
+            const OWRITE (1) int 6 0
+            seq no type 10 1
+              name wfdno int 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+generate desc for Redirword
+ecom: 
+tuple Redirword 10 1
+  seq no type 10 1
+    name wrpipe ref Sys->FD 0 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        tuple Redir 10 1
+          seq no type 10 1
+            const OWRITE (1) int 6 0
+            seq no type 10 1
+              name wfdno int 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+ecom to: 
+name .b60 Redirword 0 0
+ecom: 
+name wrpipe ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (0) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (8) int 6 0
+ecom: 
+tuple Redir 10 1
+  seq no type 10 1
+    const OWRITE (1) int 6 0
+    seq no type 10 1
+      name wfdno int 0 0
+      seq no type 10 1
+        const (-1) int 6 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const (16) int 6 0
+ecom: 
+const OWRITE (1) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (0) int 6 0
+ecom: 
+name wfdno int 0 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (4) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b60 Redirword 0 0
+          const (16) int 6 0
+    const (8) int 6 0
+generate desc for Redirword
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b60 Redirword 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b60 Redirword 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b60 Redirword 0 0
+      const w (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b60 Redirword 0 0
+    const w (8) int 6 0
+ecom: 
+= chan of (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+  chan chan of (int, ref Expropagate) 10 1
+    const (0) int 6 0
+ecom: 
+chan chan of (int, ref Expropagate) 10 1
+  const (0) int 6 0
+ecom to: 
+name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type ref Expropagate offset 8 (d->offset=8 start=0) returns 8
+generate desc for (int, ref Expropagate)
+	desc	$-1,16,"40"
+ecom: 
+spawn nothing 10 2
+  call no type 10 2
+    name runasync fn(ctxt: ref Context, copyenv: int, argv: list of ref Listnode, redirs: ref Redirlist, startchan: chan of (int, ref Expropagate)) 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        const (1) int 6 0
+        seq no type 10 1
+          name rlist list of ref Listnode 0 0
+          seq no type 10 1
+            name r ref Redirlist 0 0
+            seq no type 10 1
+              name startchan chan of (int, ref Expropagate) 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (64) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (72) int 6 0
+ecom: 
+name rlist list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (80) int 6 0
+ecom: 
+name r ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (88) int 6 0
+ecom: 
+name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+* chan of (int, ref Expropagate) 8 0
+  + int 15 0
+    name .b57 big 0 0
+    const (96) int 6 0
+ecom: 
+= (int, ref Expropagate) 10 2
+  tuple (int, ref Expropagate) 10 1
+    seq nothing 10 1
+      name pid int 0 0
+      seq nothing 10 1
+        name nil polymorphic type 1 0
+  <- (int, ref Expropagate) 10 1
+    name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+ecom: 
+<- (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+name .b61 (int, ref Expropagate) 0 0
+ecom: 
+= ref Expropagate 10 1
+  * ref Expropagate 0 0
+    + int 13 1
+      adr int 13 1
+        name .b61 (int, ref Expropagate) 0 0
+      const t1 (8) int 6 0
+  name nil ref Expropagate 1 0
+ecom: 
+name nil ref Expropagate 1 0
+ecom to: 
+* ref Expropagate 0 0
+  + int 13 1
+    adr int 13 1
+      name .b61 (int, ref Expropagate) 0 0
+    const t1 (8) int 6 0
+ecom: 
+:: list of int 10 1
+  name pid int 0 0
+  name pids list of int 0 0
+ecom to: 
+* list of int 8 0
+  name .ret int 0 0
+ecom: 
+name pids list of int 0 0
+ecom to: 
+name .t56 list of int 0 0
+ecom: 
+= list of int 10 1
+  name .t56 list of int 0 0
+  name nil list of int 1 0
+ecom: 
+name nil list of int 1 0
+ecom to: 
+name .t56 list of int 0 0
+fn: walkpipeline
+64: argument ctxt ref Context ref 4
+72: argument n ref Node ref 9
+80: argument wrpipe ref Sys->FD ref 2
+88: argument wfdno int ref 3
+92: local rfdno int ref 5
+96: local fd1 int ref 4
+100: local fd2 int ref 5
+104: local nwfdno int ref 3
+108: local .t54 int ref 1
+112: local .b57 big ref 7
+120: local r ref Redirlist ref 7
+128: local fds array of ref Sys->FD ref 6
+136: local .b55 big ref 4
+144: local .b58 ref Redir ref 3
+152: local startchan chan of (int, ref Expropagate) ref 3
+160: local pids list of int ref 2
+168: local rlist list of ref Listnode ref 2
+176: local .b60 Redirword ref 2
+208: local .b59 (int, int) ref 1
+216: local .t56 string ref 1
+224: local .b61 (int, ref Expropagate) ref 1
+104: local pid int ref 3
+generate desc for walkpipeline
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap n type ref Node offset 72 (d->offset=72 start=0) returns 72
+descmap wrpipe type ref Sys->FD offset 80 (d->offset=80 start=0) returns 80
+descmap wfdno type int offset 88 (d->offset=88 start=0) returns -1
+descmap rfdno type int offset 92 (d->offset=92 start=0) returns -1
+descmap fd1 type int offset 96 (d->offset=96 start=0) returns -1
+descmap fd2 type int offset 100 (d->offset=100 start=0) returns -1
+descmap nwfdno type int offset 104 (d->offset=104 start=0) returns -1
+descmap .t54 type int offset 108 (d->offset=108 start=0) returns -1
+descmap .b57 type big offset 112 (d->offset=112 start=0) returns -1
+descmap r type ref Redirlist offset 120 (d->offset=120 start=0) returns 120
+descmap fds type array of ref Sys->FD offset 128 (d->offset=128 start=0) returns 128
+descmap .b55 type big offset 136 (d->offset=136 start=0) returns -1
+descmap .b58 type ref Redir offset 144 (d->offset=144 start=0) returns 144
+descmap startchan type chan of (int, ref Expropagate) offset 152 (d->offset=152 start=0) returns 152
+descmap pids type list of int offset 160 (d->offset=160 start=0) returns 160
+descmap rlist type list of ref Listnode offset 168 (d->offset=168 start=0) returns 168
+descmap adt offset 176
+descmap offset 176
+descmap fd type ref Sys->FD offset 176 (d->offset=0 start=176) returns 176
+descmap w type string offset 184 (d->offset=8 start=176) returns 184
+descmap adt offset 192
+descmap offset 192
+descmap rtype type int offset 192 (d->offset=0 start=192) returns -1
+descmap fd1 type int offset 196 (d->offset=4 start=192) returns -1
+descmap fd2 type int offset 200 (d->offset=8 start=192) returns -1
+descmap r type Redir offset 192 (d->offset=16 start=176) returns -1
+descmap .b60 type Redirword offset 176 (d->offset=176 start=0) returns 184
+descmap adt offset 208
+descmap offset 208
+descmap t0 type int offset 208 (d->offset=0 start=208) returns -1
+descmap t1 type int offset 212 (d->offset=4 start=208) returns -1
+descmap .b59 type (int, int) offset 208 (d->offset=208 start=0) returns -1
+descmap .t56 type string offset 216 (d->offset=216 start=0) returns 216
+descmap adt offset 224
+descmap offset 224
+descmap t0 type int offset 224 (d->offset=0 start=224) returns -1
+descmap t1 type ref Expropagate offset 232 (d->offset=8 start=224) returns 232
+descmap .b61 type (int, ref Expropagate) offset 224 (d->offset=224 start=0) returns 232
+fncom: makeredir 1 418328
+fncom: glom 14 4183e8
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+call list of ref Listnode 10 2
+  name listjoin fn(left: list of ref Listnode, right: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 11 1
+      seq no type 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          name n ref Node 0 0
+          seq no type 10 1
+            name redirs ref Redirlist 0 0
+    seq no type 10 1
+      name onto list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  name .ret int 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name n ref Node 0 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+ecom to: 
+name .t63 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (64) int 6 0
+ecom: 
+name n ref Node 0 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (80) int 6 0
+ecom: 
+name .t63 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b62 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t63 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t63 list of ref Listnode 0 0
+ecom: 
+name onto list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b62 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 2
+  name nlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const right (16) int 6 0
+        seq no type 10 1
+          name redirs ref Redirlist 0 0
+          seq no type 10 1
+            name onto list of ref Listnode 0 0
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const right (16) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name onto list of ref Listnode 0 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const right (16) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (80) int 6 0
+ecom: 
+name onto list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (88) int 6 0
+eacom: 
+* int 10 1
+  * ref Node 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const left (8) int 6 0
+generate desc for ref Node
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+name .b65 ref Node 0 0
+ecom: 
+= ref Node 10 1
+  name .b65 ref Node 0 0
+  name nil ref Node 1 0
+ecom: 
+name nil ref Node 1 0
+ecom to: 
+name .b65 ref Node 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name nlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name listjoin fn(left: list of ref Listnode, right: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 11 1
+        seq no type 10 1
+          name ctxt ref Context 0 0
+          seq no type 10 1
+            * ref Node 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const left (8) int 6 0
+            seq no type 10 1
+              name redirs ref Redirlist 0 0
+      seq no type 10 1
+        name nlist list of ref Listnode 0 0
+ecom: 
+call list of ref Listnode 10 2
+  name listjoin fn(left: list of ref Listnode, right: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 11 1
+      seq no type 10 1
+        name ctxt ref Context 0 0
+        seq no type 10 1
+          * ref Node 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const left (8) int 6 0
+          seq no type 10 1
+            name redirs ref Redirlist 0 0
+    seq no type 10 1
+      name nlist list of ref Listnode 0 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glomoperation fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+ecom to: 
+name .t63 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b62 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b62 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b62 big 0 0
+    const (80) int 6 0
+ecom: 
+name .t63 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t63 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t63 list of ref Listnode 0 0
+ecom: 
+name nlist list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (72) int 6 0
+ecom: 
+= list of ref Listnode 10 2
+  name nlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 1
+          name redirs ref Redirlist 0 0
+          seq no type 10 1
+            name nlist list of ref Listnode 0 0
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name nlist list of ref Listnode 0 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (80) int 6 0
+ecom: 
+name nlist list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b64 big 0 0
+    const (88) int 6 0
+ecom: 
+name nlist list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  name .ret int 0 0
+fn: glom
+64: argument ctxt ref Context ref 4
+72: argument n ref Node ref 7
+80: argument redirs ref Redirlist ref 4
+88: argument onto list of ref Listnode ref 2
+96: local nlist list of ref Listnode ref 6
+104: local .b64 big ref 4
+112: local .b62 big ref 2
+120: local .b65 ref Node ref 1
+128: local .t63 list of ref Listnode ref 1
+generate desc for glom
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap n type ref Node offset 72 (d->offset=72 start=0) returns 72
+descmap redirs type ref Redirlist offset 80 (d->offset=80 start=0) returns 80
+descmap onto type list of ref Listnode offset 88 (d->offset=88 start=0) returns 88
+descmap nlist type list of ref Listnode offset 96 (d->offset=96 start=0) returns 96
+descmap .b64 type big offset 104 (d->offset=104 start=0) returns -1
+descmap .b62 type big offset 112 (d->offset=112 start=0) returns -1
+descmap .b65 type ref Node offset 120 (d->offset=120 start=0) returns 120
+descmap .t63 type list of ref Listnode offset 128 (d->offset=128 start=0) returns 128
+fncom: listjoin 3 4184a8
+ecom: 
+= list of ref Listnode 10 1
+  name l list of ref Listnode 0 0
+  :: list of ref Listnode 10 1
+    hd ref Listnode 10 1
+      name left list of ref Listnode 0 0
+    name l list of ref Listnode 0 0
+ecom: 
+:: list of ref Listnode 10 1
+  hd ref Listnode 10 1
+    name left list of ref Listnode 0 0
+  name l list of ref Listnode 0 0
+ecom to: 
+name l list of ref Listnode 0 0
+eacom: 
+hd ref Listnode 10 1
+  name left list of ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+hd ref Listnode 10 1
+  name left list of ref Listnode 0 0
+ecom to: 
+name .b66 ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b66 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b66 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name left list of ref Listnode 0 0
+  tl list of ref Listnode 10 1
+    name left list of ref Listnode 0 0
+ecom: 
+tl list of ref Listnode 10 1
+  name left list of ref Listnode 0 0
+ecom to: 
+name left list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name right list of ref Listnode 0 0
+  :: list of ref Listnode 10 1
+    hd ref Listnode 10 1
+      name l list of ref Listnode 0 0
+    name right list of ref Listnode 0 0
+ecom: 
+:: list of ref Listnode 10 1
+  hd ref Listnode 10 1
+    name l list of ref Listnode 0 0
+  name right list of ref Listnode 0 0
+ecom to: 
+name right list of ref Listnode 0 0
+eacom: 
+hd ref Listnode 10 1
+  name l list of ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+hd ref Listnode 10 1
+  name l list of ref Listnode 0 0
+ecom to: 
+name .b66 ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b66 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b66 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name l list of ref Listnode 0 0
+  tl list of ref Listnode 10 1
+    name l list of ref Listnode 0 0
+ecom: 
+tl list of ref Listnode 10 1
+  name l list of ref Listnode 0 0
+ecom to: 
+name l list of ref Listnode 0 0
+ecom: 
+name right list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  name .ret int 0 0
+fn: listjoin
+64: argument left list of ref Listnode ref 4
+72: argument right list of ref Listnode ref 3
+80: local l list of ref Listnode ref 6
+88: local .b66 ref Listnode ref 2
+generate desc for listjoin
+descmap offset 0
+descmap left type list of ref Listnode offset 64 (d->offset=64 start=0) returns 64
+descmap right type list of ref Listnode offset 72 (d->offset=72 start=0) returns 72
+descmap l type list of ref Listnode offset 80 (d->offset=80 start=0) returns 80
+descmap .b66 type ref Listnode offset 88 (d->offset=88 start=0) returns 88
+fncom: pipecmd 2 418568
+eacom: 
+& int 10 1
+  * int 8 0
+    name redir ref Redir 0 0
+  const OAPPEND (524288) int 6 0
+ecom: 
+& int 10 1
+  * int 8 0
+    name redir ref Redir 0 0
+  const OAPPEND (524288) int 6 0
+ecom to: 
+name .t67 int 0 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const bad redir string 1 0
+      seq no type 10 1
+        const sh: bad redirection string 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad redir string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (72) int 6 0
+ecom: 
+const sh: bad redirection string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (80) int 6 0
+ecom: 
+= Redir 10 1
+  name r Redir 0 0
+  * Redir 8 0
+    name redir ref Redir 0 0
+ecom: 
+* Redir 8 0
+  name redir ref Redir 0 0
+ecom to: 
+name r Redir 0 0
+generate desc for Redir
+descmap adt offset 0
+descmap offset 0
+descmap rtype type int offset 0 (d->offset=0 start=0) returns -1
+descmap fd1 type int offset 4 (d->offset=4 start=0) returns -1
+descmap fd2 type int offset 8 (d->offset=8 start=0) returns -1
+generate desc for Redir
+	desc	$-1,12,""
+ecom: 
+= int 10 1
+  * int 0 0
+    adr int 13 1
+      name r Redir 0 0
+  const OWRITE (1) int 6 0
+ecom: 
+const OWRITE (1) int 6 0
+ecom to: 
+* int 0 0
+  adr int 13 1
+    name r Redir 0 0
+ecom: 
+= int 10 1
+  * int 0 0
+    adr int 13 1
+      name r Redir 0 0
+  const OREAD (0) int 6 0
+ecom: 
+const OREAD (0) int 6 0
+ecom to: 
+* int 0 0
+  adr int 13 1
+    name r Redir 0 0
+ecom: 
+= array of ref Sys->FD 10 1
+  name p array of ref Sys->FD 0 0
+  array array of ref Sys->FD 10 1
+    const (2) int 6 0
+ecom: 
+array array of ref Sys->FD 10 1
+  const (2) int 6 0
+ecom to: 
+name p array of ref Sys->FD 0 0
+generate desc for ref Sys->FD
+generate desc for ref Sys->FD
+	desc	$-1,8,"80"
+eacom: 
+call int 10 2
+  -> fn(fds: array of ref Sys->FD): int 12 1
+    name sys Sys 1 0
+    name pipe nothing 11 1
+  seq no type 10 1
+    name p array of ref Sys->FD 0 0
+ecom: 
+call int 10 2
+  -> fn(fds: array of ref Sys->FD): int 12 1
+    name sys Sys 1 0
+    name pipe nothing 11 1
+  seq no type 10 1
+    name p array of ref Sys->FD 0 0
+ecom to: 
+name .t67 int 0 0
+generate desc for big
+ecom: 
+name p array of ref Sys->FD 0 0
+ecom to: 
+* array of ref Sys->FD 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (64) int 6 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      const no pipe string 1 0
+      seq no type 10 2
+        call string 10 2
+          -> fn(s: string, *): string 12 1
+            name sys Sys 1 0
+            name sprint nothing 11 1
+          seq no type 10 1
+            const sh: cannot make pipe: %r string 1 0
+generate desc for big
+ecom: 
+call string 10 2
+  -> fn(s: string, *): string 12 1
+    name sys Sys 1 0
+    name sprint nothing 11 1
+  seq no type 10 1
+    const sh: cannot make pipe: %r string 1 0
+ecom to: 
+name .t69 string 0 0
+generate desc for Sys->sprint
+descmap offset 0
+descmap s type string offset 64 (d->offset=64 start=0) returns 64
+generate desc for big
+ecom: 
+const sh: cannot make pipe: %r string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (64) int 6 0
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (64) int 6 0
+ecom: 
+const no pipe string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (72) int 6 0
+ecom: 
+name .t69 string 0 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b68 big 0 0
+    const (80) int 6 0
+ecom: 
+= string 10 1
+  name .t69 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t69 string 0 0
+ecom: 
+= chan of (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+  chan chan of (int, ref Expropagate) 10 1
+    const (0) int 6 0
+ecom: 
+chan chan of (int, ref Expropagate) 10 1
+  const (0) int 6 0
+ecom to: 
+name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type int offset 0 (d->offset=0 start=0) returns -1
+descmap t1 type ref Expropagate offset 8 (d->offset=8 start=0) returns 8
+generate desc for (int, ref Expropagate)
+	desc	$-1,16,"40"
+ecom: 
+spawn nothing 10 2
+  call no type 10 2
+    name runasync fn(ctxt: ref Context, copyenv: int, argv: list of ref Listnode, redirs: ref Redirlist, startchan: chan of (int, ref Expropagate)) 11 1
+    seq no type 10 2
+      name ctxt ref Context 0 0
+      seq no type 10 2
+        const (1) int 6 0
+        seq no type 10 2
+          name cmd list of ref Listnode 0 0
+          seq no type 10 2
+            ref ref Redirlist 10 2
+              tuple Redirlist 10 2
+                seq no type 10 2
+                  :: list of (ref Sys->FD, polymorphic type, Redir) 10 2
+                    tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+                      seq no type 10 2
+                        * ref Sys->FD 10 1
+                          indx big 10 1
+                            name p array of ref Sys->FD 0 0
+                            const (1) int 6 0
+                        seq no type 10 1
+                          name nil polymorphic type 1 0
+                          seq no type 10 1
+                            name r Redir 0 0
+                    name nil polymorphic type 1 0
+            seq no type 10 1
+              name startchan chan of (int, ref Expropagate) 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (64) int 6 0
+ecom: 
+const (1) int 6 0
+ecom to: 
+* int 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (72) int 6 0
+ecom: 
+name cmd list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (80) int 6 0
+ecom: 
+ref ref Redirlist 10 2
+  tuple Redirlist 10 2
+    seq no type 10 2
+      :: list of (ref Sys->FD, polymorphic type, Redir) 10 2
+        tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+          seq no type 10 2
+            * ref Sys->FD 10 1
+              indx big 10 1
+                name p array of ref Sys->FD 0 0
+                const (1) int 6 0
+            seq no type 10 1
+              name nil polymorphic type 1 0
+              seq no type 10 1
+                name r Redir 0 0
+        name nil polymorphic type 1 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (88) int 6 0
+generate desc for ref Redirlist
+generate desc for ref Redirlist
+	desc	$-1,8,"80"
+generate desc for Redirlist
+ecom: 
+tuple Redirlist 10 2
+  seq no type 10 2
+    :: list of (ref Sys->FD, polymorphic type, Redir) 10 2
+      tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+        seq no type 10 2
+          * ref Sys->FD 10 1
+            indx big 10 1
+              name p array of ref Sys->FD 0 0
+              const (1) int 6 0
+          seq no type 10 1
+            name nil polymorphic type 1 0
+            seq no type 10 1
+              name r Redir 0 0
+      name nil polymorphic type 1 0
+ecom to: 
+* Redirlist 8 0
+  name .b71 ref Redirlist 0 0
+ecom: 
+:: list of (ref Sys->FD, polymorphic type, Redir) 10 2
+  tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+    seq no type 10 2
+      * ref Sys->FD 10 1
+        indx big 10 1
+          name p array of ref Sys->FD 0 0
+          const (1) int 6 0
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          name r Redir 0 0
+  name nil polymorphic type 1 0
+ecom to: 
+* list of Redirword 8 0
+  + int 15 1
+    adr int 15 1
+      * Redirlist 8 0
+        name .b71 ref Redirlist 0 0
+    const (0) int 6 0
+eacom: 
+tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+  seq no type 10 2
+    * ref Sys->FD 10 1
+      indx big 10 1
+        name p array of ref Sys->FD 0 0
+        const (1) int 6 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        name r Redir 0 0
+generate desc for (ref Sys->FD, polymorphic type, Redir)
+descmap adt offset 0
+descmap offset 0
+descmap t0 type ref Sys->FD offset 0 (d->offset=0 start=0) returns 0
+descmap t1 type polymorphic type offset 8 (d->offset=8 start=0) returns 8
+descmap adt offset 16
+descmap offset 16
+descmap rtype type int offset 16 (d->offset=0 start=16) returns -1
+descmap fd1 type int offset 20 (d->offset=4 start=16) returns -1
+descmap fd2 type int offset 24 (d->offset=8 start=16) returns -1
+descmap t2 type Redir offset 16 (d->offset=16 start=0) returns -1
+generate desc for (ref Sys->FD, polymorphic type, Redir)
+	desc	$-1,32,"c0"
+ecom: 
+tuple (ref Sys->FD, polymorphic type, Redir) 10 2
+  seq no type 10 2
+    * ref Sys->FD 10 1
+      indx big 10 1
+        name p array of ref Sys->FD 0 0
+        const (1) int 6 0
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        name r Redir 0 0
+ecom to: 
+name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+ecom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name p array of ref Sys->FD 0 0
+    const (1) int 6 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+    const (0) int 6 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name p array of ref Sys->FD 0 0
+    const (1) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name p array of ref Sys->FD 0 0
+  const (1) int 6 0
+ecom to: 
+name .b68 big 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 0 0
+  + int 13 1
+    adr int 13 1
+      name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+    const (8) int 6 0
+ecom: 
+name r Redir 0 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+    const (16) int 6 0
+generate desc for Redir
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t69 list of (ref Sys->FD, polymorphic type, Redir) 0 0
+generate desc for (ref Sys->FD, polymorphic type, Redir)
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+ecom: 
+= polymorphic type 10 1
+  * polymorphic type 0 0
+    + int 13 1
+      adr int 13 1
+        name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+      const t1 (8) int 6 0
+  name nil polymorphic type 1 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 0 0
+  + int 13 1
+    adr int 13 1
+      name .b72 (ref Sys->FD, polymorphic type, Redir) 0 0
+    const t1 (8) int 6 0
+ecom: 
+= list of (ref Sys->FD, polymorphic type, Redir) 10 1
+  name .t69 list of (ref Sys->FD, polymorphic type, Redir) 0 0
+  name nil list of (ref Sys->FD, polymorphic type, Redir) 1 0
+ecom: 
+name nil list of (ref Sys->FD, polymorphic type, Redir) 1 0
+ecom to: 
+name .t69 list of (ref Sys->FD, polymorphic type, Redir) 0 0
+ecom: 
+= ref Redirlist 10 1
+  name .b71 ref Redirlist 0 0
+  name nil ref Redirlist 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name .b71 ref Redirlist 0 0
+ecom: 
+name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+* chan of (int, ref Expropagate) 8 0
+  + int 15 0
+    name .b70 big 0 0
+    const (96) int 6 0
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 10 1
+    indx big 10 1
+      name p array of ref Sys->FD 0 0
+      const (1) int 6 0
+  name nil polymorphic type 1 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name p array of ref Sys->FD 0 0
+    const (1) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name p array of ref Sys->FD 0 0
+  const (1) int 6 0
+ecom to: 
+name .b70 big 0 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 8 1
+  name .b70 big 0 0
+ecom: 
+<- (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+generate desc for (int, ref Expropagate)
+ecom: 
+<- (int, ref Expropagate) 10 1
+  name startchan chan of (int, ref Expropagate) 0 0
+ecom to: 
+name .b73 (int, ref Expropagate) 0 0
+ecom: 
+= ref Expropagate 10 1
+  * ref Expropagate 0 0
+    + int 13 1
+      adr int 13 1
+        name .b73 (int, ref Expropagate) 0 0
+      const t1 (8) int 6 0
+  name nil ref Expropagate 1 0
+ecom: 
+name nil ref Expropagate 1 0
+ecom to: 
+* ref Expropagate 0 0
+  + int 13 1
+    adr int 13 1
+      name .b73 (int, ref Expropagate) 0 0
+    const t1 (8) int 6 0
+ecom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name p array of ref Sys->FD 0 0
+    const (0) int 6 0
+ecom to: 
+* ref Sys->FD 8 0
+  name .ret int 0 0
+eacom: 
+* ref Sys->FD 10 1
+  indx big 10 1
+    name p array of ref Sys->FD 0 0
+    const (0) int 6 0
+generate desc for big
+ecom: 
+indx big 10 1
+  name p array of ref Sys->FD 0 0
+  const (0) int 6 0
+ecom to: 
+name .b70 big 0 0
+fn: pipecmd
+64: argument ctxt ref Context ref 3
+72: argument cmd list of ref Listnode ref 1
+80: argument redir ref Redir ref 4
+88: local .t67 int ref 1
+96: local p array of ref Sys->FD ref 5
+104: local .b68 big ref 4
+112: local .b70 big ref 4
+120: local r Redir ref 4
+136: local startchan chan of (int, ref Expropagate) ref 3
+144: local .b71 ref Redirlist ref 1
+152: local .t69 string ref 1
+160: local .b73 (int, ref Expropagate) ref 1
+176: local .b72 (ref Sys->FD, polymorphic type, Redir) ref 1
+generate desc for pipecmd
+descmap offset 0
+descmap ctxt type ref Context offset 64 (d->offset=64 start=0) returns 64
+descmap cmd type list of ref Listnode offset 72 (d->offset=72 start=0) returns 72
+descmap redir type ref Redir offset 80 (d->offset=80 start=0) returns 80
+descmap .t67 type int offset 88 (d->offset=88 start=0) returns -1
+descmap p type array of ref Sys->FD offset 96 (d->offset=96 start=0) returns 96
+descmap .b68 type big offset 104 (d->offset=104 start=0) returns -1
+descmap .b70 type big offset 112 (d->offset=112 start=0) returns -1
+descmap adt offset 120
+descmap offset 120
+descmap rtype type int offset 120 (d->offset=0 start=120) returns -1
+descmap fd1 type int offset 124 (d->offset=4 start=120) returns -1
+descmap fd2 type int offset 128 (d->offset=8 start=120) returns -1
+descmap r type Redir offset 120 (d->offset=120 start=0) returns -1
+descmap startchan type chan of (int, ref Expropagate) offset 136 (d->offset=136 start=0) returns 136
+descmap .b71 type ref Redirlist offset 144 (d->offset=144 start=0) returns 144
+descmap .t69 type string offset 152 (d->offset=152 start=0) returns 152
+descmap adt offset 160
+descmap offset 160
+descmap t0 type int offset 160 (d->offset=0 start=160) returns -1
+descmap t1 type ref Expropagate offset 168 (d->offset=8 start=160) returns 168
+descmap .b73 type (int, ref Expropagate) offset 160 (d->offset=160 start=0) returns 168
+descmap adt offset 176
+descmap offset 176
+descmap t0 type ref Sys->FD offset 176 (d->offset=0 start=176) returns 176
+descmap t1 type polymorphic type offset 184 (d->offset=8 start=176) returns 184
+descmap adt offset 192
+descmap offset 192
+descmap rtype type int offset 192 (d->offset=0 start=192) returns -1
+descmap fd1 type int offset 196 (d->offset=4 start=192) returns -1
+descmap fd2 type int offset 200 (d->offset=8 start=192) returns -1
+descmap t2 type Redir offset 192 (d->offset=16 start=176) returns -1
+descmap .b72 type (ref Sys->FD, polymorphic type, Redir) offset 176 (d->offset=176 start=0) returns 184
+fncom: glomoperation 3 418628
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* polymorphic type 8 0
+  name .ret int 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name nlist list of ref Listnode 0 0
+  :: list of ref Listnode 10 1
+    ref ref Listnode 10 1
+      tuple Listnode 10 1
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            * string 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const word (24) int 6 0
+    name nil polymorphic type 1 0
+ecom: 
+:: list of ref Listnode 10 1
+  ref ref Listnode 10 1
+    tuple Listnode 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          * string 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const word (24) int 6 0
+  name nil polymorphic type 1 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+eacom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        * string 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const word (24) int 6 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        * string 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const word (24) int 6 0
+ecom to: 
+name .b74 ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for Listnode
+ecom: 
+tuple Listnode 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+    seq no type 10 1
+      * string 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const word (24) int 6 0
+ecom to: 
+* Listnode 8 0
+  name .b74 ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b74 ref Listnode 0 0
+    const (0) int 6 0
+ecom: 
+* string 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const word (24) int 6 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b74 ref Listnode 0 0
+    const (8) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b74 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t75 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 2
+  name wlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 2
+      call list of ref Listnode 10 2
+        name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+        seq no type 10 2
+          name ctxt ref Context 0 0
+          seq no type 10 2
+            * ref Node 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const left (8) int 6 0
+            seq no type 10 2
+              ref ref Redirlist 10 1
+                tuple Redirlist 10 1
+                  seq no type 10 1
+                    name nil polymorphic type 1 0
+              seq no type 10 1
+                name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glob fn(nl: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    call list of ref Listnode 10 2
+      name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+      seq no type 10 2
+        name ctxt ref Context 0 0
+        seq no type 10 2
+          * ref Node 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const left (8) int 6 0
+          seq no type 10 2
+            ref ref Redirlist 10 1
+              tuple Redirlist 10 1
+                seq no type 10 1
+                  name nil polymorphic type 1 0
+            seq no type 10 1
+              name nil list of ref Listnode 1 0
+ecom to: 
+name wlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 2
+    name ctxt ref Context 0 0
+    seq no type 10 2
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 2
+        ref ref Redirlist 10 1
+          tuple Redirlist 10 1
+            seq no type 10 1
+              name nil polymorphic type 1 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (72) int 6 0
+ecom: 
+ref ref Redirlist 10 1
+  tuple Redirlist 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (80) int 6 0
+generate desc for ref Redirlist
+generate desc for ref Redirlist
+	desc	$-1,8,"80"
+generate desc for Redirlist
+ecom: 
+tuple Redirlist 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+ecom to: 
+* Redirlist 8 0
+  name .b74 ref Redirlist 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* list of Redirword 8 0
+  + int 15 1
+    adr int 15 1
+      * Redirlist 8 0
+        name .b74 ref Redirlist 0 0
+    const (0) int 6 0
+ecom: 
+= ref Redirlist 10 1
+  name .b74 ref Redirlist 0 0
+  name nil ref Redirlist 1 0
+ecom: 
+name nil ref Redirlist 1 0
+ecom to: 
+name .b74 ref Redirlist 0 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (88) int 6 0
+ecom: 
+name .t75 list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b76 big 0 0
+    const (64) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t75 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+eacom: 
+len int 10 1
+  name wlist list of ref Listnode 0 0
+ecom: 
+len int 10 1
+  name wlist list of ref Listnode 0 0
+ecom to: 
+name .t78 int 0 0
+ecom: 
+call no type 10 2
+  name fail fn(ctxt: self ref Context, ename: string, err: string) 11 1
+  seq nothing 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      const bad redir string 1 0
+      seq no type 10 1
+        const sh: single redirection operand required string 1 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (64) int 6 0
+ecom: 
+const bad redir string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (72) int 6 0
+ecom: 
+const sh: single redirection operand required string 1 0
+ecom to: 
+* string 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (80) int 6 0
+eacom: 
+* ref Node 10 1
+  hd ref Listnode 10 1
+    name wlist list of ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+hd ref Listnode 10 1
+  name wlist list of ref Listnode 0 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b74 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+= ref Sys->FD 10 2
+  name fd ref Sys->FD 0 0
+  call ref Sys->FD 10 2
+    name pipecmd fn(ctxt: ref Context, cmd: list of ref Listnode, redir: ref Redir): ref Sys->FD 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        name wlist list of ref Listnode 0 0
+        seq no type 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+ecom: 
+call ref Sys->FD 10 2
+  name pipecmd fn(ctxt: ref Context, cmd: list of ref Listnode, redir: ref Redir): ref Sys->FD 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      name wlist list of ref Listnode 0 0
+      seq no type 10 1
+        * ref Redir 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const redir (32) int 6 0
+ecom to: 
+name fd ref Sys->FD 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (64) int 6 0
+ecom: 
+name wlist list of ref Listnode 0 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (72) int 6 0
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+* ref Redir 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (80) int 6 0
+ecom: 
+= list of Redirword 10 2
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+  :: list of Redirword 10 2
+    tuple Redirword 10 2
+      seq no type 10 2
+        name fd ref Sys->FD 0 0
+        seq no type 10 2
+          name nil polymorphic type 1 0
+          seq no type 10 2
+            tuple (int, int, int) 10 2
+              seq no type 10 2
+                * int 10 1
+                  * ref Redir 8 0
+                    + int 15 1
+                      name n ref Node 0 0
+                      const redir (32) int 6 0
+                seq no type 10 1
+                  * int 8 0
+                    name fd ref Sys->FD 0 0
+                  seq no type 10 1
+                    const (-1) int 6 0
+    * list of Redirword 8 0
+      name redirs ref Redirlist 0 0
+ecom: 
+:: list of Redirword 10 2
+  tuple Redirword 10 2
+    seq no type 10 2
+      name fd ref Sys->FD 0 0
+      seq no type 10 2
+        name nil polymorphic type 1 0
+        seq no type 10 2
+          tuple (int, int, int) 10 2
+            seq no type 10 2
+              * int 10 1
+                * ref Redir 8 0
+                  + int 15 1
+                    name n ref Node 0 0
+                    const redir (32) int 6 0
+              seq no type 10 1
+                * int 8 0
+                  name fd ref Sys->FD 0 0
+                seq no type 10 1
+                  const (-1) int 6 0
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+ecom to: 
+* list of Redirword 8 0
+  name redirs ref Redirlist 0 0
+eacom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    name fd ref Sys->FD 0 0
+    seq no type 10 2
+      name nil polymorphic type 1 0
+      seq no type 10 2
+        tuple (int, int, int) 10 2
+          seq no type 10 2
+            * int 10 1
+              * ref Redir 8 0
+                + int 15 1
+                  name n ref Node 0 0
+                  const redir (32) int 6 0
+            seq no type 10 1
+              * int 8 0
+                name fd ref Sys->FD 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+generate desc for Redirword
+ecom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    name fd ref Sys->FD 0 0
+    seq no type 10 2
+      name nil polymorphic type 1 0
+      seq no type 10 2
+        tuple (int, int, int) 10 2
+          seq no type 10 2
+            * int 10 1
+              * ref Redir 8 0
+                + int 15 1
+                  name n ref Node 0 0
+                  const redir (32) int 6 0
+            seq no type 10 1
+              * int 8 0
+                name fd ref Sys->FD 0 0
+              seq no type 10 1
+                const (-1) int 6 0
+ecom to: 
+name .b79 Redirword 0 0
+ecom: 
+name fd ref Sys->FD 0 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (0) int 6 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (8) int 6 0
+ecom: 
+tuple (int, int, int) 10 2
+  seq no type 10 2
+    * int 10 1
+      * ref Redir 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const redir (32) int 6 0
+    seq no type 10 1
+      * int 8 0
+        name fd ref Sys->FD 0 0
+      seq no type 10 1
+        const (-1) int 6 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (16) int 6 0
+ecom: 
+* int 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b79 Redirword 0 0
+          const (16) int 6 0
+    const (0) int 6 0
+eacom: 
+* int 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+generate desc for ref Redir
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+name .b74 ref Redir 0 0
+ecom: 
+= ref Redir 10 1
+  name .b74 ref Redir 0 0
+  name nil ref Redir 1 0
+ecom: 
+name nil ref Redir 1 0
+ecom to: 
+name .b74 ref Redir 0 0
+ecom: 
+* int 8 0
+  name fd ref Sys->FD 0 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b79 Redirword 0 0
+          const (16) int 6 0
+    const (4) int 6 0
+ecom: 
+const (-1) int 6 0
+ecom to: 
+* int 0 0
+  + int 13 1
+    adr int 13 1
+      * Redir 0 0
+        + int 13 1
+          adr int 13 1
+            name .b79 Redirword 0 0
+          const (16) int 6 0
+    const (8) int 6 0
+generate desc for Redirword
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b79 Redirword 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b79 Redirword 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b79 Redirword 0 0
+      const w (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const w (8) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name nlist list of ref Listnode 0 0
+  :: list of ref Listnode 10 1
+    ref ref Listnode 10 1
+      tuple Listnode 10 1
+        seq no type 10 1
+          name nil polymorphic type 1 0
+          seq no type 10 1
+            + string 10 1
+              const /fd/ string 1 0
+              cast string 10 1
+                * int 8 0
+                  name fd ref Sys->FD 0 0
+    name nil polymorphic type 1 0
+ecom: 
+:: list of ref Listnode 10 1
+  ref ref Listnode 10 1
+    tuple Listnode 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          + string 10 1
+            const /fd/ string 1 0
+            cast string 10 1
+              * int 8 0
+                name fd ref Sys->FD 0 0
+  name nil polymorphic type 1 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+eacom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        + string 10 1
+          const /fd/ string 1 0
+          cast string 10 1
+            * int 8 0
+              name fd ref Sys->FD 0 0
+generate desc for ref Listnode
+generate desc for ref Listnode
+	desc	$-1,8,"80"
+ecom: 
+ref ref Listnode 10 1
+  tuple Listnode 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        + string 10 1
+          const /fd/ string 1 0
+          cast string 10 1
+            * int 8 0
+              name fd ref Sys->FD 0 0
+ecom to: 
+name .b74 ref Listnode 0 0
+generate desc for ref Listnode
+generate desc for Listnode
+ecom: 
+tuple Listnode 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+    seq no type 10 1
+      + string 10 1
+        const /fd/ string 1 0
+        cast string 10 1
+          * int 8 0
+            name fd ref Sys->FD 0 0
+ecom to: 
+* Listnode 8 0
+  name .b74 ref Listnode 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Node 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b74 ref Listnode 0 0
+    const (0) int 6 0
+ecom: 
++ string 10 1
+  const /fd/ string 1 0
+  cast string 10 1
+    * int 8 0
+      name fd ref Sys->FD 0 0
+ecom to: 
+* string 8 0
+  + int 15 1
+    adr int 15 1
+      * Listnode 8 0
+        name .b74 ref Listnode 0 0
+    const (8) int 6 0
+eacom: 
+cast string 10 1
+  * int 8 0
+    name fd ref Sys->FD 0 0
+ecom: 
+cast string 10 1
+  * int 8 0
+    name fd ref Sys->FD 0 0
+ecom to: 
+name .t75 string 0 0
+ecom: 
+= string 10 1
+  name .t75 string 0 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+name .t75 string 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b74 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+= list of ref Listnode 10 1
+  name .t75 list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name .t75 list of ref Listnode 0 0
+ecom: 
+= ref Sys->FD 10 1
+  name fd ref Sys->FD 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+name fd ref Sys->FD 0 0
+ecom: 
+= list of Redirword 10 2
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+  :: list of Redirword 10 2
+    tuple Redirword 10 2
+      seq no type 10 2
+        name nil polymorphic type 1 0
+        seq no type 10 2
+          * string 10 1
+            + int 10 1
+              hd ref Listnode 10 1
+                name wlist list of ref Listnode 0 0
+              const word (8) int 6 0
+          seq no type 10 1
+            * Redir 10 1
+              * ref Redir 8 0
+                + int 15 1
+                  name n ref Node 0 0
+                  const redir (32) int 6 0
+    * list of Redirword 8 0
+      name redirs ref Redirlist 0 0
+ecom: 
+:: list of Redirword 10 2
+  tuple Redirword 10 2
+    seq no type 10 2
+      name nil polymorphic type 1 0
+      seq no type 10 2
+        * string 10 1
+          + int 10 1
+            hd ref Listnode 10 1
+              name wlist list of ref Listnode 0 0
+            const word (8) int 6 0
+        seq no type 10 1
+          * Redir 10 1
+            * ref Redir 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const redir (32) int 6 0
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+ecom to: 
+* list of Redirword 8 0
+  name redirs ref Redirlist 0 0
+eacom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    name nil polymorphic type 1 0
+    seq no type 10 2
+      * string 10 1
+        + int 10 1
+          hd ref Listnode 10 1
+            name wlist list of ref Listnode 0 0
+          const word (8) int 6 0
+      seq no type 10 1
+        * Redir 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+generate desc for Redirword
+ecom: 
+tuple Redirword 10 2
+  seq no type 10 2
+    name nil polymorphic type 1 0
+    seq no type 10 2
+      * string 10 1
+        + int 10 1
+          hd ref Listnode 10 1
+            name wlist list of ref Listnode 0 0
+          const word (8) int 6 0
+      seq no type 10 1
+        * Redir 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+ecom to: 
+name .b79 Redirword 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (0) int 6 0
+ecom: 
+* string 10 1
+  + int 10 1
+    hd ref Listnode 10 1
+      name wlist list of ref Listnode 0 0
+    const word (8) int 6 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (8) int 6 0
+eacom: 
+* string 10 1
+  + int 10 1
+    hd ref Listnode 10 1
+      name wlist list of ref Listnode 0 0
+    const word (8) int 6 0
+generate desc for ref Listnode
+ecom: 
+hd ref Listnode 10 1
+  name wlist list of ref Listnode 0 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+= ref Listnode 10 1
+  name .b74 ref Listnode 0 0
+  name nil ref Listnode 1 0
+ecom: 
+name nil ref Listnode 1 0
+ecom to: 
+name .b74 ref Listnode 0 0
+ecom: 
+* Redir 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (16) int 6 0
+eacom: 
+* Redir 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+generate desc for ref Redir
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+name .b74 ref Redir 0 0
+generate desc for Redir
+ecom: 
+= ref Redir 10 1
+  name .b74 ref Redir 0 0
+  name nil ref Redir 1 0
+ecom: 
+name nil ref Redir 1 0
+ecom to: 
+name .b74 ref Redir 0 0
+generate desc for Redirword
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b79 Redirword 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b79 Redirword 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b79 Redirword 0 0
+      const w (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const w (8) int 6 0
+ecom: 
+= list of ref Listnode 10 1
+  name wlist list of ref Listnode 0 0
+  name nil list of ref Listnode 1 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+name wlist list of ref Listnode 0 0
+ecom: 
+= list of Redirword 10 1
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+  :: list of Redirword 10 1
+    tuple Redirword 10 1
+      seq no type 10 1
+        name nil polymorphic type 1 0
+        seq no type 10 1
+          const  string 1 0
+          seq no type 10 1
+            * Redir 10 1
+              * ref Redir 8 0
+                + int 15 1
+                  name n ref Node 0 0
+                  const redir (32) int 6 0
+    * list of Redirword 8 0
+      name redirs ref Redirlist 0 0
+ecom: 
+:: list of Redirword 10 1
+  tuple Redirword 10 1
+    seq no type 10 1
+      name nil polymorphic type 1 0
+      seq no type 10 1
+        const  string 1 0
+        seq no type 10 1
+          * Redir 10 1
+            * ref Redir 8 0
+              + int 15 1
+                name n ref Node 0 0
+                const redir (32) int 6 0
+  * list of Redirword 8 0
+    name redirs ref Redirlist 0 0
+ecom to: 
+* list of Redirword 8 0
+  name redirs ref Redirlist 0 0
+eacom: 
+tuple Redirword 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+    seq no type 10 1
+      const  string 1 0
+      seq no type 10 1
+        * Redir 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+generate desc for Redirword
+ecom: 
+tuple Redirword 10 1
+  seq no type 10 1
+    name nil polymorphic type 1 0
+    seq no type 10 1
+      const  string 1 0
+      seq no type 10 1
+        * Redir 10 1
+          * ref Redir 8 0
+            + int 15 1
+              name n ref Node 0 0
+              const redir (32) int 6 0
+ecom to: 
+name .b79 Redirword 0 0
+ecom: 
+name nil polymorphic type 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (0) int 6 0
+ecom: 
+const  string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (8) int 6 0
+ecom: 
+* Redir 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+ecom to: 
+* Redir 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const (16) int 6 0
+eacom: 
+* Redir 10 1
+  * ref Redir 8 0
+    + int 15 1
+      name n ref Node 0 0
+      const redir (32) int 6 0
+generate desc for ref Redir
+ecom: 
+* ref Redir 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const redir (32) int 6 0
+ecom to: 
+name .b74 ref Redir 0 0
+generate desc for Redir
+ecom: 
+= ref Redir 10 1
+  name .b74 ref Redir 0 0
+  name nil ref Redir 1 0
+ecom: 
+name nil ref Redir 1 0
+ecom to: 
+name .b74 ref Redir 0 0
+generate desc for Redirword
+ecom: 
+= ref Sys->FD 10 1
+  * ref Sys->FD 0 0
+    adr int 13 1
+      name .b79 Redirword 0 0
+  name nil ref Sys->FD 1 0
+ecom: 
+name nil ref Sys->FD 1 0
+ecom to: 
+* ref Sys->FD 0 0
+  adr int 13 1
+    name .b79 Redirword 0 0
+ecom: 
+= string 10 1
+  * string 0 0
+    + int 13 1
+      adr int 13 1
+        name .b79 Redirword 0 0
+      const w (8) int 6 0
+  name nil string 1 0
+ecom: 
+name nil string 1 0
+ecom to: 
+* string 0 0
+  + int 13 1
+    adr int 13 1
+      name .b79 Redirword 0 0
+    const w (8) int 6 0
+ecom: 
+= list of ref Listnode 10 2
+  name nlist list of ref Listnode 0 0
+  call list of ref Listnode 10 2
+    name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 1
+      name ctxt ref Context 0 0
+      seq no type 10 1
+        * ref Node 8 0
+          + int 15 1
+            name n ref Node 0 0
+            const left (8) int 6 0
+        seq no type 10 1
+          name redirs ref Redirlist 0 0
+          seq no type 10 1
+            name nil list of ref Listnode 1 0
+ecom: 
+call list of ref Listnode 10 2
+  name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+  seq no type 10 1
+    name ctxt ref Context 0 0
+    seq no type 10 1
+      * ref Node 8 0
+        + int 15 1
+          name n ref Node 0 0
+          const left (8) int 6 0
+      seq no type 10 1
+        name redirs ref Redirlist 0 0
+        seq no type 10 1
+          name nil list of ref Listnode 1 0
+ecom to: 
+name nlist list of ref Listnode 0 0
+generate desc for big
+ecom: 
+name ctxt ref Context 0 0
+ecom to: 
+* ref Context 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (64) int 6 0
+ecom: 
+* ref Node 8 0
+  + int 15 1
+    name n ref Node 0 0
+    const left (8) int 6 0
+ecom to: 
+* ref Node 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (72) int 6 0
+ecom: 
+name redirs ref Redirlist 0 0
+ecom to: 
+* ref Redirlist 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (80) int 6 0
+ecom: 
+name nil list of ref Listnode 1 0
+ecom to: 
+* list of ref Listnode 8 0
+  + int 15 0
+    name .b77 big 0 0
+    const (88) int 6 0
+ecom: 
+= list of ref Listnode 10 3
+  name nlist list of ref Listnode 0 0
+  call list of ref Listnode 10 3
+    name concat fn(ctxt: ref Context, nl1: list of ref Listnode, nl2: list of ref Listnode): list of ref Listnode 11 1
+    seq no type 10 3
+      name ctxt ref Context 0 0
+      seq no type 10 3
+        call list of ref Listnode 10 2
+          name glom fn(ctxt: ref Context, n: ref Node, redirs: ref Redirlist, onto: list of ref Listnode): list of ref Listnode 11 1
+          seq no type 10 1
+            name ctxt ref Context 0 0
+            seq no type 10 1
<