--- source: src/main.rs expression: parsed input_file: test-data/lua5.3-tests/main.lua --- [ IfStatement { condition: [ Ident { expr: [ Symbol( "_port", ), ], line: 6, }, ], body: CodeBlock { start: 3, code: [ Return( None, ), ], end: 5, }, next: None, line: 6, column: 5, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing stand-alone interpreter\"", ), ], ], ), ], line: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [], ), ], line: 14, }, ], ], ), ], line: 12, }, Variable { names: [ ( "arg", false, ), ], values: [ [ Ident { expr: [ Symbol( "arg", ), ], line: 16, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "_ARG", ), ], line: 16, }, ], ], line: 18, column: 0, }, Variable { names: [ ( "prog", false, ), ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 18, }, ], ], line: 19, column: 0, }, Variable { names: [ ( "otherprog", false, ), ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 19, }, ], ], line: 20, column: 0, }, Variable { names: [ ( "out", false, ), ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 20, }, ], ], line: 22, column: 0, }, Variable { names: [ ( "progname", false, ), ], values: [], line: 22, column: 2, }, DoBlock( CodeBlock { start: 50, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 25, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 25, }, ], ), Symbol( "]", ), ], line: 25, }, ], body: CodeBlock { start: 10, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 25, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 25, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], line: 25, column: 5, }, ], end: 16, }, line: 25, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "progname", ), ], line: 25, }, ], values: [ [ Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 26, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 26, }, ], ], line: 26, column: 8, }, ], end: 75, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"progname: \"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "progname", ), ], line: 28, }, ], ], ), ], line: 27, }, Variable { names: [ ( "prepfile", false, ), ], values: [ [ Lambda { args: [ "s", "p", ], body: CodeBlock { start: 90, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 31, }, ], values: [ [ Ident { expr: [ Symbol( "p", ), ], line: 31, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "prog", ), ], line: 31, }, ], ], line: 31, column: 5, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "output", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 32, }, ], ], ), ], line: 31, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "write", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 33, }, ], ], ), ], line: 32, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "close", ), Call( [], ), ], line: 34, }, ], ], ), ], line: 33, }, ], end: 116, }, line: 35, column: 1, }, ], ], line: 37, column: 0, }, Function { local: true, name: [ Symbol( "getoutput", ), ], args: [], body: CodeBlock { start: 121, code: [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "input", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 38, }, ], ], ), ], line: 38, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "read", ), Call( [ [ Symbol( "\"a\"", ), ], ], ), ], line: 39, }, ], ], line: 39, column: 9, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "input", ), Call( [], ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 39, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 41, }, ], ], ), ], line: 41, }, ], ], ), ], line: 40, }, Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 42, }, ], ], ), ), ], end: 157, }, line: 43, column: 1, }, Function { local: true, name: [ Symbol( "checkprogout", ), ], args: [ "s", ], body: CodeBlock { start: 163, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 46, }, ], ], line: 47, column: 0, }, ForFuncLoop { iters: [ "line", ], expr: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gmatch", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 47, }, ], [ Symbol( "\".-\\n\"", ), ], ], ), ], line: 47, }, ], stop: None, initial: None, code: CodeBlock { start: 18, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 48, }, ], [ Ident { expr: [ Symbol( "line", ), ], line: 48, }, ], [ Symbol( "1", ), ], [ Symbol( "true", ), ], ], ), ], line: 48, }, ], ], ), ], line: 48, }, ], end: 34, }, line: 49, column: 1, }, ], end: 198, }, line: 50, column: 1, }, Function { local: true, name: [ Symbol( "checkout", ), ], args: [ "s", ], body: CodeBlock { start: 204, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 53, }, ], ], line: 54, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "s", ), ], line: 54, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 54, }, ], body: CodeBlock { start: 11, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"'%s' - '%s'\\n\"", ), ], [ Ident { expr: [ Symbol( "s", ), ], line: 54, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 54, }, ], ], ), ], line: 54, }, ], ], ), ], line: 54, }, ], end: 25, }, next: None, line: 54, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 55, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 55, }, ], ], ), ], line: 54, }, Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 56, }, ], ], ), ), ], end: 238, }, line: 57, column: 1, }, Function { local: true, name: [ Symbol( "RUN", ), ], args: [ "p", "...", ], body: CodeBlock { start: 246, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 61, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 61, }, ], [ Symbol( "\"lua\"", ), ], [ Symbol( "'\"'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "progname", ), ], line: 61, }, Operator( ( "..", true, ), ), Symbol( "'\"'", ), ], [ Symbol( "1", ), ], ], ), ], line: 61, }, ], ], line: 62, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 62, }, ], [ Symbol( "...", ), ], ], ), ], line: 62, }, ], ], line: 62, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 63, }, ], ], ), ], line: 63, }, ], ], ), ], line: 62, }, ], end: 285, }, line: 64, column: 1, }, Function { local: true, name: [ Symbol( "NoRun", ), ], args: [ "msg", "p", "...", ], body: CodeBlock { start: 295, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 67, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 67, }, ], [ Symbol( "\"lua\"", ), ], [ Symbol( "'\"'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "progname", ), ], line: 67, }, Operator( ( "..", true, ), ), Symbol( "'\"'", ), ], [ Symbol( "1", ), ], ], ), ], line: 67, }, ], ], line: 68, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 68, }, ], [ Symbol( "...", ), ], ], ), ], line: 68, }, ], ], line: 68, column: 11, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 68, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"%s 2> %s\"", ), ], [ Ident { expr: [ Symbol( "s", ), ], line: 69, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 69, }, ], ], ), ], line: 69, }, ], ], line: 69, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 70, }, ], ], ), ], line: 70, }, ], ], ), ], line: 69, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 71, }, ], [ Ident { expr: [ Symbol( "msg", ), ], line: 71, }, ], [ Symbol( "1", ), ], [ Symbol( "true", ), ], ], ), ], line: 71, }, ], ], ), ], line: 70, }, ], end: 364, }, line: 72, column: 1, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua -v'", ), ], ], ), ], line: 72, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"(temporary program file used in these tests: %s)\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 76, }, ], ], ), ], line: 76, }, ], ], ), ], line: 74, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 76, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua - < %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 80, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 80, }, ], ], ), ], line: 79, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 80, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n print(\n1, a\n)\n]]", ), ], ], ), ], line: 81, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua - < %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 88, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 88, }, ], ], ), ], line: 87, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\tnil\\n\"", ), ], ], ), ], line: 88, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(10)\\nprint(2)\\n\" | lua > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 91, }, ], ], ), ], line: 89, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n2\\n\"", ), ], ], ), ], line: 91, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(arg[1])\" | lua - -h > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 96, }, ], ], ), ], line: 92, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"-h\\n\"", ), ], ], ), ], line: 96, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path)\"", ), ], ], ), ], line: 97, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_PATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 104, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 104, }, ], ], ), ], line: 101, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"x\\n\"", ), ], ], ), ], line: 104, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_PATH_5_3=y LUA_PATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 108, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 108, }, ], ], ), ], line: 105, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"y\\n\"", ), ], ], ), ], line: 108, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.cpath)\"", ), ], ], ), ], line: 109, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_CPATH=xuxu lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 113, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 113, }, ], ], ), ], line: 112, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"xuxu\\n\"", ), ], ], ), ], line: 113, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_CPATH_5_3=yacc LUA_CPATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 117, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 117, }, ], ], ), ], line: 114, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"yacc\\n\"", ), ], ], ), ], line: 117, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(X)\"", ), ], ], ), ], line: 118, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT=\"X=tonumber(arg[1])\" lua %s 3.2 > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 122, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 122, }, ], ], ), ], line: 121, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"3.2\\n\"", ), ], ], ), ], line: 122, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(X)\"", ), ], ], ), ], line: 123, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT_5_3=\"X=10\" LUA_INIT=\"X=3\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 127, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 127, }, ], ], ), ], line: 126, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n\"", ), ], ], ), ], line: 127, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"x = x or 10; print(x); x = x + 1\"", ), ], ], ), ], line: 128, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT=\"@%s\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 132, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 132, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 132, }, ], ], ), ], line: 131, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n11\\n\"", ), ], ], ), ], line: 132, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "'LUA_INIT:1: msg'", ), ], [ Symbol( "'env LUA_INIT=\"error(\\'msg\\')\" lua'", ), ], ], ), ], line: 133, }, Variable { names: [ ( "defaultpath", false, ), ( "defaultCpath", false, ), ], values: [], line: 139, column: 4, }, DoBlock( CodeBlock { start: 544, code: [ Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path, package.cpath)\"", ), ], ], ), ], line: 142, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT=\"error(10)\" LUA_PATH=xxx LUA_CPATH=xxx lua -E %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 143, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 144, }, ], ], ), ], line: 142, }, Variable { names: [ ( "out", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 145, }, ], ], line: 145, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 145, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 146, }, ], [ Symbol( "\"^(.-)\\t\"", ), ], ], ), ], line: 146, }, ], ], line: 146, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 146, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 147, }, ], [ Symbol( "\"\\t(.-)$\"", ), ], ], ), ], line: 147, }, ], ], line: 147, column: 10, }, ], end: 583, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 151, }, ], [ Symbol( "\"xxx\"", ), ], ], ), ], line: 151, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 152, }, ], [ Symbol( "\"lua\"", ), ], ], ), ], line: 151, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 153, }, ], [ Symbol( "\"xxx\"", ), ], ], ), ], line: 153, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 154, }, ], [ Symbol( "\"lua\"", ), ], ], ), ], line: 153, }, ], ], ), ], line: 148, }, Function { local: true, name: [ Symbol( "convert", ), ], args: [ "p", ], body: CodeBlock { start: 629, code: [ Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path)\"", ), ], ], ), ], line: 159, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"%s\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "p", ), ], line: 160, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 160, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 160, }, ], ], ), ], line: 159, }, Variable { names: [ ( "expected", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 161, }, ], ], line: 161, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "expected", ), ], line: 161, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "expected", ), ], line: 162, }, ], [ Symbol( "1", ), ], [ Operator( ( "-", false, ), ), Symbol( "2", ), ], ], ), ], line: 162, }, ], ], line: 162, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 163, }, ], [ Symbol( "\";;\"", ), ], [ Symbol( "\";\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "defaultpath", ), ], line: 163, }, Operator( ( "..", true, ), ), Symbol( "\";\"", ), ], ], ), ], line: 163, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "expected", ), ], line: 163, }, ], ], ), ], line: 162, }, ], end: 682, }, line: 164, column: 1, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";\"", ), ], ], ), ], line: 164, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;\"", ), ], ], ), ], line: 166, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;;\"", ), ], ], ), ], line: 167, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;;;\"", ), ], ], ), ], line: 168, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;;;;\"", ), ], ], ), ], line: 169, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;a;;;bc\"", ), ], ], ), ], line: 170, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(1); a=2; return {x=15}\"", ), ], ], ), ], line: 171, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Expr( [ Symbol( "\"print(a); print(_G['%s'].x)\"", ), ], ), Ident { expr: [ Symbol( ":", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 176, }, ], ], ), ], line: 176, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 176, }, ], ], ), ], line: 175, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"?;;\" lua -l %s -l%s -lstring -l io %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 177, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 177, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 177, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 177, }, ], ], ), ], line: 176, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n2\\n15\\n2\\n15\\n\"", ), ], ], ), ], line: 177, }, Variable { names: [ ( "a", false, ), ], values: [ [ MultilineString( "[[\n assert(#arg == 3 and arg[1] == 'a' and\n arg[2] == 'b' and arg[3] == 'c')\n assert(arg[-1] == '--' and arg[-2] == \"-e \" and arg[-3] == '%s')\n assert(arg[4] == nil and arg[-4] == nil)\n local a, b, c = ...\n assert(... == 'a' and a == 'a' and b == 'b' and c == 'c')\n]]", ), ], ], line: 188, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 188, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 189, }, ], [ Ident { expr: [ Symbol( "progname", ), ], line: 189, }, ], ], ), ], line: 189, }, ], ], line: 189, column: 10, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 190, }, ], ], ), ], line: 189, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua \"-e \" -- %s a b c'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 191, }, ], ], ), ], line: 190, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg)\"", ), ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg)\"", ), ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 195, }, ], ], ), ], line: 194, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"?;;\" lua -l%s - < %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 196, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 196, }, ], ], ), ], line: 195, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(...)\" | lua -e \"arg[1] = 100\" - > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 199, }, ], ], ), ], line: 196, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"100\\n\"", ), ], ], ), ], line: 199, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'arg' is not a table\"", ), ], [ Symbol( "'echo \"\" | lua -e \"arg = 1\" -'", ), ], ], ), ], line: 200, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo 10 | lua -e \"print=nil\" -i > /dev/null 2> %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 204, }, ], ], ), ], line: 201, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 205, }, ], [ Symbol( "\"error calling 'print'\"", ), ], ], ), ], line: 205, }, ], ], ), ], line: 204, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"io.stderr:write(1000)\\ncont\" | lua -e \"require\\'debug\\'.debug()\" 2> %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 208, }, ], ], ), ], line: 205, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"lua_debug> 1000lua_debug> \"", ), ], ], ), ], line: 208, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[print(({...})[30])]]", ), ], ], ), ], line: 209, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 213, }, ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\" a\"", ), ], [ Symbol( "30", ), ], ], ), ], line: 213, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 213, }, ], ], ), ], line: 212, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"a\\n\"", ), ], ], ), ], line: 213, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-eprint(1)\" -ea=3 -e \"print(a)\" > %s]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 216, }, ], ], ), ], line: 214, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n3\\n\"", ), ], ], ), ], line: 216, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n(6*2-6) -- ===\na =\n10\nprint(a)\na]]", ), ], ], ), ], line: 217, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 226, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 226, }, ], ], ), ], line: 225, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"6\\n10\\n10\\n\\n\"", ), ], ], ), ], line: 226, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"a = [[b\\nc\\nd\\ne]]\\n=a\"", ), ], ], ), ], line: 227, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 230, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 230, }, ], ], ), ], line: 229, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"b\\nc\\nd\\ne\\n\\n\"", ), ], ], ), ], line: 230, }, Alter { names: [ Ident { expr: [ Symbol( "prompt", ), ], line: 231, }, ], values: [ [ Symbol( "\"alo\"", ), ], ], line: 233, column: 3, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[ --\na = 2\n]]", ), ], ], ), ], line: 233, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-e_PROMPT='%s'\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 237, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 237, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 237, }, ], ], ), ], line: 236, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 238, }, ], ], line: 238, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 239, }, ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 239, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 239, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 239, }, ], ], ), ], line: 239, }, ], ], ), ], line: 238, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\ndebug = require \"debug\"\nm = {x=0}\nsetmetatable(m, {__tostring = function(x)\n return tostring(debug.getinfo(4).currentline + x.x)\nend})\nerror(m)\n]]", ), ], ], ), ], line: 239, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Ident { expr: [ Symbol( "progname", ), ], line: 250, }, Operator( ( "..", true, ), ), Symbol( "\": 6\\n\"", ), ], [ MultilineString( "[[lua %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 250, }, ], ], ), ], line: 249, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"error{}\"", ), ], ], ), ], line: 250, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"error object is a table value\"", ), ], [ MultilineString( "[[lua %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 253, }, ], ], ), ], line: 252, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 253, }, ], values: [ [ MultilineString( "[=[ -- \nfunction f ( x ) \n local a = [[\nxuxu\n]]\n local b = \"\\\nxuxu\\n\"\n if x == 11 then return 1 + 12 , 2 + 20 end --[[ test multiple returns ]]\n return x + 1 \n --\\\\\nend\nreturn( f( 100 ) )\nassert( a == b )\ndo return f( 11 ) end ]=]", ), ], ], line: 270, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 270, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 271, }, ], [ Symbol( "' '", ), ], [ Symbol( "'\\n\\n'", ), ], ], ), ], line: 271, }, ], ], line: 271, column: 12, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 272, }, ], ], ), ], line: 271, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 273, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 273, }, ], ], ), ], line: 272, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"101\\n13\\t22\\n\\n\"", ), ], ], ), ], line: 273, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[#comment in 1st line without \\n at the end]]", ), ], ], ), ], line: 274, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 277, }, ], ], ), ], line: 276, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[#test line number when file starts with comment line\ndebug = require\"debug\"\nprint(debug.getinfo(1).currentline)\n]]", ), ], ], ), ], line: 277, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 283, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 283, }, ], ], ), ], line: 282, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "'3'", ), ], ], ), ], line: 283, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ MultilineString( "[[io.output(%q); io.write('alo')]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 287, }, ], ], ), ], line: 287, }, ], ], ), ], line: 284, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 288, }, ], ], ), ], line: 287, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "'alo'", ), ], ], ), ], line: 288, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -v -e\"print'hello'\" > %s]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 292, }, ], ], ), ], line: 289, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 292, }, ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 293, }, ], ], line: 293, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 294, }, ], [ Symbol( "\"PUC%-Rio\\nhello\"", ), ], ], ), ], line: 294, }, ], ], ), ], line: 293, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(nil, true)\"", ), ], ], ), ], line: 294, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 299, }, ], ], ), ], line: 298, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(0, true)\"", ), ], ], ), ], line: 299, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 301, }, ], ], ), ], line: 300, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(true, true)\"", ), ], ], ), ], line: 301, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 303, }, ], ], ), ], line: 302, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(1, true)\"", ), ], ], ), ], line: 303, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 305, }, ], ], ), ], line: 304, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(false, true)\"", ), ], ], ), ], line: 305, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 307, }, ], ], ), ], line: 306, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 310, }, ], ], ), ], line: 310, }, ], ], ), ], line: 307, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "otherprog", ), ], line: 311, }, ], ], ), ], line: 311, }, ], ], ), ], line: 310, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 312, }, ], ], ), ], line: 312, }, ], ], ), ], line: 311, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-h'\"", ), ], [ Symbol( "\"lua -h\"", ), ], ], ), ], line: 312, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '---'\"", ), ], [ Symbol( "\"lua ---\"", ), ], ], ), ], line: 315, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-Ex'\"", ), ], [ Symbol( "\"lua -Ex\"", ), ], ], ), ], line: 316, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-vv'\"", ), ], [ Symbol( "\"lua -vv\"", ), ], ], ), ], line: 317, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-iv'\"", ), ], [ Symbol( "\"lua -iv\"", ), ], ], ), ], line: 318, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'-e' needs argument\"", ), ], [ Symbol( "\"lua -e\"", ), ], ], ), ], line: 319, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"syntax error\"", ), ], [ Symbol( "\"lua -e a\"", ), ], ], ), ], line: 320, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'-l' needs argument\"", ), ], [ Symbol( "\"lua -l\"", ), ], ], ), ], line: 321, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 325, }, ], body: CodeBlock { start: 1180, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing 'not enough memory' to create a state\"", ), ], ], ), ], line: 326, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"not enough memory\"", ), ], [ Symbol( "\"env MEMLIMIT=100 lua\"", ), ], ], ), ], line: 326, }, ], end: 1191, }, next: None, line: 328, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 328, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing Ctrl C'", ), ], ], ), ], line: 329, }, DoBlock( CodeBlock { start: 1200, code: [ Function { local: true, name: [ Symbol( "kill", ), ], args: [ "pid", ], body: CodeBlock { start: 6, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "'kill -INT %d 2> /dev/null'", ), ], [ Ident { expr: [ Symbol( "pid", ), ], line: 335, }, ], ], ), ], line: 335, }, ], ], ), ], line: 335, }, ], ], ), ), ], end: 21, }, line: 336, column: 1, }, Function { local: true, name: [ Symbol( "runback", ), ], args: [ "luaprg", ], body: CodeBlock { start: 27, code: [ Variable { names: [ ( "shellprg", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "'%s -e \"%s\" & echo $!'", ), ], [ Ident { expr: [ Symbol( "progname", ), ], line: 342, }, ], [ Ident { expr: [ Symbol( "luaprg", ), ], line: 342, }, ], ], ), ], line: 342, }, ], ], line: 343, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "popen", ), Call( [ [ Ident { expr: [ Symbol( "shellprg", ), ], line: 343, }, ], [ Symbol( "\"r\"", ), ], ], ), ], line: 343, }, ], ], line: 344, column: 0, }, Variable { names: [ ( "pid", false, ), ], values: [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 344, }, ], ], line: 344, column: 8, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"(if test fails now, it may leave a Lua script running in \\z\n background, pid \"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "pid", ), ], line: 346, }, Operator( ( "..", true, ), ), Symbol( "\")\"", ), ], ], ), ], line: 344, }, Return( Some( [ [ Ident { expr: [ Symbol( "f", ), ], line: 347, }, ], [ Ident { expr: [ Symbol( "pid", ), ], line: 347, }, ], ], ), ), ], end: 72, }, line: 348, column: 1, }, Variable { names: [ ( "f", false, ), ( "pid", false, ), ], values: [ [ Ident { expr: [ Symbol( "runback", ), Call( [ [ Symbol( "[[\n pcall(function () print(12); while true do end end); print(42)]]", ), ], ], ), ], line: 351, }, ], ], line: 352, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 354, }, Operator( ( "==", true, ), ), Symbol( "\"12\"", ), ], ], ), ], line: 352, }, Ident { expr: [ Symbol( "kill", ), Call( [ [ Ident { expr: [ Symbol( "pid", ), ], line: 355, }, ], ], ), ], line: 354, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 357, }, Operator( ( "==", true, ), ), Symbol( "\"42\"", ), ], ], ), ], line: 355, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 358, }, ], ], ), ], line: 357, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"done\"", ), ], ], ), ], line: 358, }, Variable { names: [ ( "f", false, ), ( "pid", false, ), ], values: [ [ Ident { expr: [ Symbol( "runback", ), Call( [ [ Symbol( "[[\n print(15); string.find(string.rep('a', 100000), '.*b')]]", ), ], ], ), ], line: 362, }, ], ], line: 363, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 365, }, Operator( ( "==", true, ), ), Symbol( "\"15\"", ), ], ], ), ], line: 363, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Symbol( "\"sleep 1\"", ), ], ], ), ], line: 366, }, ], ], ), ], line: 365, }, Variable { names: [ ( "n", false, ), ], values: [ [ Symbol( "100", ), ], ], line: 369, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "0", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 152, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "kill", ), Call( [ [ Ident { expr: [ Symbol( "pid", ), ], line: 370, }, ], ], ), ], line: 370, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 371, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 371, }, ], ], line: 372, column: 0, }, Break, ], end: 12, }, next: None, line: 373, column: 1, }, ], end: 165, }, line: 374, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 375, }, ], ], ), ], line: 374, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 376, }, Operator( ( ">=", true, ), ), Symbol( "2", ), ], ], ), ], line: 375, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"done (with %d kills)\"", ), ], [ Ident { expr: [ Symbol( "n", ), ], line: 377, }, ], ], ), ], line: 377, }, ], ], ), ], line: 376, }, ], end: 1391, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"OK\"", ), ], ], ), ], line: 379, }, ]