--- source: src/main.rs expression: parsed input_file: test-data/lua5.4-tests/gc.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing incremental garbage collection'", ), ], ], ), ], line: 4, }, Variable { names: [ ( "debug", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "\"debug\"", ), ], ], ), ], line: 6, }, ], ], line: 6, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 8, }, ], ], ), ], line: 6, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 8, }, Variable { names: [ ( "oldmode", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"incremental\"", ), ], ], ), ], line: 12, }, ], ], line: 12, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"generational\"", ), ], ], ), ], line: 15, }, Operator( ( "==", true, ), ), Symbol( "\"incremental\"", ), ], ], ), ], line: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"generational\"", ), ], ], ), ], line: 16, }, Operator( ( "==", true, ), ), Symbol( "\"generational\"", ), ], ], ), ], line: 15, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"incremental\"", ), ], ], ), ], line: 17, }, Operator( ( "==", true, ), ), Symbol( "\"generational\"", ), ], ], ), ], line: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"incremental\"", ), ], ], ), ], line: 18, }, Operator( ( "==", true, ), ), Symbol( "\"incremental\"", ), ], ], ), ], line: 17, }, Function { local: true, name: [ Symbol( "nop", ), ], args: [], body: CodeBlock { start: 67, code: [], end: 68, }, line: 21, column: 6, }, Function { local: true, name: [ Symbol( "gcinfo", ), ], args: [], body: CodeBlock { start: 73, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 24, }, Operator( ( "*", true, ), ), Symbol( "1024", ), ], ], ), ), ], end: 79, }, line: 25, column: 1, }, DoBlock( CodeBlock { start: 80, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Symbol( "200", ), ], ], ), ], line: 31, }, ], ], line: 32, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Symbol( "200", ), ], ], ), ], line: 32, }, ], ], line: 33, column: 0, }, Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [ ( None, [ Symbol( "0", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "10", ), ], ), ( None, [ Symbol( "90", ), ], ), ( None, [ Symbol( "500", ), ], ), ( None, [ Symbol( "5000", ), ], ), ( None, [ Symbol( "30000", ), ], ), ( None, [ Symbol( "0x7ffffffe", ), ], ), ], line: 33, column: 20, }, ], ], line: 34, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 34, }, ], step: None, code: CodeBlock { start: 46, code: [ Variable { names: [ ( "p", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 35, }, ], ), Symbol( "]", ), ], line: 35, }, ], ], line: 36, column: 0, }, ForLoop { iter: "j", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 36, }, ], step: None, code: CodeBlock { start: 15, code: [ Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "j", ), ], line: 37, }, ], ), Symbol( "]", ), ], line: 37, }, ], ], line: 37, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Ident { expr: [ Symbol( "p", ), ], line: 38, }, ], ], ), ], line: 37, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Ident { expr: [ Symbol( "m", ), ], line: 39, }, ], ], ), ], line: 38, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "0", ), ], ], ), ], line: 39, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "10000", ), ], ], ), ], line: 40, }, ], end: 47, }, line: 42, column: 1, }, ], end: 94, }, line: 43, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Ident { expr: [ Symbol( "a", ), ], line: 45, }, ], ], ), ], line: 43, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Ident { expr: [ Symbol( "b", ), ], line: 46, }, ], ], ), ], line: 45, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 46, }, ], end: 190, }, ), Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 48, }, ], values: [ [ Symbol( "234", ), ], ], line: 57, column: 0, }, Function { local: true, name: [ Symbol( "GC1", ), ], args: [], body: CodeBlock { start: 201, code: [ Variable { names: [ ( "u", false, ), ], values: [], line: 58, column: 2, }, Variable { names: [ ( "b", false, ), ], values: [], line: 59, column: 2, }, Variable { names: [ ( "finish", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 60, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 60, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 61, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 21, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 61, }, ], values: [ [ Symbol( "true", ), ], ], line: 61, column: 3, }, ], end: 25, }, line: 61, column: 17, }, ], ), ], line: 61, column: 18, }, ], ], ), ], line: 61, }, ], ], line: 61, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 61, }, ], values: [ [ Table { data: [ ( None, [ Symbol( "34", ), ], ), ], line: 62, column: 5, }, ], ], line: 63, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 63, }, ], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 63, }, ], values: [ [ Table { data: [], line: 63, column: 4, }, ], ], line: 63, column: 4, }, ], end: 38, }, line: 63, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 64, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 63, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 64, }, ], values: [ [ Symbol( "false", ), ], ], line: 66, column: 4, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 66, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 66, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 67, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 69, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 67, }, ], values: [ [ Symbol( "true", ), ], ], line: 67, column: 3, }, ], end: 73, }, line: 67, column: 17, }, ], ), ], line: 67, column: 18, }, ], ], ), ], line: 67, }, ], ], line: 68, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 68, }, ], body: CodeBlock { start: 76, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 68, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 68, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 68, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 68, }, ], values: [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 68, }, ], ], ), ], line: 68, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 68, }, ], ], ), ], line: 68, }, ], ], line: 68, column: 17, }, ], end: 94, }, line: 68, column: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 69, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 68, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 69, }, ], values: [ [ Symbol( "false", ), ], ], line: 71, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 71, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 72, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 120, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 72, }, ], values: [ [ Symbol( "true", ), ], ], line: 72, column: 3, }, ], end: 124, }, line: 72, column: 17, }, ], ), ], line: 72, column: 18, }, ], ], ), ], line: 72, }, ], ], line: 73, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 73, }, ], body: CodeBlock { start: 127, code: [ Variable { names: [ ( "i", false, ), ], values: [], line: 73, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 73, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 8, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 73, }, ], ], ), ), ], end: 11, }, line: 73, column: 11, }, ], ], line: 73, column: 11, }, ], end: 139, }, line: 73, column: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 74, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 73, }, ], end: 351, }, line: 75, column: 1, }, Function { local: true, name: [ Symbol( "GC2", ), ], args: [], body: CodeBlock { start: 356, code: [ Variable { names: [ ( "u", false, ), ], values: [], line: 78, column: 2, }, Variable { names: [ ( "finish", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 79, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 79, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 80, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 20, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 80, }, ], values: [ [ Symbol( "true", ), ], ], line: 80, column: 3, }, ], end: 24, }, line: 80, column: 18, }, ], ), ], line: 80, column: 19, }, ], ], ), ], line: 80, }, ], ), ], line: 80, column: 21, }, ], ], line: 81, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Table { data: [ ( None, [ Symbol( "34", ), ], ), ], line: 81, column: 6, }, ], ], line: 82, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 82, }, ], body: CodeBlock { start: 34, code: [ Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 82, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 82, column: 5, }, ], ), ], line: 82, column: 6, }, ], ], line: 82, column: 6, }, ], end: 41, }, line: 82, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 83, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 82, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 83, }, ], values: [ [ Symbol( "false", ), ], ], line: 85, column: 4, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 85, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 85, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 86, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 73, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 86, }, ], values: [ [ Symbol( "true", ), ], ], line: 86, column: 3, }, ], end: 77, }, line: 86, column: 18, }, ], ), ], line: 86, column: 19, }, ], ], ), ], line: 86, }, ], ), ], line: 86, column: 21, }, ], ], line: 87, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 87, }, ], body: CodeBlock { start: 81, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 87, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 87, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 87, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 87, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 87, }, ], ], ), ], line: 87, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 87, }, ], ], ), ], line: 87, }, ], ), ], line: 87, column: 19, }, ], ], line: 87, column: 19, }, ], end: 101, }, line: 87, column: 22, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 88, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 87, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 88, }, ], values: [ [ Symbol( "false", ), ], ], line: 90, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 90, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 91, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 128, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 91, }, ], values: [ [ Symbol( "true", ), ], ], line: 91, column: 3, }, ], end: 132, }, line: 91, column: 18, }, ], ), ], line: 91, column: 19, }, ], ], ), ], line: 91, }, ], ), ], line: 91, column: 21, }, ], ], line: 92, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 92, }, ], body: CodeBlock { start: 136, code: [ Variable { names: [ ( "i", false, ), ], values: [], line: 92, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 92, }, ], values: [ [ Table { data: [ ( None, [ Lambda { args: [], body: CodeBlock { start: 9, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 92, }, ], ], ), ), ], end: 12, }, line: 92, column: 12, }, ], ), ], line: 92, column: 13, }, ], ], line: 92, column: 13, }, ], end: 150, }, line: 92, column: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 93, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 92, }, ], end: 517, }, line: 94, column: 1, }, Function { local: true, name: [ Symbol( "GC", ), ], args: [], body: CodeBlock { start: 522, code: [ Ident { expr: [ Symbol( "GC1", ), Call( [], ), ], line: 96, }, Ident { expr: [ Symbol( "GC2", ), Call( [], ), ], line: 96, }, ], end: 530, }, line: 96, column: 13, }, DoBlock( CodeBlock { start: 531, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"creating many objects\"", ), ], ], ), ], line: 100, }, Variable { names: [ ( "limit", false, ), ], values: [ [ Symbol( "5000", ), ], ], line: 104, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 104, }, ], step: None, code: CodeBlock { start: 15, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 105, column: 5, }, ], ], line: 105, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 105, }, ], values: [ [ Symbol( "nil", ), ], ], line: 105, column: 9, }, ], end: 25, }, line: 106, column: 1, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "\"a\"", ), ], ], line: 110, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 110, }, ], step: None, code: CodeBlock { start: 36, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 111, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 111, }, Operator( ( "..", true, ), ), Symbol( "\"b\"", ), ], ], line: 111, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 111, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 112, }, ], [ Symbol( "'(%d%d*)'", ), ], [ Symbol( "\"%1 %1\"", ), ], ], ), ], line: 112, }, ], ], line: 112, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 112, }, ], values: [ [ Symbol( "\"a\"", ), ], ], line: 113, column: 3, }, ], end: 58, }, line: 114, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 114, }, ], values: [ [ Table { data: [], line: 118, column: 4, }, ], ], line: 120, column: 0, }, Function { local: false, name: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), ], args: [], body: CodeBlock { start: 68, code: [ ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 121, }, ], step: None, code: CodeBlock { start: 7, code: [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"function temp(a) return 'a%d' end\"", ), ], [ Ident { expr: [ Symbol( "i", ), ], line: 122, }, ], ], ), ], line: 122, }, ], [ Symbol( "\"\"", ), ], ], ), Call( [], ), ], line: 122, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "temp", ), Call( [], ), ], line: 123, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "'a%d'", ), ], [ Ident { expr: [ Symbol( "i", ), ], line: 123, }, ], ], ), ], line: 123, }, ], ], ), ], line: 122, }, ], end: 38, }, line: 124, column: 1, }, ], end: 107, }, line: 125, column: 1, }, Ident { expr: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), Call( [], ), ], line: 125, }, ], end: 644, }, ), DoBlock( CodeBlock { start: 645, code: [ Variable { names: [ ( "f", false, ), ], values: [ [ Lambda { args: [], body: CodeBlock { start: 6, code: [], end: 7, }, line: 133, column: 7, }, ], ], line: 133, column: 7, }, ], end: 653, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"functions with errors\"", ), ], ], ), ], line: 133, }, Alter { names: [ Ident { expr: [ Symbol( "prog", ), ], line: 136, }, ], values: [ [ MultilineString( "[[\ndo\n a = 10;\n function foo(x,y)\n a = sin(a+0.456-0.23e-12);\n return function (z) return sin(%x+z) end\n end\n local x = function (w) a=a+w; end\nend\n]]", ), ], ], line: 147, column: 0, }, DoBlock( CodeBlock { start: 661, code: [ Variable { names: [ ( "step", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 149, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "_soft", ), ], line: 149, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "step", ), ], line: 149, }, ], values: [ [ Symbol( "13", ), ], ], line: 149, column: 3, }, ], end: 11, }, next: None, line: 149, column: 7, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 150, }, ], ], ), ], line: 150, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 150, }, ], ), code: CodeBlock { start: 25, code: [ ForLoop { iter: "j", start: [ Ident { expr: [ Symbol( "i", ), ], line: 151, }, ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 151, }, ], ], ), ], line: 151, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 151, }, ], ), code: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 152, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 152, }, ], [ Ident { expr: [ Symbol( "j", ), ], line: 152, }, ], ], ), ], line: 152, }, ], [ Symbol( "\"\"", ), ], ], ), ], line: 152, }, ], ], ), ], line: 152, }, ], end: 33, }, line: 153, column: 1, }, ], end: 59, }, line: 154, column: 1, }, ], end: 721, }, ), Alter { names: [ Ident { expr: [ Symbol( "foo", ), ], line: 155, }, ], values: [ [ Symbol( "nil", ), ], ], line: 157, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'long strings'", ), ], ], ), ], line: 157, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 158, }, ], values: [ [ Symbol( "\"01234567890123456789012345678901234567890123456789012345678901234567890123456789\"", ), ], ], line: 159, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 160, }, ], ], ), ], line: 160, }, Operator( ( "==", true, ), ), Symbol( "80", ), ], ], ), ], line: 159, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 160, }, ], values: [ [ Symbol( "''", ), ], ], line: 161, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 161, }, ], values: [ [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "min", ), Call( [ [ Symbol( "300", ), ], [ Expr( [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "maxinteger", ), ], line: 162, }, Operator( ( "//", true, ), ), Symbol( "80", ), ], ), Ident { expr: [], line: 162, }, Operator( ( "//", true, ), ), Symbol( "2", ), ], ], ), ], line: 162, }, ], ], line: 163, column: 0, }, ForLoop { iter: "n", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "k", ), ], line: 163, }, ], step: None, code: CodeBlock { start: 770, code: [ Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 163, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 163, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 163, }, ], ], line: 163, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "j", ), ], line: 163, }, ], values: [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 163, }, ], ], ), ], line: 163, }, ], ], line: 163, column: 12, }, ], end: 783, }, line: 163, column: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 164, }, ], ], ), ], line: 164, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 164, }, Operator( ( "*", true, ), ), Symbol( "80", ), ], ], ), ], line: 163, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 164, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 165, }, ], [ Symbol( "1", ), ], [ Symbol( "10000", ), ], ], ), ], line: 165, }, ], ], line: 165, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 165, }, Ident { expr: [ Symbol( "i", ), ], line: 166, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 166, }, ], [ Symbol( "'(%d%d%d%d)'", ), ], [ Symbol( "''", ), ], ], ), ], line: 166, }, ], ], line: 166, column: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 167, }, Operator( ( "==", true, ), ), Symbol( "10000", ), Operator( ( "//", true, ), ), Symbol( "4", ), ], ], ), ], line: 166, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 167, }, ], values: [ [ Symbol( "nil", ), ], ], line: 168, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 168, }, ], values: [ [ Symbol( "nil", ), ], ], line: 169, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 171, }, Operator( ( "==", true, ), ), Symbol( "234", ), ], ], ), ], line: 169, }, DoBlock( CodeBlock { start: 846, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"steps\"", ), ], ], ), ], line: 178, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"steps (2)\"", ), ], ], ), ], line: 178, }, Function { local: true, name: [ Symbol( "dosteps", ), ], args: [ "siz", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 183, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 184, column: 5, }, ], ], line: 185, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 15, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 185, }, ], ), Symbol( "]", ), ], line: 185, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 185, column: 8, }, ], ), ], line: 185, column: 9, }, ], ], line: 185, column: 10, }, Variable { names: [ ( "b", false, ), ], values: [ [ Table { data: [], line: 185, column: 15, }, ], ], line: 185, column: 15, }, ], end: 31, }, line: 185, column: 23, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 186, }, ], ], line: 187, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 188, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Ident { expr: [ Symbol( "siz", ), ], line: 190, }, ], ], ), ], line: 190, }, ], body: CodeBlock { start: 42, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 189, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 189, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 189, column: 5, }, ], end: 48, }, line: 190, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 191, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 191, }, ], ], ), ], line: 190, }, Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 192, }, ], ], ), ), ], end: 79, }, line: 193, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 193, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_port", ), ], line: 197, }, ], body: CodeBlock { start: 85, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 198, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 198, }, ], ], ), ], line: 198, }, ], end: 98, }, next: None, line: 199, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "20000", ), ], ], ), ], line: 202, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 199, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "20000", ), ], ], ), ], line: 203, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 202, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "20000", ), ], ], ), ], line: 204, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 203, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 206, }, ], ], ), ], line: 204, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 206, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 208, }, ], ], ), ], line: 207, }, ], end: 993, }, ), IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_port", ), ], line: 213, }, ], body: CodeBlock { start: 997, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 215, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 215, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 216, }, ], ], line: 216, column: 6, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 216, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 220, }, Operator( ( ">", true, ), ), Symbol( "3", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 220, }, ], body: CodeBlock { start: 16, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 219, column: 5, }, ], ], line: 219, column: 5, }, ], end: 22, }, line: 220, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 220, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 222, }, ], ], ), ], line: 221, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 225, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 225, }, Operator( ( "*", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 39, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 224, column: 5, }, ], ], line: 224, column: 5, }, ], end: 45, }, line: 225, column: 8, }, ], end: 1050, }, next: None, line: 226, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"clearing tables\"", ), ], ], ), ], line: 226, }, Alter { names: [ Ident { expr: [ Symbol( "lim", ), ], line: 229, }, ], values: [ [ Symbol( "15", ), ], ], line: 230, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 230, }, ], values: [ [ Table { data: [], line: 231, column: 4, }, ], ], line: 233, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 233, }, ], step: None, code: CodeBlock { start: 1068, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 233, column: 4, }, ], ), Symbol( "]", ), ], line: 233, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 233, }, ], ], line: 233, column: 7, }, ], end: 1076, }, line: 233, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 233, }, ], values: [ [ Table { data: [], line: 234, column: 4, }, ], ], line: 235, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 235, }, ], ], ), ], line: 235, }, ], stop: None, initial: None, code: CodeBlock { start: 1090, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 235, }, ], ), Symbol( "]", ), ], line: 235, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 235, }, ], ], line: 235, column: 6, }, ], end: 1097, }, line: 235, column: 17, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 237, }, ], ], ), ], line: 237, }, ], stop: None, initial: None, code: CodeBlock { start: 1105, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 238, }, ], ), Symbol( "]", ), ], line: 238, }, ], values: [ [ Ident { expr: [ Symbol( "undef", ), ], line: 238, }, ], ], line: 238, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 239, }, ], ], ), ], line: 239, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 239, }, ], ], ), ], line: 239, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 238, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 239, }, ], end: 1131, }, line: 241, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 241, }, ], values: [ [ Symbol( "nil", ), ], ], line: 242, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 242, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 244, }, ], ], ), ], line: 244, }, ], stop: None, initial: None, code: CodeBlock { start: 1145, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "'cannot be here'", ), ], ], ), ], line: 244, }, ], end: 1148, }, line: 244, column: 11, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 245, }, ], step: None, code: CodeBlock { start: 1155, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 245, }, ], ), Symbol( "]", ), ], line: 245, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 245, }, ], ], line: 245, column: 6, }, ], end: 1162, }, line: 245, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 246, }, ], step: None, code: CodeBlock { start: 1169, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 246, }, ], ), Symbol( "]", ), ], line: 246, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 246, }, ], ], ), ], line: 246, }, ], end: 1179, }, line: 246, column: 17, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'weak tables'", ), ], ], ), ], line: 246, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 249, }, ], values: [ [ Table { data: [], line: 250, column: 4, }, ], ], line: 250, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 250, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 250, column: 14, }, ], ], ), ], line: 250, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 252, }, ], step: None, code: CodeBlock { start: 1206, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 252, column: 4, }, ], ), Symbol( "]", ), ], line: 252, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 252, }, ], ], line: 252, column: 7, }, ], end: 1214, }, line: 252, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 254, }, ], step: None, code: CodeBlock { start: 1221, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 254, }, ], ), Symbol( "]", ), ], line: 254, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 254, }, ], ], line: 254, column: 6, }, ], end: 1228, }, line: 254, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 255, }, ], step: None, code: CodeBlock { start: 1235, code: [ Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'@'", ), ], [ Ident { expr: [ Symbol( "i", ), ], line: 255, }, ], ], ), ], line: 255, }, ], ], line: 255, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "s", ), ], line: 255, }, ], ), Symbol( "]", ), ], line: 255, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 255, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), ], ], line: 255, column: 20, }, ], end: 1256, }, line: 255, column: 28, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 255, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 258, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 258, }, ], ], ), ], line: 258, }, ], stop: None, initial: None, code: CodeBlock { start: 1273, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 258, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 258, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 258, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 258, }, ], ], ), ], line: 258, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 258, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 258, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 258, column: 18, }, ], end: 1292, }, line: 258, column: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 259, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 259, }, ], ], ), ], line: 258, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 259, }, ], values: [ [ Table { data: [], line: 261, column: 4, }, ], ], line: 261, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 261, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'v'", ), ], ), ], line: 261, column: 14, }, ], ], ), ], line: 261, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 261, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'b'", ), ], [ Symbol( "21", ), ], ], ), ], line: 262, }, ], ], line: 262, column: 13, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 262, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 264, }, ], ], ), ], line: 263, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 264, }, ], values: [ [ Ident { expr: [ Symbol( "undef", ), ], line: 265, }, ], ], line: 267, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 267, }, ], step: None, code: CodeBlock { start: 1352, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 267, }, ], ), Symbol( "]", ), ], line: 267, }, ], values: [ [ Table { data: [], line: 267, column: 7, }, ], ], line: 267, column: 7, }, ], end: 1360, }, line: 267, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 268, }, ], step: None, code: CodeBlock { start: 1367, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 268, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ), Symbol( "]", ), ], line: 268, }, ], values: [ [ Table { data: [], line: 268, column: 9, }, ], ], line: 268, column: 9, }, ], end: 1377, }, line: 268, column: 17, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 270, }, ], step: None, code: CodeBlock { start: 1384, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 270, column: 5, }, ], ], line: 270, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 270, }, ], ), Symbol( "]", ), ], line: 270, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 270, }, ], ], line: 270, column: 12, }, ], end: 1397, }, line: 270, column: 20, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 271, }, ], step: None, code: CodeBlock { start: 1404, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 271, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 271, }, ], ), Symbol( "]", ), ], line: 271, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 271, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ], line: 271, column: 10, }, ], end: 1415, }, line: 271, column: 18, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 271, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 274, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 274, }, ], ], ), ], line: 274, }, ], stop: None, initial: None, code: CodeBlock { start: 1432, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 274, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 274, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 274, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 274, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 274, }, ], ], ), ], line: 274, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 274, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 274, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 274, column: 20, }, ], end: 1453, }, line: 274, column: 31, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 275, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 275, }, ], ], ), ], line: 274, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 275, }, ], values: [ [ Table { data: [], line: 277, column: 4, }, ], ], line: 277, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 277, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'kv'", ), ], ), ], line: 277, column: 14, }, ], ], ), ], line: 277, }, Variable { names: [ ( "x", false, ), ( "y", false, ), ( "z", false, ), ], values: [ [ Table { data: [], line: 278, column: 9, }, ], [ Table { data: [], line: 278, column: 12, }, ], [ Table { data: [], line: 278, column: 15, }, ], ], line: 278, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 278, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 280, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 280, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 280, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 280, }, ], [ Ident { expr: [ Symbol( "z", ), ], line: 280, }, ], ], line: 280, column: 20, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 281, }, ], ), Symbol( "]", ), ], line: 280, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 281, }, ], ], line: 283, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "4", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 283, }, ], step: None, code: CodeBlock { start: 1539, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 283, }, ], ), Symbol( "]", ), ], line: 283, }, ], values: [ [ Table { data: [], line: 283, column: 7, }, ], ], line: 283, column: 7, }, ], end: 1547, }, line: 283, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 284, }, ], step: None, code: CodeBlock { start: 1554, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 284, column: 4, }, ], ), Symbol( "]", ), ], line: 284, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 284, }, ], ], line: 284, column: 7, }, ], end: 1562, }, line: 284, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 285, }, ], step: None, code: CodeBlock { start: 1569, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 285, column: 5, }, ], ], line: 285, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 285, }, ], ), Symbol( "]", ), ], line: 285, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 285, }, ], ], line: 285, column: 12, }, ], end: 1582, }, line: 285, column: 20, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 285, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 287, }, ], ], ), ], line: 287, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 286, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 289, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 289, }, ], ], ), ], line: 289, }, ], stop: None, initial: None, code: CodeBlock { start: 1608, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 290, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 290, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 290, }, ], ), Ident { expr: [], line: 290, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 291, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 291, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 291, }, ], ), Ident { expr: [], line: 291, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 292, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 292, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "z", ), ], line: 292, }, ], ), Ident { expr: [], line: 292, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 292, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 292, }, ], ], ), ], line: 290, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 292, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 293, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 293, column: 5, }, ], end: 1651, }, line: 294, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 295, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 294, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 295, }, Ident { expr: [ Symbol( "y", ), ], line: 296, }, Ident { expr: [ Symbol( "z", ), ], line: 296, }, ], values: [ [ Symbol( "nil", ), ], ], line: 296, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 296, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 298, }, ], ], ), ], line: 298, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 298, }, ], ], ), ], line: 297, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 298, }, ], values: [ [ Table { data: [], line: 302, column: 4, }, ], ], line: 303, column: 0, }, Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Symbol( "10", ), ], ), ], line: 303, column: 8, }, ], ], line: 304, column: 0, }, Variable { names: [ ( "C", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "key", ), ], ), [ Ident { expr: [ Symbol( "t", ), ], line: 304, }, ], ), ], line: 304, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'v'", ), ], ), ], line: 304, column: 16, }, ], ], ), ], line: 304, }, ], ], line: 305, column: 0, }, Variable { names: [ ( "C1", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Ident { expr: [ Symbol( "t", ), ], line: 305, }, ], ), [ Symbol( "1", ), ], ), ], line: 305, column: 12, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 305, column: 18, }, ], ], ), ], line: 305, }, ], ], line: 305, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 305, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 306, }, ], ], line: 306, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 309, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [ "u", ], body: CodeBlock { start: 1747, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "C", ), Symbol( ".", ), Symbol( "key", ), ], line: 310, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 310, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C1", ), ], line: 311, }, ], ], ), ], line: 311, }, ], ], ), ], line: 311, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], ], ), ], line: 310, }, ], end: 1768, }, line: 312, column: 1, }, ], ), ], line: 312, column: 2, }, ], ], ), ], line: 306, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 312, }, Ident { expr: [ Symbol( "t", ), ], line: 314, }, ], values: [ [ Symbol( "nil", ), ], ], line: 314, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 314, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 315, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C", ), ], line: 317, }, ], ], ), ], line: 317, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C1", ), ], line: 317, }, ], ], ), ], line: 317, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 316, }, Alter { names: [ Ident { expr: [ Symbol( "C", ), ], line: 317, }, Ident { expr: [ Symbol( "C1", ), ], line: 318, }, ], values: [ [ Symbol( "nil", ), ], ], line: 322, column: 0, }, Variable { names: [ ( "mt", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 322, column: 8, }, ], ], line: 322, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 322, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ], line: 323, column: 6, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "20", ), ], ), ], line: 323, column: 10, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "30", ), ], ), ], line: 323, column: 14, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "40", ), ], ), ], line: 323, column: 18, }, ], ), ], line: 323, column: 19, }, ], ], line: 323, column: 20, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 323, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 323, }, ], ], ), ], line: 323, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 323, }, ], values: [ [ Symbol( "nil", ), ], ], line: 325, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 1846, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Table { data: [], line: 325, column: 5, }, ], ], line: 325, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 325, }, ], ), Symbol( "]", ), ], line: 325, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "k", ), ], ), [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "x", ), ], line: 325, }, ], ), ], line: 325, column: 17, }, ], ), ], line: 325, column: 18, }, ], ], line: 325, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 325, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 325, }, ], ], line: 325, column: 22, }, ], end: 1869, }, line: 325, column: 30, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 325, }, Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 327, }, ], ], line: 328, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 329, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 329, }, ], body: CodeBlock { start: 1883, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 329, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 329, }, ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "k", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 329, }, ], ], line: 329, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 329, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 329, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 329, column: 17, }, ], end: 1901, }, line: 329, column: 21, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 330, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 329, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 330, }, ], values: [ [ Symbol( "nil", ), ], ], line: 331, column: 3, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 331, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "4", ), ], step: None, code: CodeBlock { start: 1920, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 333, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 333, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 333, }, Operator( ( "*", true, ), ), Symbol( "10", ), ], ], ), ], line: 333, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 333, }, ], ), Symbol( "]", ), ], line: 333, }, ], values: [ [ Ident { expr: [ Symbol( "undef", ), ], line: 333, }, ], ], line: 333, column: 21, }, ], end: 1942, }, line: 333, column: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 334, }, ], ], ), ], line: 334, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 333, }, Variable { names: [ ( "K", false, ), ], values: [ [ Table { data: [], line: 336, column: 5, }, ], ], line: 336, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 337, }, ], ), Symbol( "]", ), ], line: 336, }, ], values: [ [ Table { data: [], line: 337, column: 7, }, ], ], line: 338, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1970, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 338, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 338, }, ], ), Symbol( "]", ), ], line: 338, }, ], values: [ [ Table { data: [], line: 338, column: 10, }, ], ], line: 338, column: 11, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 338, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 338, }, ], ), Symbol( "]", ), ], line: 338, }, ], ), Symbol( "]", ), ], line: 338, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 338, column: 26, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 338, }, ], ], ), ], line: 338, }, ], ], line: 338, column: 29, }, ], end: 2000, }, line: 338, column: 37, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 338, }, ], values: [ [ Symbol( "nil", ), ], ], line: 340, column: 0, }, Variable { names: [ ( "k", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 341, column: 0, }, ForLoop { iter: "j", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 2014, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Table { data: [], line: 342, column: 5, }, ], ], line: 342, column: 6, }, Variable { names: [ ( "nk", false, ), ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 342, }, Operator( ( "%", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 342, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 343, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "nk", ), ], line: 343, }, ], ), Symbol( "]", ), ], line: 343, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 343, }, ], ), Symbol( "]", ), ], line: 342, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "x", ), ], line: 343, }, ], ), ( Some( [ Symbol( "k", ), ], ), [ Ident { expr: [ Symbol( "k", ), ], line: 343, }, ], ), ], line: 343, column: 21, }, ], ], line: 343, column: 22, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 343, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 343, }, ], ], line: 343, column: 26, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 343, }, ], values: [ [ Ident { expr: [ Symbol( "nk", ), ], line: 343, }, ], ], line: 343, column: 29, }, ], end: 2058, }, line: 344, column: 1, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 344, }, Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 346, }, ], ], line: 347, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 348, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 348, }, ], body: CodeBlock { start: 2072, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 348, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 348, }, ], ), Symbol( "]", ), ], line: 348, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 348, }, ], ), Symbol( "]", ), ], line: 348, }, ], ], line: 348, column: 17, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 348, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 348, }, ], ], line: 348, column: 24, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 348, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "k", ), ], line: 348, }, ], ], line: 348, column: 30, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 348, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 348, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 348, column: 35, }, ], end: 2108, }, line: 348, column: 39, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 349, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 348, }, Alter { names: [ Ident { expr: [ Symbol( "K", ), ], line: 349, }, ], values: [ [ Symbol( "nil", ), ], ], line: 350, column: 3, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 350, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 356, }, ], body: CodeBlock { start: 2123, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 357, }, Variable { names: [ ( "u", false, ), ], values: [ [ Table { data: [], line: 358, column: 5, }, ], ], line: 359, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Table { data: [], line: 359, column: 5, }, ], ], line: 359, column: 6, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 359, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 359, column: 15, }, ], ], ), ], line: 359, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 360, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [ "o", ], body: CodeBlock { start: 36, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "o", ), ], line: 361, }, ], ), Symbol( "]", ), ], line: 361, }, ], ], line: 361, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 362, }, ], ), Symbol( "]", ), ], line: 361, }, ], values: [ [ Symbol( "true", ), ], ], line: 362, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 363, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 363, }, ], ], ), ], line: 362, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 364, }, Operator( ( "==", true, ), ), Symbol( "8", ), ], body: CodeBlock { start: 28, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@expected@\"", ), ], ], ), ], line: 364, }, ], end: 33, }, next: None, line: 364, column: 10, }, ], end: 70, }, line: 365, column: 1, }, ], ), ], line: 365, column: 2, }, ], ], ), ], line: 359, }, ForLoop { iter: "i", start: [ Symbol( "6", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 79, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 368, column: 7, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 368, }, ], ], ), ], line: 368, }, ], ], ), ], line: 368, }, ], ], line: 368, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 369, }, ], ), Symbol( "]", ), ], line: 368, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 369, }, ], ], line: 369, column: 6, }, ], end: 99, }, line: 370, column: 1, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@on\"", ), ], ], ), ], line: 370, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@store\"", ), ], ], ), ], line: 372, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 372, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 374, }, ], [ Symbol( "\"error in __gc\"", ), ], ], ), ], line: 374, }, ], ], ), ], line: 373, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 375, }, ], [ Symbol( "\"@(.-)@\"", ), ], ], ), ], line: 375, }, Operator( ( "==", true, ), ), Symbol( "\"expected\"", ), ], ], ), ], line: 374, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 375, }, ], values: [ [ Symbol( "false", ), ], ], line: 376, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "8", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 146, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 376, }, ], ), Symbol( "]", ), ], line: 376, }, ], ], ), ], line: 376, }, ], end: 154, }, line: 376, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "5", ), ], step: None, code: CodeBlock { start: 161, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 379, column: 7, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 379, }, ], ], ), ], line: 379, }, ], ], ), ], line: 379, }, ], ], line: 379, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 380, }, ], ), Symbol( "]", ), ], line: 379, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 380, }, ], ], line: 380, column: 6, }, ], end: 181, }, line: 381, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 381, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 191, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 384, }, ], ), Symbol( "]", ), ], line: 384, }, ], ], ), ], line: 384, }, ], end: 199, }, line: 384, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 386, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 384, }, ], values: [ [ Symbol( "nil", ), ], ], line: 386, column: 8, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@normal\"", ), ], ], ), ], line: 386, }, ], end: 2335, }, next: None, line: 389, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 389, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 394, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 2342, code: [ Expr( [ Ident { expr: [ Symbol( "Message", ), ], line: 395, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "print", ), ], line: 395, }, ], ), Ident { expr: [ Call( [ [ Symbol( "'\\n >>> testC not active: skipping userdata GC tests <<<\\n'", ), ], ], ), ], line: 395, }, ], end: 2351, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 2351, code: [ Function { local: true, name: [ Symbol( "newproxy", ), ], args: [ "u", ], body: CodeBlock { start: 6, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 400, }, ], [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 400, }, ], ], ), ], line: 400, }, ], ], ), ], line: 400, }, ], ], ), ), ], end: 26, }, line: 401, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 401, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 404, }, ], ], line: 404, column: 7, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 405, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 405, column: 11, }, ], ], ), ], line: 404, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 407, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( Some( [ Ident { expr: [ Symbol( "u", ), ], line: 407, }, ], ), [ Symbol( "0", ), ], ), ], line: 407, column: 10, }, ], ], line: 407, column: 11, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 407, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'vk'", ), ], ), ], line: 407, column: 20, }, ], ], ), ], line: 407, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 81, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 408, }, ], ], ), ], line: 408, }, ], ), Symbol( "]", ), ], line: 408, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 408, }, ], ], line: 408, column: 9, }, ], end: 91, }, line: 408, column: 17, }, ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 409, }, ], ], ), ], line: 409, }, ], stop: None, initial: None, code: CodeBlock { start: 99, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 409, }, ], ], ), ], line: 409, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 409, }, ], ], ), ], line: 409, }, ], ], ), ], line: 409, }, ], end: 112, }, line: 409, column: 21, }, Variable { names: [ ( "a1", false, ), ], values: [ [ Table { data: [], line: 410, column: 5, }, ], ], line: 410, column: 6, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 410, }, ], ], ), ], line: 410, }, ], stop: None, initial: None, code: CodeBlock { start: 128, code: [ Alter { names: [ Ident { expr: [ Symbol( "a1", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 410, }, ], ), Symbol( "]", ), ], line: 410, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 410, }, ], ], line: 410, column: 6, }, ], end: 135, }, line: 410, column: 23, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a1", ), ], line: 411, }, ], ], ), ], line: 411, }, ], stop: None, initial: None, code: CodeBlock { start: 145, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "v", ), ], line: 411, }, ], ), Symbol( "]", ), ], line: 411, }, ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 411, }, ], ], line: 411, column: 6, }, ], end: 152, }, line: 411, column: 17, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 159, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 412, }, ], ), Symbol( "]", ), ], line: 412, }, ], ], ), ], line: 412, }, ], end: 167, }, line: 412, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 413, }, ], ], ), Symbol( ".", ), Symbol( "a", ), ], line: 412, }, ], values: [ [ Ident { expr: [ Symbol( "a1", ), ], line: 413, }, ], ], line: 413, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 414, }, ], ], ), Symbol( ".", ), Symbol( "u", ), ], line: 413, }, ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 414, }, ], ], line: 415, column: 0, }, DoBlock( CodeBlock { start: 184, code: [ Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 416, }, ], ], line: 416, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 417, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 416, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 15, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "o", ), ], line: 418, }, ], ), Symbol( "]", ), ], line: 418, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 418, }, ], ], ), ], line: 418, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 419, }, ], ), Symbol( "]", ), ], line: 419, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "undef", ), ], line: 419, }, ], ], ), ], line: 418, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 420, }, ], ], ), ], line: 420, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 420, }, ], ], ), ], line: 420, }, ], ], ), ], line: 419, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 421, }, ], ], ), Symbol( ".", ), Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "o", ), ], line: 421, }, ], ), Symbol( "]", ), ], line: 421, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 421, }, ], ], ), ], line: 420, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 421, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 422, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 422, column: 5, }, ], end: 71, }, line: 423, column: 1, }, ], ], line: 423, column: 1, }, ], end: 256, }, ), Alter { names: [ Ident { expr: [ Symbol( "a1", ), ], line: 424, }, Ident { expr: [ Symbol( "u", ), ], line: 425, }, ], values: [ [ Symbol( "nil", ), ], ], line: 425, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 426, }, ], ], ), ], line: 426, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 425, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 426, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 428, }, Operator( ( "==", true, ), ), Symbol( "11", ), ], ], ), ], line: 427, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 428, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 430, }, ], ], ), ], line: 430, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 429, }, ], end: 2643, }, next: None, line: 431, column: 1, }, ), line: 431, column: 1, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 435, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 435, column: 13, }, ], ], ), ], line: 435, }, ], ], line: 435, column: 14, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 437, }, ], ], ), ], line: 437, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"v\"", ), ], ), ], line: 437, column: 12, }, ], ], ), ], line: 435, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 438, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 437, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 2681, code: [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 438, }, ], end: 2688, }, line: 438, column: 18, }, ], ], line: 438, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 438, }, ], values: [ [ Symbol( "nil", ), ], ], line: 439, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 439, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 442, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 442, column: 13, }, ], ], ), ], line: 442, }, ], ], line: 443, column: 0, }, Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 443, }, ], ], ), ], line: 443, }, ], ], line: 443, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 443, }, ], values: [ [ Table { data: [ ( Some( [ Table { data: [ ( None, [ Symbol( "0", ), ], ), ], line: 444, column: 9, }, ], ), [ Symbol( "1", ), ], ), ( Some( [ Symbol( "0", ), ], ), [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ], line: 444, column: 20, }, ], ), ], line: 444, column: 21, }, ], ], line: 444, column: 22, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 444, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 444, column: 33, }, ], ], ), ], line: 444, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 444, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 2758, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 446, }, ], ], ), Symbol( ".", ), Symbol( "x", ), ], line: 446, }, ], ], ), ], line: 446, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 446, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), ], line: 446, }, ], values: [ [ Symbol( "10", ), ], ], line: 447, column: 3, }, ], end: 2776, }, line: 448, column: 1, }, ], ], line: 448, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 448, }, Ident { expr: [ Symbol( "m", ), ], line: 449, }, ], values: [ [ Symbol( "nil", ), ], ], line: 449, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 449, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 451, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 450, }, DoBlock( CodeBlock { start: 2791, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 454, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 454, }, Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 455, }, ], ], line: 456, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 456, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 456, column: 13, }, ], ], ), ], line: 456, }, ], ], line: 456, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"a\"", ), ], [ Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "22", ), ], ], ), ], line: 457, }, ], ), Symbol( "]", ), ], line: 456, }, ], values: [ [ Symbol( "25", ), ], ], line: 457, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"b\"", ), ], [ Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "22", ), ], ], ), ], line: 458, }, ], ), Symbol( "]", ), ], line: 457, }, ], values: [ [ Table { data: [], line: 458, column: 16, }, ], ], line: 458, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 459, column: 4, }, ], ), Symbol( "]", ), ], line: 458, }, ], values: [ [ Symbol( "14", ), ], ], line: 459, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 460, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 460, }, Operator( ( "+", true, ), ), Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "13", ), ], ], ), ], line: 459, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 460, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 462, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 462, }, Operator( ( "+", true, ), ), Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "12", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 462, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 463, }, Operator( ( "+", true, ), ), Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "13", ), ], ], ), ], line: 461, }, Variable { names: [ ( "k", false, ), ( "v", false, ), ], values: [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 464, }, ], ], ), ], line: 464, }, ], ], line: 464, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 465, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"a\"", ), ], [ Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "22", ), ], ], ), ], line: 465, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 465, }, Operator( ( "==", true, ), ), Symbol( "25", ), ], ], ), ], line: 464, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 466, }, ], [ Ident { expr: [ Symbol( "k", ), ], line: 466, }, ], ], ), ], line: 466, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 465, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"b\"", ), ], [ Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "22", ), ], ], ), ], line: 467, }, ], ), Symbol( "]", ), ], line: 467, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "undef", ), ], line: 467, }, ], ], ), ], line: 466, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 468, }, ], ), Symbol( "]", ), ], line: 467, }, ], values: [ [ Ident { expr: [ Symbol( "undef", ), ], line: 468, }, ], ], line: 468, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 468, }, ], values: [ [ Symbol( "nil", ), ], ], line: 469, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 469, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 471, }, ], ], ), ], line: 471, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 470, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"b\"", ), ], [ Symbol( "100", ), ], ], ), ], line: 473, }, ], ), Symbol( "]", ), ], line: 473, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "undef", ), ], line: 473, }, ], ], ), ], line: 471, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 474, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 474, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 473, }, ], end: 3003, }, ), IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 479, }, ], body: CodeBlock { start: 3006, code: [ Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@store\"", ), ], ], ), ], line: 480, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 480, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 481, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 17, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@expected error\"", ), ], ], ), ], line: 481, }, ], end: 20, }, line: 481, column: 16, }, ], ), ], line: 481, column: 17, }, ], ], ), ], line: 481, }, ], ], line: 481, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 481, }, ], values: [ [ Symbol( "nil", ), ], ], line: 482, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 482, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 484, }, ], [ Symbol( "\"@expected error\"", ), ], ], ), ], line: 484, }, ], ], ), ], line: 483, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 484, }, ], values: [ [ Symbol( "false", ), ], ], line: 484, column: 15, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@normal\"", ), ], ], ), ], line: 484, }, ], end: 3054, }, next: None, line: 486, column: 1, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_soft", ), ], line: 489, }, ], body: CodeBlock { start: 3058, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"long list\"", ), ], ], ), ], line: 490, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 491, column: 5, }, ], ], line: 492, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "200000", ), ], step: None, code: CodeBlock { start: 16, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 493, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "next", ), ], ), [ Ident { expr: [ Symbol( "a", ), ], line: 493, }, ], ), ], line: 493, column: 7, }, ], ], line: 493, column: 7, }, ], end: 24, }, line: 494, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 494, }, ], values: [ [ Symbol( "nil", ), ], ], line: 495, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 495, }, ], end: 3089, }, next: None, line: 497, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"self-referenced threads\"", ), ], ], ), ], line: 497, }, Variable { names: [ ( "thread_id", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 502, column: 0, }, Variable { names: [ ( "threads", false, ), ], values: [ [ Table { data: [], line: 502, column: 5, }, ], ], line: 504, column: 0, }, Function { local: true, name: [ Symbol( "fn", ), ], args: [ "thread", ], body: CodeBlock { start: 3108, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 505, column: 5, }, ], ], line: 505, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "threads", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "thread_id", ), ], line: 506, }, ], ), Symbol( "]", ), ], line: 505, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Alter { names: [ Ident { expr: [ Symbol( "thread", ), ], line: 507, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 507, }, ], ], line: 507, column: 3, }, ], end: 17, }, line: 508, column: 1, }, ], ], line: 508, column: 1, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [], ), ], line: 508, }, ], end: 3131, }, line: 510, column: 1, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 512, }, Operator( ( "<", true, ), ), Symbol( "1000", ), ], body: CodeBlock { start: 3136, code: [ Variable { names: [ ( "thread", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "fn", ), ], line: 513, }, ], ], ), ], line: 513, }, ], ], line: 513, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "thread", ), ], line: 514, }, ], [ Ident { expr: [ Symbol( "thread", ), ], line: 514, }, ], ], ), ], line: 513, }, Alter { names: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 514, }, ], values: [ [ Ident { expr: [ Symbol( "thread_id", ), ], line: 515, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 515, column: 5, }, ], end: 3159, }, line: 516, column: 1, }, DoBlock( CodeBlock { start: 3160, code: [ Variable { names: [ ( "collected", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 525, column: 4, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 525, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 526, }, DoBlock( CodeBlock { start: 13, code: [ Function { local: true, name: [ Symbol( "f", ), ], args: [ "param", ], body: CodeBlock { start: 6, code: [ Expr( [ Lambda { args: [], body: CodeBlock { start: 5, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 530, }, ], ], ), ], line: 530, }, Operator( ( "==", true, ), ), Symbol( "'function'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "param", ), ], line: 530, }, ], ], ), ], line: 530, }, Operator( ( "==", true, ), ), Symbol( "'thread'", ), ], ], ), ], line: 530, }, Alter { names: [ Ident { expr: [ Symbol( "param", ), ], line: 530, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "param", ), ], line: 531, }, ], ), ( None, [ Ident { expr: [ Symbol( "f", ), ], line: 531, }, ], ), ], line: 531, column: 7, }, ], ], line: 531, column: 7, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "param", ), ], line: 532, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "collected", ), ], line: 532, }, ], values: [ [ Symbol( "true", ), ], ], line: 532, column: 3, }, ], end: 37, }, line: 532, column: 14, }, ], ), ], line: 532, column: 15, }, ], ], ), ], line: 531, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 532, }, ], end: 51, }, line: 534, column: 1, }, ], ), Ident { expr: [ Call( [], ), ], line: 534, }, ], end: 61, }, line: 535, column: 1, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 536, }, ], ], ), ], line: 536, }, ], ], line: 536, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 537, }, ], [ Ident { expr: [ Symbol( "co", ), ], line: 537, }, ], ], ), ], line: 537, }, ], ], ), ], line: 536, }, ], end: 95, }, ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 538, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collected", ), ], line: 541, }, ], ], ), ], line: 540, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 541, }, ], end: 3267, }, ), DoBlock( CodeBlock { start: 3268, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 547, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 547, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "0", ), ], ], ), ], line: 548, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 550, }, ], ], line: 551, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 553, }, Operator( ( ">", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 553, }, ], body: CodeBlock { start: 18, code: [ ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "1000", ), ], step: None, code: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "_ENV", ), Symbol( ".", ), Symbol( "a", ), ], line: 552, }, ], values: [ [ Table { data: [], line: 552, column: 6, }, ], ], line: 552, column: 6, }, ], end: 14, }, line: 552, column: 14, }, ], end: 33, }, line: 553, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 553, }, ], end: 3311, }, ), IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 558, }, ], body: CodeBlock { start: 3314, code: [ Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 5, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Symbol( "20", ), ], ), ], line: 561, column: 8, }, ], ], line: 561, column: 8, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 15, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 562, }, ], ], ), ), ], end: 20, }, line: 562, column: 12, }, ], ], ), ], line: 561, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 563, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 562, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 563, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Symbol( "30", ), ], ), ], line: 564, column: 7, }, ], ], line: 564, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 565, }, ], ], ), ], line: 565, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 564, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 565, }, ], end: 59, }, line: 567, column: 1, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 569, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 569, column: 13, }, ], ], ), ], line: 569, }, ], ], line: 569, column: 14, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 569, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "'stop'", ), ], ], ), ], line: 570, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 570, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 572, }, ], ], ), ], line: 572, }, ], ], line: 573, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), Call( [], ), ], line: 573, }, ], ], line: 573, column: 8, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"atomic\"", ), ], ], ), ], line: 573, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [], ), ], line: 575, }, Operator( ( "==", true, ), ), Symbol( "\"atomic\"", ), ], ], ), ], line: 574, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), Call( [], ), ], line: 576, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 575, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 577, }, ], ], ), ], line: 577, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 576, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"pause\"", ), ], ], ), ], line: 577, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 579, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 579, }, Operator( ( "==", true, ), ), Symbol( "30", ), ], ], ), ], line: 578, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 579, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], [ Symbol( "1", ), ], ], ), ], line: 584, }, ], ], line: 584, column: 11, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 584, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 585, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 587, column: 5, }, ], ], line: 587, column: 5, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"atomic\"", ), ], ], ), ], line: 587, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"sweepallgc\"", ), ], ], ), ], line: 588, }, Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 590, column: 5, }, ], ], line: 590, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 591, }, ], ], ), ], line: 591, }, Operator( ( "==", true, ), ), Symbol( "\"black\"", ), ], ], ), ], line: 590, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 592, }, ], ], ), ], line: 592, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 591, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setuservalue", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 593, }, ], [ Ident { expr: [ Symbol( "x", ), ], line: 593, }, ], ], ), ], line: 592, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 594, }, ], ], ), ], line: 594, }, Operator( ( "==", true, ), ), Symbol( "\"gray\"", ), ], ], ), ], line: 593, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 594, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"+\"", ), ], ], ), ], line: 595, }, ], end: 3556, }, next: None, line: 598, column: 1, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 601, }, ], body: CodeBlock { start: 3559, code: [ Variable { names: [ ( "debug", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "\"debug\"", ), ], ], ), ], line: 602, }, ], ], line: 602, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 602, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 604, }, ], ], line: 605, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 605, }, ], ], line: 605, column: 9, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 606, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Ident { expr: [ Symbol( "nop", ), ], line: 606, }, ], ), ], line: 606, column: 11, }, ], ], ), ], line: 605, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 607, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Ident { expr: [ Symbol( "nop", ), ], line: 607, }, ], ), ], line: 607, column: 11, }, ], ], ), ], line: 606, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 608, }, ], ], ), ], line: 608, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 607, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "checkmemory", ), Call( [], ), ], line: 608, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 609, }, ], end: 3631, }, next: None, line: 611, column: 1, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 614, }, ], body: CodeBlock { start: 3634, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"emergency collections\"", ), ], ], ), ], line: 615, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 615, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 616, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 618, }, Operator( ( "+", true, ), ), Symbol( "200", ), ], ], ), ], line: 617, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "200", ), ], step: None, code: CodeBlock { start: 29, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 619, column: 5, }, ], ], line: 619, column: 5, }, ], end: 35, }, line: 619, column: 13, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 619, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 620, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"table\"", ), ], ], ), ], line: 622, }, ], ], line: 623, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 623, column: 6, }, ], ), ( None, [ Table { data: [], line: 623, column: 9, }, ], ), ( None, [ Table { data: [], line: 623, column: 12, }, ], ), ], line: 623, column: 13, }, ], ], line: 623, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"table\"", ), ], ], ), ], line: 624, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 624, }, Operator( ( "+", true, ), ), Symbol( "4", ), ], ], ), ], line: 623, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 624, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"function\"", ), ], ], ), ], line: 625, }, ], ], line: 625, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 625, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 92, code: [], end: 93, }, line: 626, column: 6, }, ], ], line: 626, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"function\"", ), ], ], ), ], line: 627, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 627, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 626, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 627, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"thread\"", ), ], ], ), ], line: 628, }, ], ], line: 628, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 628, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 123, code: [], end: 124, }, line: 629, column: 10, }, ], ], ), ], line: 629, }, ], ], line: 629, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"thread\"", ), ], ], ), ], line: 630, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 630, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 629, }, ], end: 3773, }, next: None, line: 631, column: 1, }, DoBlock( CodeBlock { start: 3774, code: [ Variable { names: [ ( "setmetatable", false, ), ( "assert", false, ), ( "type", false, ), ( "print", false, ), ( "getmetatable", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), ], line: 636, }, ], [ Ident { expr: [ Symbol( "assert", ), ], line: 637, }, ], [ Ident { expr: [ Symbol( "type", ), ], line: 637, }, ], [ Ident { expr: [ Symbol( "print", ), ], line: 637, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), ], line: 637, }, ], ], line: 638, column: 0, }, Variable { names: [ ( "tt", false, ), ], values: [ [ Table { data: [], line: 638, column: 5, }, ], ], line: 638, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "tt", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 638, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 33, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 640, }, ], ], ), ], line: 640, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "tt", ), ], line: 640, }, ], ], ), ], line: 640, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "'xuxu'", ), Operator( ( "..", true, ), ), Expr( [ Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "3", ), ], ), Ident { expr: [], line: 642, }, Operator( ( "..", true, ), ), Symbol( "'joao'", ), ], [ Table { data: [], line: 642, column: 15, }, ], ], line: 642, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 642, }, ], values: [ [ Ident { expr: [ Symbol( "o", ), ], line: 643, }, ], ], line: 643, column: 3, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 644, column: 4, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 644, }, ], ], ), ], line: 643, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\">>> closing state \"", ), Operator( ( "..", true, ), ), Symbol( "\"<<<\\n\"", ), ], ], ), ], line: 644, }, ], end: 74, }, line: 646, column: 1, }, ], ], line: 647, column: 0, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 647, column: 7, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 647, }, ], ], ), ], line: 647, }, ], ], line: 647, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 647, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "u", ), ], line: 648, }, ], ), ], line: 648, column: 5, }, ], ], line: 648, column: 5, }, ], end: 3864, }, ), IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 652, }, ], body: CodeBlock { start: 3867, code: [ Variable { names: [ ( "error", false, ), ( "assert", false, ), ( "find", false, ), ( "warn", false, ), ], values: [ [ Ident { expr: [ Symbol( "error", ), ], line: 653, }, ], [ Ident { expr: [ Symbol( "assert", ), ], line: 653, }, ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), ], line: 653, }, ], [ Ident { expr: [ Symbol( "warn", ), ], line: 653, }, ], ], line: 654, column: 0, }, Variable { names: [ ( "n", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 655, column: 0, }, Variable { names: [ ( "lastmsg", false, ), ], values: [], line: 655, column: 2, }, Variable { names: [ ( "mt", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [ "o", ], body: CodeBlock { start: 34, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 657, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 657, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 657, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 658, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "o", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 658, }, ], ], ), ], line: 657, }, IfStatement { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 659, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], body: CodeBlock { start: 19, code: [ Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 660, }, ], values: [ [ Symbol( "false", ), ], ], line: 660, column: 3, }, ], end: 23, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 661, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 27, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 662, }, ], [ Symbol( "\"@expected warning\"", ), ], ], ), ], line: 662, }, ], ], ), ], line: 662, }, Alter { names: [ Ident { expr: [ Symbol( "lastmsg", ), ], line: 662, }, ], values: [ [ Ident { expr: [ Symbol( "_WARN", ), ], line: 663, }, ], ], line: 663, column: 3, }, ], end: 40, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 40, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "lastmsg", ), ], line: 665, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_WARN", ), ], line: 665, }, ], ], ), ], line: 665, }, ], end: 47, }, next: None, line: 666, column: 1, }, ), line: 666, column: 1, }, ), line: 666, column: 1, }, Ident { expr: [ Symbol( "warn", ), Call( [ [ Symbol( "\"@store\"", ), ], ], ), ], line: 666, }, Alter { names: [ Ident { expr: [ Symbol( "_WARN", ), ], line: 667, }, ], values: [ [ Symbol( "false", ), ], ], line: 667, column: 8, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@expected warning\"", ), ], ], ), ], line: 667, }, ], end: 92, }, line: 669, column: 1, }, ], ), ], line: 669, column: 2, }, ], ], line: 670, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "10", ), ], end: [ Symbol( "1", ), ], step: Some( [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ), code: CodeBlock { start: 103, code: [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "insert", ), Call( [ [ Ident { expr: [ Symbol( "___Glob", ), ], line: 672, }, ], [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "i", ), ], line: 672, }, ], ), ], line: 672, column: 11, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 672, }, ], ], ), ], line: 672, }, ], ], ), ], line: 672, }, ], end: 119, }, line: 673, column: 1, }, ], end: 3987, }, next: None, line: 674, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "'isrunning'", ), ], ], ), ], line: 677, }, ], ], ), ], line: 674, }, DoBlock( CodeBlock { start: 3993, code: [ Variable { names: [ ( "res", false, ), ], values: [ [ Symbol( "true", ), ], ], line: 680, column: 4, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 681, column: 4, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 15, code: [ Alter { names: [ Ident { expr: [ Symbol( "res", ), ], line: 682, }, ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 682, }, ], ], line: 682, column: 5, }, ], end: 21, }, line: 683, column: 1, }, ], ), ], line: 683, column: 2, }, ], ], ), ], line: 680, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 683, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "res", ), ], line: 685, }, ], ], ), ], line: 684, }, ], end: 4025, }, ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Ident { expr: [ Symbol( "oldmode", ), ], line: 689, }, ], ], ), ], line: 686, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 689, }, ]