
copy flag tests from mtail_test.sh

standard library, search path

refactor fs and notify into single interface

no trailing newline in parser test, requires changes to expr stmt

parse tree/ast testing, s-expressions to render expected?

mapping between progs and logs to reduce wasted processing

~ and !~ 

define a capref in the same expression it's used: e.g.
  /(?<x>.*)/ && $x > 0

conversion in vm.compare() crashes on $var == "string" when $var is
    float (logical.mtail, input line "12.8") -- 

codegen for conditional and jmp is weird for 2-deep trees

Using a const pattern fragment as the first or only in a pattern expr is a
    parse error.
	{"concat expr 1", `
/bar/ + X {
}`},
	{"concat expr 2", `
X {
}`},
	// 	{"match expression 3", `
	// $foo =~ X {
	// }
	// `},

Match against a variable requires simplifying binaryExpr grammar to elim the
    concat_expr branch, fixing the id_expr problem above
	{"match expr 2", `
/(?P<foo>.{6}) (?P<bar>.*)/ {
  $foo =~ $bar {
  }
}`},


bytecode like
[{push 1} {push 0} {cmp 1} {jm 6} {push 0} {jmp 7} {push 1} {jnm 13}
    {setmatched false} {mload 0} {dload 0} {inc <nil>} {setmatched true}]
can be expressed as
[{push 1} {push 0} {cmp 1} {jm 9} {setmatched false} {mload 0} {dload 0} {inc
    <nil>} {setmatched true}]
but jnm 13 is from the condExpr and the previous is from a comparison binary
    expr; an optimizer is needed to collapse the bytecode to undersand that
    cmp, jm, push, jump, push, jnm in sequence like so is the same as a cmp, jm
and we need to worry about the jump table too


count stack size and preallocate stack


Use capture group references to feed back to declaring regular expression,
    noting unused caprefs,
    possibly flipping back to noncapturing (and renumbering the caprefs?)
