--- source: src/main.rs expression: parsed input_file: test-data/lua5.1-tests/main.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing lua.c options\"", ), ], ], ), ], line: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [], ), ], line: 5, }, Operator( ( "~=", true, ), ), Symbol( "0", ), ], ], ), ], line: 3, }, Alter { names: [ Ident { expr: [ Symbol( "prog", ), ], line: 5, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 7, }, ], ], line: 7, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "otherprog", ), ], line: 7, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 8, }, ], ], line: 8, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "out", ), ], line: 8, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "tmpname", ), Call( [], ), ], line: 9, }, ], ], line: 11, column: 0, }, DoBlock( CodeBlock { start: 36, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 13, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 13, }, ], ), Symbol( "]", ), ], line: 13, }, ], body: CodeBlock { start: 10, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 13, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 13, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], line: 13, column: 5, }, ], end: 16, }, line: 13, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "progname", ), ], line: 13, }, ], values: [ [ Symbol( "'\"'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 14, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 14, }, Operator( ( "..", true, ), ), Symbol( "'\"'", ), ], ], line: 14, column: 12, }, ], end: 65, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "progname", ), ], line: 16, }, ], ], ), ], line: 15, }, Variable { names: [ ( "prepfile", false, ), ], values: [ [ Lambda { args: [ "s", "p", ], body: CodeBlock { start: 78, code: [ Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 19, }, ], values: [ [ Ident { expr: [ Symbol( "p", ), ], line: 19, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "prog", ), ], line: 19, }, ], ], line: 19, column: 5, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "output", ), Call( [ [ Ident { expr: [ Symbol( "p", ), ], line: 20, }, ], ], ), ], line: 19, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "write", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 21, }, ], ], ), ], line: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "close", ), Call( [], ), ], line: 22, }, ], ], ), ], line: 21, }, ], end: 104, }, line: 23, column: 1, }, ], ], line: 25, column: 0, }, Function { local: false, name: [ Symbol( "checkout", ), ], args: [ "s", ], body: CodeBlock { start: 109, code: [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "input", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 26, }, ], ], ), ], line: 26, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "read", ), Call( [ [ Symbol( "\"*a\"", ), ], ], ), ], line: 27, }, ], ], line: 27, column: 9, }, Ident { expr: [ Symbol( "io", ), Symbol( ".", ), Symbol( "input", ), Call( [], ), Symbol( ":", ), Symbol( "close", ), Call( [], ), ], line: 27, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 29, }, ], ], ), ], line: 29, }, ], ], ), ], line: 28, }, IfStatement { condition: [ Ident { expr: [ Symbol( "s", ), ], line: 30, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 30, }, ], body: CodeBlock { start: 38, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"'%s' - '%s'\\n\"", ), ], [ Ident { expr: [ Symbol( "s", ), ], line: 30, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 30, }, ], ], ), ], line: 30, }, ], ], ), ], line: 30, }, ], end: 52, }, next: None, line: 30, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 31, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 31, }, ], ], ), ], line: 30, }, Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 32, }, ], ], ), ), ], end: 170, }, line: 33, column: 1, }, Function { local: false, name: [ Symbol( "auxrun", ), ], args: [ "...", ], body: CodeBlock { start: 175, code: [ Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "...", ), ], ], ), ], line: 36, }, ], ], line: 36, column: 9, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 36, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 37, }, ], [ Symbol( "\"lua\"", ), ], [ Ident { expr: [ Symbol( "progname", ), ], line: 37, }, ], [ Symbol( "1", ), ], ], ), ], line: 37, }, ], ], line: 38, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "execute", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 38, }, ], ], ), ], line: 38, }, ], ], ), ), ], end: 206, }, line: 39, column: 1, }, Function { local: false, name: [ Symbol( "RUN", ), ], args: [ "...", ], body: CodeBlock { start: 211, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "auxrun", ), Call( [ [ Symbol( "...", ), ], ], ), ], line: 42, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 42, }, ], end: 221, }, line: 43, column: 1, }, Function { local: false, name: [ Symbol( "NoRun", ), ], args: [ "...", ], body: CodeBlock { start: 226, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"\\n(the next error is expected by the test)\"", ), ], ], ), ], line: 46, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "auxrun", ), Call( [ [ Symbol( "...", ), ], ], ), ], line: 47, }, Operator( ( "~=", true, ), ), Symbol( "0", ), ], ], ), ], line: 46, }, ], end: 240, }, line: 48, column: 1, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(1); a=2\"", ), ], ], ), ], line: 48, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"print(a)\"", ), ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 52, }, ], ], ), ], line: 51, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua -l %s -l%s -lstring -l io %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 53, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 53, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 53, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 53, }, ], ], ), ], line: 52, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n2\\n2\\n\"", ), ], ], ), ], line: 53, }, Variable { names: [ ( "a", false, ), ], values: [ [ MultilineString( "[[\n assert(table.getn(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: 63, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 63, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 64, }, ], [ Ident { expr: [ Symbol( "progname", ), ], line: 64, }, ], ], ), ], line: 64, }, ], ], line: 64, column: 10, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 65, }, ], ], ), ], line: 64, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "'lua \"-e \" -- %s a b c'", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 66, }, ], ], ), ], line: 65, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg==nil)\"", ), ], ], ), ], line: 66, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"assert(arg)\"", ), ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 69, }, ], ], ), ], line: 68, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua -l%s - < %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 70, }, ], [ Ident { expr: [ Symbol( "otherprog", ), ], line: 70, }, ], ], ), ], line: 69, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 70, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua - < %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 73, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 73, }, ], ], ), ], line: 72, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 73, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[print(({...})[30])]]", ), ], ], ), ], line: 74, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua %s %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 78, }, ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\" a\"", ), ], [ Symbol( "30", ), ], ], ), ], line: 78, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 78, }, ], ], ), ], line: 77, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"a\\n\"", ), ], ], ), ], line: 78, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-eprint(1)\" -ea=3 -e \"print(a)\" > %s]]", ), ], [ Ident { expr: [ Symbol( "out", ), ], line: 81, }, ], ], ), ], line: 79, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n3\\n\"", ), ], ], ), ], line: 81, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n print(\n1, a\n)\n]]", ), ], ], ), ], line: 82, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua - < %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 89, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 89, }, ], ], ), ], line: 88, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\tnil\\n\"", ), ], ], ), ], line: 89, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[\n= (6*2-6) -- ===\na \n= 10\nprint(a)\n= a]]", ), ], ], ), ], line: 90, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 98, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 98, }, ], ], ), ], line: 97, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"6\\n10\\n10\\n\\n\"", ), ], ], ), ], line: 98, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"a = [[b\\nc\\nd\\ne]]\\n=a\"", ), ], ], ), ], line: 99, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 102, }, ], ], ), ], line: 101, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 103, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 103, }, ], ], ), ], line: 102, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"b\\nc\\nd\\ne\\n\\n\"", ), ], ], ), ], line: 103, }, Alter { names: [ Ident { expr: [ Symbol( "prompt", ), ], line: 104, }, ], values: [ [ Symbol( "\"alo\"", ), ], ], line: 106, column: 3, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[ --\na = 2\n]]", ), ], ], ), ], line: 106, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua \"-e_PROMPT='%s'\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prompt", ), ], line: 110, }, ], [ Ident { expr: [ Symbol( "prog", ), ], line: 110, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 110, }, ], ], ), ], line: 109, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Ident { expr: [ Symbol( "prompt", ), ], line: 111, }, ], [ Symbol( "3", ), ], ], ), ], line: 111, }, Operator( ( "..", true, ), ), Symbol( "\"\\n\"", ), ], ], ), ], line: 110, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 111, }, ], values: [ [ MultilineString( "[=[ -- \nfunction f ( x ) \n local a = [[\nxuxu\n]]\n local b = \"\\\nxuxu\\n\"\n if x == 11 then return 1 , 2 end --[[ test multiple returns ]]\n return x + 1 \n --\\\\\nend\n=( f( 10 ) )\nassert( a == b )\n=f( 11 ) ]=]", ), ], ], line: 126, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 126, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 127, }, ], [ Symbol( "' '", ), ], [ Symbol( "'\\n\\n'", ), ], ], ), ], line: 127, }, ], ], line: 127, column: 12, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 128, }, ], ], ), ], line: 127, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ MultilineString( "[[lua -e\"_PROMPT='' _PROMPT2=''\" -i < %s > %s]]", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 129, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 129, }, ], ], ), ], line: 128, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"11\\n1\\t2\\n\\n\"", ), ], ], ), ], line: 129, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "[[#comment in 1st line without \\n at the end]]", ), ], ], ), ], line: 130, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 133, }, ], ], ), ], line: 132, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"#comment with a binary file\\n\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "dump", ), Call( [ [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Symbol( "\"print(1)\"", ), ], ], ), ], line: 135, }, ], ], ), ], line: 135, }, ], ], ), ], line: 133, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 136, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 136, }, ], ], ), ], line: 135, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n\"", ), ], ], ), ], line: 136, }, Ident { expr: [ Symbol( "prepfile", ), Call( [ [ Symbol( "\"#comment with a binary file\\r\\n\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "dump", ), Call( [ [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Symbol( "\"print(1)\"", ), ], ], ), ], line: 139, }, ], ], ), ], line: 139, }, ], ], ), ], line: 137, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua %s > %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 140, }, ], [ Ident { expr: [ Symbol( "out", ), ], line: 140, }, ], ], ), ], line: 139, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "\"1\\n\"", ), ], ], ), ], line: 140, }, 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: 144, }, ], ], ), ], line: 144, }, ], ], ), ], line: 141, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua %s\"", ), ], [ Ident { expr: [ Symbol( "prog", ), ], line: 145, }, ], ], ), ], line: 144, }, Ident { expr: [ Symbol( "checkout", ), Call( [ [ Symbol( "'alo'", ), ], ], ), ], line: 145, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 148, }, ], ], ), ], line: 148, }, ], ], ), ], line: 146, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "otherprog", ), ], line: 149, }, ], ], ), ], line: 149, }, ], ], ), ], line: 148, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "remove", ), Call( [ [ Ident { expr: [ Symbol( "out", ), ], line: 150, }, ], ], ), ], line: 150, }, ], ], ), ], line: 149, }, Ident { expr: [ Symbol( "RUN", ), Call( [ [ Symbol( "\"lua -v\"", ), ], ], ), ], line: 150, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"lua -h\"", ), ], ], ), ], line: 152, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"lua -e\"", ), ], ], ), ], line: 154, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"lua -e a\"", ), ], ], ), ], line: 155, }, Ident { expr: [ Symbol( "NoRun", ), Call( [ [ Symbol( "\"lua -f\"", ), ], ], ), ], line: 156, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"OK\"", ), ], ], ), ], line: 157, }, ]