--- source: src/main.rs expression: parsed input_file: test-data/lua5.4-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: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 47, }, ], [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ], ), ], line: 47, }, Operator( ( "==", true, ), ), Symbol( "\"\\n\"", ), ], ], ), ], line: 47, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 48, }, ], ], line: 49, column: 0, }, ForFuncLoop { iters: [ "line", ], expr: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gmatch", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 49, }, ], [ Symbol( "\".-\\n\"", ), ], ], ), ], line: 49, }, ], stop: None, initial: None, code: CodeBlock { start: 32, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 50, }, ], [ Ident { expr: [ Symbol( "line", ), ], line: 50, }, ], [ Symbol( "1", ), ], [ Symbol( "true", ), ], ], ), ], line: 50, }, ], ], ), ], line: 50, }, ], end: 48, }, line: 51, column: 1, }, ], end: 212, }, line: 52, column: 1, }, Function { local: true, name: [ Symbol( "checkout", ), ], args: [ "s", ], body: CodeBlock { start: 218, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 55, }, ], ], line: 56, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "s", ), ], line: 56, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 56, }, ], 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: 56, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 56, }, ], ], ), ], line: 56, }, ], ], ), ], line: 56, }, ], end: 25, }, next: None, line: 56, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 57, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 57, }, ], ], ), ], line: 56, }, Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 58, }, ], ], ), ), ], end: 252, }, line: 59, column: 1, }, Function { local: true, name: [ Symbol( "RUN", ), ], args: [ "p", "...", ], body: CodeBlock { start: 260, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 63, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 63, }, ], [ Symbol( "\"lua\"", ), ], [ Symbol( "'\"'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "progname", ), ], line: 63, }, Operator( ( "..", true, ), ), Symbol( "'\"'", ), ], [ Symbol( "1", ), ], ], ), ], line: 63, }, ], ], line: 64, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 64, }, ], [ Symbol( "...", ), ], ], ), ], line: 64, }, ], ], line: 64, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 65, }, ], ], ), ], line: 65, }, ], ], ), ], line: 64, }, ], end: 299, }, line: 66, column: 1, }, Function { local: true, name: [ Symbol( "NoRun", ), ], args: [ "msg", "p", "...", ], body: CodeBlock { start: 309, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 69, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 69, }, ], [ Symbol( "\"lua\"", ), ], [ Symbol( "'\"'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "progname", ), ], line: 69, }, Operator( ( "..", true, ), ), Symbol( "'\"'", ), ], [ Symbol( "1", ), ], ], ), ], line: 69, }, ], ], line: 70, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 70, }, ], [ Symbol( "...", ), ], ], ), ], line: 70, }, ], ], line: 70, column: 11, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 70, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"%s 2> %s\"", ), ], [ Ident { expr: [ Symbol( "s", ), ], line: 71, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 71, }, ], ], ), ], line: 71, }, ], ], line: 71, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 72, }, ], ], ), ], line: 72, }, ], ], ), ], line: 71, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 73, }, ], [ Ident { expr: [ Symbol( "msg", ), ], line: 73, }, ], [ Symbol( "1", ), ], [ Symbol( "true", ), ], ], ), ], line: 73, }, ], ], ), ], line: 72, }, ], end: 378, }, line: 74, column: 1, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua -v'", ), ], ], ), ], line: 74, }, 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: 78, }, ], ], ), ], line: 78, }, ], ], ), ], line: 76, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 78, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua - < %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 82, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 82, }, ], ], ), ], line: 81, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 82, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n print(\n1, a\n)\n]]", ), ], ], ), ], line: 83, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua - < %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 90, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 90, }, ], ], ), ], line: 89, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\tnil\\n\"", ), ], ], ), ], line: 90, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(10)\\nprint(2)\\n\" | lua > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 93, }, ], ], ), ], line: 91, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n2\\n\"", ), ], ], ), ], line: 93, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(arg[1])\" | lua - -h > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 98, }, ], ], ), ], line: 94, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"-h\\n\"", ), ], ], ), ], line: 98, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path)\"", ), ], ], ), ], line: 99, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_PATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 106, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 106, }, ], ], ), ], line: 103, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"x\\n\"", ), ], ], ), ], line: 106, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_PATH_5_4=y LUA_PATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 110, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 110, }, ], ], ), ], line: 107, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"y\\n\"", ), ], ], ), ], line: 110, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.cpath)\"", ), ], ], ), ], line: 111, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_CPATH=xuxu lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 115, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 115, }, ], ], ), ], line: 114, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"xuxu\\n\"", ), ], ], ), ], line: 115, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT= LUA_CPATH_5_4=yacc LUA_CPATH=x lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 119, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 119, }, ], ], ), ], line: 116, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"yacc\\n\"", ), ], ], ), ], line: 119, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(X)\"", ), ], ], ), ], line: 120, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT=\"X=tonumber(arg[1])\" lua %s 3.2 > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 124, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 124, }, ], ], ), ], line: 123, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"3.2\\n\"", ), ], ], ), ], line: 124, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(X)\"", ), ], ], ), ], line: 125, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT_5_4=\"X=10\" LUA_INIT=\"X=3\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 129, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 129, }, ], ], ), ], line: 128, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n\"", ), ], ], ), ], line: 129, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"x = x or 10; print(x); x = x + 1\"", ), ], ], ), ], line: 130, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_INIT=\"@%s\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 134, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 134, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 134, }, ], ], ), ], line: 133, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"10\\n11\\n\"", ), ], ], ), ], line: 134, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "'LUA_INIT:1: msg'", ), ], [ Symbol( "'env LUA_INIT=\"error(\\'msg\\')\" lua'", ), ], ], ), ], line: 135, }, Variable { names: [ ( "defaultpath", false, ), ( "defaultCpath", false, ), ], values: [], line: 141, column: 4, }, DoBlock( CodeBlock { start: 558, code: [ Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path, package.cpath)\"", ), ], ], ), ], line: 144, }, 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: 145, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 146, }, ], ], ), ], line: 144, }, Variable { names: [ ( "output", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 147, }, ], ], line: 147, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 147, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "output", ), ], line: 148, }, ], [ Symbol( "\"^(.-)\\t\"", ), ], ], ), ], line: 148, }, ], ], line: 148, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 148, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "output", ), ], line: 149, }, ], [ Symbol( "\"\\t(.-)$\"", ), ], ], ), ], line: 149, }, ], ], line: 149, column: 10, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env -i lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 152, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 152, }, ], ], ), ], line: 149, }, Variable { names: [ ( "out", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 153, }, ], ], line: 153, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 154, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "output", ), ], line: 154, }, ], [ Symbol( "\"^(.-)\\t\"", ), ], ], ), ], line: 154, }, ], ], ), ], line: 153, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 155, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "output", ), ], line: 155, }, ], [ Symbol( "\"\\t(.-)$\"", ), ], ], ), ], line: 155, }, ], ], ), ], line: 154, }, ], end: 637, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 159, }, ], [ Symbol( "\"xxx\"", ), ], ], ), ], line: 159, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultpath", ), ], line: 160, }, ], [ Symbol( "\"lua\"", ), ], ], ), ], line: 159, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 161, }, ], [ Symbol( "\"xxx\"", ), ], ], ), ], line: 161, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "defaultCpath", ), ], line: 162, }, ], [ Symbol( "\"lua\"", ), ], ], ), ], line: 161, }, ], ], ), ], line: 156, }, Function { local: true, name: [ Symbol( "convert", ), ], args: [ "p", ], body: CodeBlock { start: 683, code: [ Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(package.path)\"", ), ], ], ), ], line: 167, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"%s\" lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "p", ), ], line: 168, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 168, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 168, }, ], ], ), ], line: 167, }, Variable { names: [ ( "expected", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 169, }, ], ], line: 169, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "expected", ), ], line: 169, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "expected", ), ], line: 170, }, ], [ Symbol( "1", ), ], [ Operator( ( "-", false, ), ), Symbol( "2", ), ], ], ), ], line: 170, }, ], ], line: 171, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 171, }, ], [ Symbol( "\";;\"", ), ], ], ), ], line: 171, }, ], body: CodeBlock { start: 43, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 172, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 172, }, ], [ Symbol( "\";;\"", ), ], [ Symbol( "\";\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "defaultpath", ), ], line: 172, }, Operator( ( "..", true, ), ), Symbol( "\";\"", ), ], ], ), ], line: 172, }, ], ], line: 172, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 172, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 173, }, ], [ Symbol( "\"^;\"", ), ], [ Symbol( "\"\"", ), ], ], ), ], line: 173, }, ], ], line: 173, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 173, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 174, }, ], [ Symbol( "\";$\"", ), ], [ Symbol( "\"\"", ), ], ], ), ], line: 174, }, ], ], line: 174, column: 12, }, ], end: 84, }, next: None, line: 175, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 176, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "expected", ), ], line: 176, }, ], ], ), ], line: 175, }, ], end: 774, }, line: 177, column: 1, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";\"", ), ], ], ), ], line: 177, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;\"", ), ], ], ), ], line: 179, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\"a;;b\"", ), ], ], ), ], line: 180, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\";;b\"", ), ], ], ), ], line: 181, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\"a;;\"", ), ], ], ), ], line: 182, }, Ident { expr: [ Symbol( "convert", ), Call( [ [ Symbol( "\"a;b;;c\"", ), ], ], ), ], line: 183, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(1); a=2; return {x=15}\"", ), ], ], ), ], line: 184, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Expr( [ Symbol( "\"print(a); print(_G['%s'].x)\"", ), ], ), Ident { expr: [ Symbol( ":", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 189, }, ], ], ), ], line: 189, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 189, }, ], ], ), ], line: 188, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"?;;\" lua -l %s -l%s -lstring -l io %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 190, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 190, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 190, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 190, }, ], ], ), ], line: 189, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n2\\n15\\n2\\n15\\n\"", ), ], ], ), ], line: 190, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(str.upper'alo alo', m.max(10, 20))\"", ), ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua -l 'str=string' '-lm=math' -e 'print(m.sin(0))' %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 195, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 195, }, ], ], ), ], line: 194, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"0.0\\nALO ALO\\t20\\n\"", ), ], ], ), ], line: 195, }, 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] == undef and arg[-4] == undef)\n local a, b, c = ...\n assert(... == 'a' and a == 'a' and b == 'b' and c == 'c')\n]]", ), ], ], line: 206, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 206, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 207, }, ], [ Ident { expr: [ Symbol( "progname", ), ], line: 207, }, ], ], ), ], line: 207, }, ], ], line: 207, column: 10, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 208, }, ], ], ), ], line: 207, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua \"-e \" -- %s a b c'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 209, }, ], ], ), ], line: 208, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg)\"", ), ], ], ), ], line: 209, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg)\"", ), ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 213, }, ], ], ), ], line: 212, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'env LUA_PATH=\"?;;\" lua -l%s - < %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 214, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 214, }, ], ], ), ], line: 213, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"print(...)\" | lua -e \"arg[1] = 100\" - > %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 217, }, ], ], ), ], line: 214, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"100\\n\"", ), ], ], ), ], line: 217, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'arg' is not a table\"", ), ], [ Symbol( "'echo \"\" | lua -e \"arg = 1\" -'", ), ], ], ), ], line: 218, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo 10 | lua -e \"print=nil\" -i > /dev/null 2> %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 222, }, ], ], ), ], line: 219, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 223, }, ], [ Symbol( "\"error calling 'print'\"", ), ], ], ), ], line: 223, }, ], ], ), ], line: 222, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"io.stderr:write(1000)\\ncont\" | lua -e \"require\\'debug\\'.debug()\" 2> %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 226, }, ], ], ), ], line: 223, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"lua_debug> 1000lua_debug> \"", ), ], ], ), ], line: 226, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing warnings\"", ), ], ], ), ], line: 227, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'echo \"io.stderr:write(1); warn[[XXX]]\" | lua 2> %s'", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 233, }, ], ], ), ], line: 230, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\"", ), ], ], ), ], line: 233, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\nwarn(\"@allow\") -- unknown control, ignored\nwarn(\"@off\", \"XXX\", \"@off\") -- these are not control messages\nwarn(\"@off\") -- this one is\nwarn(\"@on\", \"YYY\", \"@on\") -- not control, but warn is off\nwarn(\"@off\") -- keep it off\nwarn(\"@on\") -- restart warnings\nwarn(\"\", \"@on\") -- again, no control, real warning\nwarn(\"@on\") -- keep it \"started\"\nwarn(\"Z\", \"Z\", \"Z\") -- common warning\n]]", ), ], ], ), ], line: 234, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua -W %s 2> %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 247, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 247, }, ], ], ), ], line: 246, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "[[\nLua warning: @offXXX@off\nLua warning: @on\nLua warning: ZZZ\n]]", ), ], ], ), ], line: 247, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\nwarn(\"@allow\")\n-- create two objects to be finalized when closing state\n-- the errors in the finalizers must generate warnings\nu1 = setmetatable({}, {__gc = function () error(\"XYZ\") end})\nu2 = setmetatable({}, {__gc = function () error(\"ZYX\") end})\n]]", ), ], ], ), ], line: 252, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua -W %s 2> %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 261, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 261, }, ], ], ), ], line: 260, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"ZYX)\\nXYZ)\\n\"", ), ], ], ), ], line: 261, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n-- should be called last\nprint(\"creating 1\")\nsetmetatable({}, {__gc = function () print(1) end})\n\nprint(\"creating 2\")\nsetmetatable({}, {__gc = function ()\n print(\"2\")\n print(\"creating 3\")\n -- this finalizer should not be called, as object will be\n -- created after 'lua_close' has been called\n setmetatable({}, {__gc = function () print(3) end})\n print(collectgarbage()) -- cannot call collector here\n os.exit(0, true)\nend})\n]]", ), ], ], ), ], line: 262, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua -W %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 282, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 282, }, ], ], ), ], line: 281, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "[[\ncreating 1\ncreating 2\n2\ncreating 3\nnil\n1\n]]", ), ], ], ), ], line: 282, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[print(({...})[30])]]", ), ], ], ), ], line: 290, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 295, }, ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\" a\"", ), ], [ Symbol( "30", ), ], ], ), ], line: 295, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 295, }, ], ], ), ], line: 294, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"a\\n\"", ), ], ], ), ], line: 295, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-eprint(1)\" -ea=3 -e \"print(a)\" > %s]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 298, }, ], ], ), ], line: 296, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n3\\n\"", ), ], ], ), ], line: 298, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n(6*2-6) -- ===\na =\n10\nprint(a)\na]]", ), ], ], ), ], line: 299, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 308, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 308, }, ], ], ), ], line: 307, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"6\\n10\\n10\\n\\n\"", ), ], ], ), ], line: 308, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"a = [[b\\nc\\nd\\ne]]\\n=a\"", ), ], ], ), ], line: 309, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 312, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 312, }, ], ], ), ], line: 311, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"b\\nc\\nd\\ne\\n\\n\"", ), ], ], ), ], line: 312, }, Alter { names: [ Ident { expr: [ Symbol( "prompt", ), ], line: 313, }, ], values: [ [ Symbol( "\"alo\"", ), ], ], line: 315, column: 3, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[ --\na = 2\n]]", ), ], ], ), ], line: 315, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-e_PROMPT='%s'\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 319, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 319, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 319, }, ], ], ), ], line: 318, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 320, }, ], ], line: 320, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 321, }, ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 321, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 321, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 321, }, ], ], ), ], line: 321, }, ], ], ), ], line: 320, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[ --\na = 2\n]]", ), ], ], ), ], line: 321, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 327, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 327, }, ], ], ), ], line: 326, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 328, }, ], ], line: 328, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "prompt", ), ], line: 328, }, ], values: [ [ Symbol( "\"> \"", ), ], ], line: 329, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 330, }, ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 330, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 330, }, Operator( ( "..", true, ), ), Symbol( "\".*\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "prompt", ), ], line: 330, }, ], ], ), ], line: 330, }, ], ], ), ], line: 329, }, Alter { names: [ Ident { expr: [ Symbol( "prompt", ), ], line: 330, }, ], values: [ [ Symbol( "\"local C = 0;\\z\n _PROMPT=setmetatable({},{__tostring = function () \\z\n C = C + 1; return C end})\"", ), ], ], line: 337, column: 1, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[ --\na = 2\n]]", ), ], ], ), ], line: 337, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e \"%s\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 341, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 341, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 341, }, ], ], ), ], line: 340, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 342, }, ], ], line: 342, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 343, }, ], [ MultilineString( "[[\n1 --\n2a = 2\n3\n]]", ), ], [ Symbol( "1", ), ], [ Symbol( "true", ), ], ], ), ], line: 343, }, ], ], ), ], line: 342, }, 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: 347, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Ident { expr: [ Symbol( "progname", ), ], line: 359, }, Operator( ( "..", true, ), ), Symbol( "\": 6\\n\"", ), ], [ MultilineString( "[[lua %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 359, }, ], ], ), ], line: 358, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"error{}\"", ), ], ], ), ], line: 359, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"error object is a table value\"", ), ], [ MultilineString( "[[lua %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 362, }, ], ], ), ], line: 361, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 362, }, ], 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: 379, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 379, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 380, }, ], [ Symbol( "' '", ), ], [ Symbol( "'\\n\\n'", ), ], ], ), ], line: 380, }, ], ], line: 380, column: 12, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 381, }, ], ], ), ], line: 380, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 382, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 382, }, ], ], ), ], line: 381, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"101\\n13\\t22\\n\\n\"", ), ], ], ), ], line: 382, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[#comment in 1st line without \\n at the end]]", ), ], ], ), ], line: 383, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 386, }, ], ], ), ], line: 385, }, 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: 386, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 392, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 392, }, ], ], ), ], line: 391, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "'3\\n'", ), ], ], ), ], line: 392, }, 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: 396, }, ], ], ), ], line: 396, }, ], ], ), ], line: 393, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 397, }, ], ], ), ], line: 396, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "'alo'", ), ], ], ), ], line: 397, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -v -e\"print'hello'\" > %s]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 401, }, ], ], ), ], line: 398, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 401, }, ], values: [ [ Ident { expr: [ Symbol( "getoutput", ), Call( [], ), ], line: 402, }, ], ], line: 402, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 403, }, ], [ Symbol( "\"PUC%-Rio\\nhello\"", ), ], ], ), ], line: 403, }, ], ], ), ], line: 402, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(nil, true)\"", ), ], ], ), ], line: 403, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 408, }, ], ], ), ], line: 407, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(0, true)\"", ), ], ], ), ], line: 408, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 410, }, ], ], ), ], line: 409, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(true, true)\"", ), ], ], ), ], line: 410, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 412, }, ], ], ), ], line: 411, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(1, true)\"", ), ], ], ), ], line: 412, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 414, }, ], ], ), ], line: 413, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"os.exit(false, true)\"", ), ], ], ), ], line: 414, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 416, }, ], ], ), ], line: 415, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n local x = setmetatable({},\n {__close = function (self, err)\n assert(err == nil)\n print(\"Ok\")\n end})\n local e1 = setmetatable({}, {__close = function () print(120) end})\n os.exit(true, true)\n]]", ), ], ], ), ], line: 416, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua %s > %s'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 429, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 429, }, ], ], ), ], line: 428, }, Ident { expr: [ Symbol( "checkprogout", ), Call( [ [ Symbol( "\"120\\nOk\\n\"", ), ], ], ), ], line: 429, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 434, }, ], ], ), ], line: 434, }, ], ], ), ], line: 430, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "otherprog", ), ], line: 435, }, ], ], ), ], line: 435, }, ], ], ), ], line: 434, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 436, }, ], ], ), ], line: 436, }, ], ], ), ], line: 435, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-h'\"", ), ], [ Symbol( "\"lua -h\"", ), ], ], ), ], line: 436, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '---'\"", ), ], [ Symbol( "\"lua ---\"", ), ], ], ), ], line: 439, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-Ex'\"", ), ], [ Symbol( "\"lua -Ex\"", ), ], ], ), ], line: 440, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-vv'\"", ), ], [ Symbol( "\"lua -vv\"", ), ], ], ), ], line: 441, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"unrecognized option '-iv'\"", ), ], [ Symbol( "\"lua -iv\"", ), ], ], ), ], line: 442, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'-e' needs argument\"", ), ], [ Symbol( "\"lua -e\"", ), ], ], ), ], line: 443, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"syntax error\"", ), ], [ Symbol( "\"lua -e a\"", ), ], ], ), ], line: 444, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"'-l' needs argument\"", ), ], [ Symbol( "\"lua -l\"", ), ], ], ), ], line: 445, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 449, }, ], body: CodeBlock { start: 1428, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing 'not enough memory' to create a state\"", ), ], ], ), ], line: 450, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"not enough memory\"", ), ], [ Symbol( "\"env MEMLIMIT=100 lua\"", ), ], ], ), ], line: 450, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@store\"", ), ], ], ), ], line: 451, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@123\"", ), ], [ Symbol( "\"456\"", ), ], [ Symbol( "\"789\"", ), ], ], ), ], line: 454, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 456, }, Operator( ( "==", true, ), ), Symbol( "\"@123456789\"", ), ], ], ), ], line: 455, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 456, }, ], values: [ [ Symbol( "false", ), ], ], line: 456, column: 10, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"zip\"", ), ], [ Symbol( "\"\"", ), ], [ Symbol( "\" \"", ), ], [ Symbol( "\"zap\"", ), ], ], ), ], line: 456, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 459, }, Operator( ( "==", true, ), ), Symbol( "\"zip zap\"", ), ], ], ), ], line: 458, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 459, }, ], values: [ [ Symbol( "false", ), ], ], line: 459, column: 10, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"ZIP\"", ), ], [ Symbol( "\"\"", ), ], [ Symbol( "\" \"", ), ], [ Symbol( "\"ZAP\"", ), ], ], ), ], line: 459, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 461, }, Operator( ( "==", true, ), ), Symbol( "\"ZIP ZAP\"", ), ], ], ), ], line: 460, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 461, }, ], values: [ [ Symbol( "false", ), ], ], line: 461, column: 10, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@normal\"", ), ], ], ), ], line: 461, }, ], end: 1505, }, next: None, line: 463, column: 1, }, DoBlock( CodeBlock { start: 1506, code: [ Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "warn", ), ], line: 467, }, ], ], ), ], line: 467, }, ], ], line: 467, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 468, }, ], [ Symbol( "\"string expected\"", ), ], ], ), ], line: 468, }, ], ], ), ], line: 467, }, Alter { names: [ Ident { expr: [ Symbol( "st", ), ], line: 468, }, Ident { expr: [ Symbol( "msg", ), ], line: 472, }, ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "warn", ), ], line: 472, }, ], [ Symbol( "\"SHOULD NOT APPEAR\"", ), ], [ Table { data: [], line: 472, column: 12, }, ], ], ), ], line: 472, }, ], ], line: 472, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 473, }, ], [ Symbol( "\"string expected\"", ), ], ], ), ], line: 473, }, ], ], ), ], line: 472, }, ], end: 1551, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 474, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing Ctrl C'", ), ], ], ), ], line: 476, }, DoBlock( CodeBlock { start: 1560, 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 %s 2> /dev/null'", ), ], [ Ident { expr: [ Symbol( "pid", ), ], line: 482, }, ], ], ), ], line: 482, }, ], ], ), ], line: 482, }, ], ], ), ), ], end: 21, }, line: 483, 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: 489, }, ], [ Ident { expr: [ Symbol( "luaprg", ), ], line: 489, }, ], ], ), ], line: 489, }, ], ], line: 490, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "popen", ), Call( [ [ Ident { expr: [ Symbol( "shellprg", ), ], line: 490, }, ], [ Symbol( "\"r\"", ), ], ], ), ], line: 490, }, ], ], line: 491, column: 0, }, Variable { names: [ ( "pid", false, ), ], values: [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 491, }, ], ], line: 491, 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: 493, }, Operator( ( "..", true, ), ), Symbol( "\")\"", ), ], ], ), ], line: 491, }, Return( Some( [ [ Ident { expr: [ Symbol( "f", ), ], line: 494, }, ], [ Ident { expr: [ Symbol( "pid", ), ], line: 494, }, ], ], ), ), ], end: 72, }, line: 495, 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: 498, }, ], ], line: 499, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 501, }, Operator( ( "==", true, ), ), Symbol( "\"12\"", ), ], ], ), ], line: 499, }, Ident { expr: [ Symbol( "kill", ), Call( [ [ Ident { expr: [ Symbol( "pid", ), ], line: 502, }, ], ], ), ], line: 501, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 504, }, Operator( ( "==", true, ), ), Symbol( "\"42\"", ), ], ], ), ], line: 502, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 505, }, ], ], ), ], line: 504, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"done\"", ), ], ], ), ], line: 505, }, Variable { names: [ ( "f", false, ), ( "pid", false, ), ], values: [ [ Ident { expr: [ Symbol( "runback", ), Call( [ [ Symbol( "[[\n print(15); string.find(string.rep('a', 100000), '.*b')]]", ), ], ], ), ], line: 509, }, ], ], line: 510, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "read", ), Call( [], ), ], line: 512, }, Operator( ( "==", true, ), ), Symbol( "\"15\"", ), ], ], ), ], line: 510, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Symbol( "\"sleep 1\"", ), ], ], ), ], line: 513, }, ], ], ), ], line: 512, }, Variable { names: [ ( "n", false, ), ], values: [ [ Symbol( "100", ), ], ], line: 516, 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: 517, }, ], ], ), ], line: 517, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 518, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 518, }, ], ], line: 519, column: 0, }, Break, ], end: 12, }, next: None, line: 520, column: 1, }, ], end: 165, }, line: 521, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 522, }, ], ], ), ], line: 521, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 523, }, Operator( ( ">=", true, ), ), Symbol( "2", ), ], ], ), ], line: 522, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"done (with %d kills)\"", ), ], [ Ident { expr: [ Symbol( "n", ), ], line: 524, }, ], ], ), ], line: 524, }, ], ], ), ], line: 523, }, ], end: 1751, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"OK\"", ), ], ], ), ], line: 526, }, ]