--- source: src/main.rs expression: parsed input_file: test-data/lua5.3-tests/gc.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing 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( "collectgarbage", ), Call( [], ), ], line: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 10, }, ], ], ), ], line: 8, }, Function { local: true, name: [ Symbol( "gcinfo", ), ], args: [], body: CodeBlock { start: 24, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"count\"", ), ], ], ), ], line: 12, }, Operator( ( "*", true, ), ), Symbol( "1024", ), ], ], ), ), ], end: 30, }, line: 12, column: 11, }, DoBlock( CodeBlock { start: 31, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Symbol( "200", ), ], ], ), ], line: 18, }, ], ], line: 19, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Symbol( "200", ), ], ], ), ], line: 19, }, ], ], line: 20, 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: 20, column: 20, }, ], ], line: 21, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 21, }, ], step: None, code: CodeBlock { start: 46, code: [ Variable { names: [ ( "p", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 22, }, ], ), Symbol( "]", ), ], line: 22, }, ], ], line: 23, column: 0, }, ForLoop { iter: "j", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 23, }, ], step: None, code: CodeBlock { start: 15, code: [ Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "j", ), ], line: 24, }, ], ), Symbol( "]", ), ], line: 24, }, ], ], line: 24, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Ident { expr: [ Symbol( "p", ), ], line: 25, }, ], ], ), ], line: 24, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Ident { expr: [ Symbol( "m", ), ], line: 26, }, ], ], ), ], line: 25, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "0", ), ], ], ), ], line: 26, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "10000", ), ], ], ), ], line: 27, }, ], end: 47, }, line: 29, column: 1, }, ], end: 94, }, line: 30, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setpause\"", ), ], [ Ident { expr: [ Symbol( "a", ), ], line: 32, }, ], ], ), ], line: 30, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"setstepmul\"", ), ], [ Ident { expr: [ Symbol( "b", ), ], line: 33, }, ], ], ), ], line: 32, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 33, }, ], end: 141, }, ), Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 35, }, ], values: [ [ Symbol( "234", ), ], ], line: 38, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "limit", ), ], line: 38, }, ], values: [ [ Symbol( "5000", ), ], ], line: 43, column: 0, }, Function { local: true, name: [ Symbol( "GC1", ), ], args: [], body: CodeBlock { start: 155, code: [ Variable { names: [ ( "u", false, ), ], values: [], line: 44, column: 2, }, Variable { names: [ ( "b", false, ), ], values: [], line: 45, column: 2, }, Variable { names: [ ( "finish", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 46, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 46, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 47, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 21, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 47, }, ], values: [ [ Symbol( "true", ), ], ], line: 47, column: 3, }, ], end: 25, }, line: 47, column: 17, }, ], ), ], line: 47, column: 18, }, ], ], ), ], line: 47, }, ], ], line: 47, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 47, }, ], values: [ [ Table { data: [ ( None, [ Symbol( "34", ), ], ), ], line: 48, column: 5, }, ], ], line: 49, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 49, }, ], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 49, }, ], values: [ [ Table { data: [], line: 49, column: 4, }, ], ], line: 49, column: 4, }, ], end: 38, }, line: 49, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 50, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 49, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 50, }, ], values: [ [ Symbol( "false", ), ], ], line: 52, column: 4, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 52, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 52, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 53, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 69, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 53, }, ], values: [ [ Symbol( "true", ), ], ], line: 53, column: 3, }, ], end: 73, }, line: 53, column: 17, }, ], ), ], line: 53, column: 18, }, ], ], ), ], line: 53, }, ], ], line: 54, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 54, }, ], body: CodeBlock { start: 76, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 54, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 54, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 54, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 54, }, ], values: [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 54, }, ], ], ), ], line: 54, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 54, }, ], ], ), ], line: 54, }, ], ], line: 54, column: 17, }, ], end: 94, }, line: 54, column: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 55, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 54, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 55, }, ], values: [ [ Symbol( "false", ), ], ], line: 57, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 57, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 58, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 120, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 58, }, ], values: [ [ Symbol( "true", ), ], ], line: 58, column: 3, }, ], end: 124, }, line: 58, column: 17, }, ], ), ], line: 58, column: 18, }, ], ], ), ], line: 58, }, ], ], line: 59, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 59, }, ], body: CodeBlock { start: 127, code: [ Variable { names: [ ( "i", false, ), ], values: [], line: 59, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 59, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 8, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 59, }, ], ], ), ), ], end: 11, }, line: 59, column: 11, }, ], ], line: 59, column: 11, }, ], end: 139, }, line: 59, column: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 60, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 59, }, ], end: 305, }, line: 61, column: 1, }, Function { local: true, name: [ Symbol( "GC2", ), ], args: [], body: CodeBlock { start: 310, code: [ Variable { names: [ ( "u", false, ), ], values: [], line: 64, column: 2, }, Variable { names: [ ( "finish", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 65, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 65, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 66, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 20, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 66, }, ], values: [ [ Symbol( "true", ), ], ], line: 66, column: 3, }, ], end: 24, }, line: 66, column: 18, }, ], ), ], line: 66, column: 19, }, ], ], ), ], line: 66, }, ], ), ], line: 66, column: 21, }, ], ], line: 66, column: 21, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 66, }, ], values: [ [ Table { data: [ ( None, [ Symbol( "34", ), ], ), ], line: 67, column: 5, }, ], ], line: 68, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 68, }, ], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 68, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 68, column: 5, }, ], ), ], line: 68, column: 6, }, ], ], line: 68, column: 6, }, ], end: 40, }, line: 68, column: 9, }, 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: 4, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 71, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 71, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 72, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 72, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 72, }, ], values: [ [ Symbol( "true", ), ], ], line: 72, column: 3, }, ], end: 76, }, line: 72, column: 18, }, ], ), ], line: 72, column: 19, }, ], ], ), ], line: 72, }, ], ), ], line: 72, column: 21, }, ], ], line: 73, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 73, }, ], body: CodeBlock { start: 80, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 73, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 73, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 73, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 73, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 73, }, ], ], ), ], line: 73, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 73, }, ], ], ), ], line: 73, }, ], ), ], line: 73, column: 19, }, ], ], line: 73, column: 19, }, ], end: 100, }, line: 73, column: 22, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 74, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 73, }, Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 74, }, ], values: [ [ Symbol( "false", ), ], ], line: 76, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 76, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 77, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 127, code: [ Alter { names: [ Ident { expr: [ Symbol( "finish", ), ], line: 77, }, ], values: [ [ Symbol( "true", ), ], ], line: 77, column: 3, }, ], end: 131, }, line: 77, column: 18, }, ], ), ], line: 77, column: 19, }, ], ], ), ], line: 77, }, ], ), ], line: 77, column: 21, }, ], ], line: 78, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "finish", ), ], line: 78, }, ], body: CodeBlock { start: 135, code: [ Variable { names: [ ( "i", false, ), ], values: [], line: 78, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 78, }, ], values: [ [ Table { data: [ ( None, [ Lambda { args: [], body: CodeBlock { start: 9, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 78, }, ], ], ), ), ], end: 12, }, line: 78, column: 12, }, ], ), ], line: 78, column: 13, }, ], ], line: 78, column: 13, }, ], end: 149, }, line: 78, column: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 79, }, Operator( ( "==", true, ), ), Symbol( "34", ), ], ], ), ], line: 78, }, ], end: 470, }, line: 80, column: 1, }, Function { local: true, name: [ Symbol( "GC", ), ], args: [], body: CodeBlock { start: 475, code: [ Ident { expr: [ Symbol( "GC1", ), Call( [], ), ], line: 82, }, Ident { expr: [ Symbol( "GC2", ), Call( [], ), ], line: 82, }, ], end: 483, }, line: 82, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 82, }, ], values: [ [ Symbol( "0", ), ], ], line: 85, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'tables'", ), ], ], ), ], line: 85, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 88, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 88, }, ], body: CodeBlock { start: 495, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 89, column: 5, }, ], ], line: 89, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 89, }, ], values: [ [ Symbol( "nil", ), ], ], line: 89, column: 9, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 89, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 90, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 90, column: 5, }, ], end: 510, }, line: 91, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 91, }, ], values: [ [ Symbol( "\"a\"", ), ], ], line: 93, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 93, }, ], values: [ [ Symbol( "0", ), ], ], line: 95, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'strings'", ), ], ], ), ], line: 95, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 97, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 97, }, ], body: CodeBlock { start: 525, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 98, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 98, }, Operator( ( "..", true, ), ), Symbol( "\"b\"", ), ], ], line: 98, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 98, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 99, }, ], [ Symbol( "'(%d%d*)'", ), ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "upper", ), ], line: 99, }, ], ], ), ], line: 99, }, ], ], line: 99, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 99, }, ], values: [ [ Symbol( "\"a\"", ), ], ], line: 100, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 100, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 101, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 101, column: 5, }, ], end: 554, }, line: 102, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 102, }, ], values: [ [ Symbol( "0", ), ], ], line: 105, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 105, }, ], values: [ [ Table { data: [], line: 107, column: 4, }, ], ], line: 107, column: 4, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'functions'", ), ], ], ), ], line: 107, }, Function { local: false, name: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), ], args: [], body: CodeBlock { start: 571, code: [ WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 111, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 111, }, ], body: CodeBlock { start: 5, 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( "contCreate", ), ], line: 112, }, ], ], ), ], line: 112, }, ], [ Symbol( "\"\"", ), ], ], ), Call( [], ), ], line: 112, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "temp", ), Call( [], ), ], line: 113, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "'a%d'", ), ], [ Ident { expr: [ Symbol( "contCreate", ), ], line: 113, }, ], ], ), ], line: 113, }, ], ], ), ], line: 112, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 113, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 114, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 114, column: 5, }, ], end: 41, }, line: 115, column: 1, }, ], end: 613, }, line: 116, column: 1, }, Ident { expr: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), Call( [], ), ], line: 116, }, DoBlock( CodeBlock { start: 619, code: [ Variable { names: [ ( "f", false, ), ], values: [ [ Lambda { args: [], body: CodeBlock { start: 6, code: [], end: 7, }, line: 121, column: 7, }, ], ], line: 121, column: 7, }, ], end: 627, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"functions with errors\"", ), ], ], ), ], line: 121, }, Alter { names: [ Ident { expr: [ Symbol( "prog", ), ], line: 124, }, ], 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: 135, column: 0, }, DoBlock( CodeBlock { start: 635, code: [ Variable { names: [ ( "step", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 137, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "_soft", ), ], line: 137, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "step", ), ], line: 137, }, ], values: [ [ Symbol( "13", ), ], ], line: 137, column: 3, }, ], end: 11, }, next: None, line: 137, column: 7, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 138, }, ], ], ), ], line: 138, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 138, }, ], ), code: CodeBlock { start: 25, code: [ ForLoop { iter: "j", start: [ Ident { expr: [ Symbol( "i", ), ], line: 139, }, ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 139, }, ], ], ), ], line: 139, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 139, }, ], ), 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: 140, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 140, }, ], [ Ident { expr: [ Symbol( "j", ), ], line: 140, }, ], ], ), ], line: 140, }, ], [ Symbol( "\"\"", ), ], ], ), ], line: 140, }, ], ], ), ], line: 140, }, ], end: 33, }, line: 141, column: 1, }, ], end: 59, }, line: 142, column: 1, }, ], end: 695, }, ), Alter { names: [ Ident { expr: [ Symbol( "foo", ), ], line: 143, }, ], values: [ [ Symbol( "nil", ), ], ], line: 145, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'long strings'", ), ], ], ), ], line: 145, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 146, }, ], values: [ [ Symbol( "\"01234567890123456789012345678901234567890123456789012345678901234567890123456789\"", ), ], ], line: 147, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 148, }, ], ], ), ], line: 148, }, Operator( ( "==", true, ), ), Symbol( "80", ), ], ], ), ], line: 147, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 148, }, ], values: [ [ Symbol( "''", ), ], ], line: 149, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 149, }, ], values: [ [ Symbol( "0", ), ], ], line: 150, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 150, }, ], values: [ [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "min", ), Call( [ [ Symbol( "300", ), ], [ Expr( [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "maxinteger", ), ], line: 151, }, Operator( ( "//", true, ), ), Symbol( "80", ), ], ), Ident { expr: [], line: 151, }, Operator( ( "//", true, ), ), Symbol( "2", ), ], ], ), ], line: 151, }, ], ], line: 152, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 152, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 152, }, ], body: CodeBlock { start: 745, code: [ Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 152, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 152, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 152, }, ], ], line: 152, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 152, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 152, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 152, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "j", ), ], line: 152, }, ], values: [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 152, }, ], ], ), ], line: 152, }, ], ], line: 152, column: 18, }, ], end: 764, }, line: 152, column: 24, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 153, }, ], ], ), ], line: 153, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 153, }, Operator( ( "*", true, ), ), Symbol( "80", ), ], ], ), ], line: 152, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 153, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 154, }, ], [ Symbol( "1", ), ], [ Symbol( "10000", ), ], ], ), ], line: 154, }, ], ], line: 154, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 154, }, Ident { expr: [ Symbol( "i", ), ], line: 155, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 155, }, ], [ Symbol( "'(%d%d%d%d)'", ), ], [ Symbol( "''", ), ], ], ), ], line: 155, }, ], ], line: 155, column: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 156, }, Operator( ( "==", true, ), ), Symbol( "10000", ), Operator( ( "//", true, ), ), Symbol( "4", ), ], ], ), ], line: 155, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 156, }, ], values: [ [ Symbol( "nil", ), ], ], line: 157, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 157, }, ], values: [ [ Symbol( "nil", ), ], ], line: 158, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 160, }, Operator( ( "==", true, ), ), Symbol( "234", ), ], ], ), ], line: 158, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"steps\"", ), ], ], ), ], line: 160, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"steps (2)\"", ), ], ], ), ], line: 163, }, Function { local: true, name: [ Symbol( "dosteps", ), ], args: [ "siz", ], body: CodeBlock { start: 840, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 168, }, ], ], ), ], line: 168, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 168, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 170, }, ], ], ), ], line: 169, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 171, column: 5, }, ], ], line: 172, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 31, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 172, }, ], ), Symbol( "]", ), ], line: 172, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 172, column: 8, }, ], ), ], line: 172, column: 9, }, ], ], line: 172, column: 10, }, Variable { names: [ ( "b", false, ), ], values: [ [ Table { data: [], line: 172, column: 15, }, ], ], line: 172, column: 15, }, ], end: 47, }, line: 172, column: 23, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 173, }, ], ], line: 174, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 175, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Ident { expr: [ Symbol( "siz", ), ], line: 177, }, ], ], ), ], line: 177, }, ], body: CodeBlock { start: 58, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 176, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 176, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 176, column: 5, }, ], end: 64, }, line: 177, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 178, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 178, }, ], ], ), ], line: 177, }, Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 179, }, ], ], ), ), ], end: 921, }, line: 180, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 180, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_port", ), ], line: 184, }, ], body: CodeBlock { start: 927, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 186, }, Operator( ( ">", true, ), ), Symbol( "10", ), ], ], ), ], line: 186, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 187, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 187, }, ], ], ), ], line: 186, }, ], end: 949, }, next: None, line: 188, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "20000", ), ], ], ), ], line: 191, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 188, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "20000", ), ], ], ), ], line: 192, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "20000", ), ], ], ), ], line: 193, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 192, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 195, }, ], ], ), ], line: 193, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 195, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 197, }, ], ], ), ], line: 196, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_port", ), ], line: 200, }, ], body: CodeBlock { start: 1001, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 202, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 202, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 203, }, ], ], line: 203, column: 6, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 203, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 205, }, ], ], ), ], line: 204, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 208, }, Operator( ( ">", true, ), ), Symbol( "3", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 208, }, ], body: CodeBlock { start: 24, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 207, column: 5, }, ], ], line: 207, column: 5, }, ], end: 30, }, line: 208, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 208, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"isrunning\"", ), ], ], ), ], line: 210, }, ], ], ), ], line: 209, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 213, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 213, }, Operator( ( "*", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 47, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 212, column: 5, }, ], ], line: 212, column: 5, }, ], end: 53, }, line: 213, column: 8, }, ], end: 1062, }, next: None, line: 214, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"clearing tables\"", ), ], ], ), ], line: 214, }, Alter { names: [ Ident { expr: [ Symbol( "lim", ), ], line: 217, }, ], values: [ [ Symbol( "15", ), ], ], line: 218, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 218, }, ], values: [ [ Table { data: [], line: 219, column: 4, }, ], ], line: 221, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 221, }, ], step: None, code: CodeBlock { start: 1080, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 221, column: 4, }, ], ), Symbol( "]", ), ], line: 221, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 221, }, ], ], line: 221, column: 7, }, ], end: 1088, }, line: 221, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 221, }, ], values: [ [ Table { data: [], line: 222, column: 4, }, ], ], line: 223, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 223, }, ], ], ), ], line: 223, }, ], stop: None, initial: None, code: CodeBlock { start: 1102, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 223, }, ], ), Symbol( "]", ), ], line: 223, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 223, }, ], ], line: 223, column: 6, }, ], end: 1109, }, line: 223, column: 17, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 225, }, ], ], ), ], line: 225, }, ], stop: None, initial: None, code: CodeBlock { start: 1117, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 226, }, ], ), Symbol( "]", ), ], line: 226, }, ], values: [ [ Symbol( "nil", ), ], ], line: 226, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 227, }, ], ], ), ], line: 227, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 227, }, ], ], ), ], line: 227, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 226, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 227, }, ], end: 1143, }, line: 229, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 229, }, ], values: [ [ Symbol( "nil", ), ], ], line: 230, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 230, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 232, }, ], ], ), ], line: 232, }, ], stop: None, initial: None, code: CodeBlock { start: 1157, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "'cannot be here'", ), ], ], ), ], line: 232, }, ], end: 1160, }, line: 232, column: 11, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 233, }, ], step: None, code: CodeBlock { start: 1167, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 233, }, ], ), Symbol( "]", ), ], line: 233, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 233, }, ], ], line: 233, column: 6, }, ], end: 1174, }, line: 233, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 234, }, ], step: None, code: CodeBlock { start: 1181, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 234, }, ], ), Symbol( "]", ), ], line: 234, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 234, }, ], ], ), ], line: 234, }, ], end: 1191, }, line: 234, column: 17, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'weak tables'", ), ], ], ), ], line: 234, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 237, }, ], values: [ [ Table { data: [], line: 238, column: 4, }, ], ], line: 238, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 238, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 238, column: 14, }, ], ], ), ], line: 238, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 240, }, ], step: None, code: CodeBlock { start: 1218, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 240, column: 4, }, ], ), Symbol( "]", ), ], line: 240, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 240, }, ], ], line: 240, column: 7, }, ], end: 1226, }, line: 240, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 242, }, ], step: None, code: CodeBlock { start: 1233, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 242, }, ], ), Symbol( "]", ), ], line: 242, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 242, }, ], ], line: 242, column: 6, }, ], end: 1240, }, line: 242, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 243, }, ], step: None, code: CodeBlock { start: 1247, code: [ Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'@'", ), ], [ Ident { expr: [ Symbol( "i", ), ], line: 243, }, ], ], ), ], line: 243, }, ], ], line: 243, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "s", ), ], line: 243, }, ], ), Symbol( "]", ), ], line: 243, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 243, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), ], ], line: 243, column: 20, }, ], end: 1268, }, line: 243, column: 28, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 243, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 246, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 246, }, ], ], ), ], line: 246, }, ], stop: None, initial: None, code: CodeBlock { start: 1285, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 246, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 246, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 246, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 246, }, ], ], ), ], line: 246, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 246, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 246, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 246, column: 18, }, ], end: 1304, }, line: 246, column: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 247, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 247, }, ], ], ), ], line: 246, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 247, }, ], values: [ [ Table { data: [], line: 249, column: 4, }, ], ], line: 249, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 249, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'v'", ), ], ), ], line: 249, column: 14, }, ], ], ), ], line: 249, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 249, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'b'", ), ], [ Symbol( "21", ), ], ], ), ], line: 250, }, ], ], line: 250, column: 13, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 250, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 252, }, ], ], ), ], line: 251, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 252, }, ], values: [ [ Symbol( "nil", ), ], ], line: 255, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 255, }, ], step: None, code: CodeBlock { start: 1364, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 255, }, ], ), Symbol( "]", ), ], line: 255, }, ], values: [ [ Table { data: [], line: 255, column: 7, }, ], ], line: 255, column: 7, }, ], end: 1372, }, line: 255, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 256, }, ], step: None, code: CodeBlock { start: 1379, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 256, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ), Symbol( "]", ), ], line: 256, }, ], values: [ [ Table { data: [], line: 256, column: 9, }, ], ], line: 256, column: 9, }, ], end: 1389, }, line: 256, column: 17, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 258, }, ], step: None, code: CodeBlock { start: 1396, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 258, column: 5, }, ], ], line: 258, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 258, }, ], ), Symbol( "]", ), ], line: 258, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 258, }, ], ], line: 258, column: 12, }, ], end: 1409, }, line: 258, column: 20, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 259, }, ], step: None, code: CodeBlock { start: 1416, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 259, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 259, }, ], ), Symbol( "]", ), ], line: 259, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 259, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ], line: 259, column: 10, }, ], end: 1427, }, line: 259, column: 18, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 259, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 262, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 262, }, ], ], ), ], line: 262, }, ], stop: None, initial: None, code: CodeBlock { start: 1444, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 262, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 262, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 262, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 262, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 262, }, ], ], ), ], line: 262, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 262, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 262, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 262, column: 20, }, ], end: 1465, }, line: 262, column: 31, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 263, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 263, }, ], ], ), ], line: 262, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 263, }, ], values: [ [ Table { data: [], line: 265, column: 4, }, ], ], line: 265, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 265, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'vk'", ), ], ), ], line: 265, column: 14, }, ], ], ), ], line: 265, }, Variable { names: [ ( "x", false, ), ( "y", false, ), ( "z", false, ), ], values: [ [ Table { data: [], line: 266, column: 9, }, ], [ Table { data: [], line: 266, column: 12, }, ], [ Table { data: [], line: 266, column: 15, }, ], ], line: 266, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 266, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 268, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 268, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 268, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 268, }, ], [ Ident { expr: [ Symbol( "z", ), ], line: 268, }, ], ], line: 268, column: 20, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 269, }, ], ), Symbol( "]", ), ], line: 268, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 269, }, ], ], line: 271, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "4", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 271, }, ], step: None, code: CodeBlock { start: 1551, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 271, }, ], ), Symbol( "]", ), ], line: 271, }, ], values: [ [ Table { data: [], line: 271, column: 7, }, ], ], line: 271, column: 7, }, ], end: 1559, }, line: 271, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 272, }, ], step: None, code: CodeBlock { start: 1566, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 272, column: 4, }, ], ), Symbol( "]", ), ], line: 272, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 272, }, ], ], line: 272, column: 7, }, ], end: 1574, }, line: 272, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 273, }, ], step: None, code: CodeBlock { start: 1581, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 273, column: 5, }, ], ], line: 273, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 273, }, ], ), Symbol( "]", ), ], line: 273, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 273, }, ], ], line: 273, column: 12, }, ], end: 1594, }, line: 273, column: 20, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 273, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 275, }, ], ], ), ], line: 275, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 274, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 277, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 277, }, ], ], ), ], line: 277, }, ], stop: None, initial: None, code: CodeBlock { start: 1620, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 278, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 278, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 278, }, ], ), Ident { expr: [], line: 278, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 279, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 279, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 279, }, ], ), Ident { expr: [], line: 279, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 280, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 280, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "z", ), ], line: 280, }, ], ), Ident { expr: [], line: 280, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 280, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 280, }, ], ], ), ], line: 278, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 280, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 281, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 281, column: 5, }, ], end: 1663, }, line: 282, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 283, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 282, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 283, }, Ident { expr: [ Symbol( "y", ), ], line: 284, }, Ident { expr: [ Symbol( "z", ), ], line: 284, }, ], values: [ [ Symbol( "nil", ), ], ], line: 284, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 284, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 286, }, ], ], ), ], line: 286, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 286, }, ], ], ), ], line: 285, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 286, }, ], values: [ [ Table { data: [], line: 290, column: 4, }, ], ], line: 291, column: 0, }, Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Symbol( "10", ), ], ), ], line: 291, column: 8, }, ], ], line: 292, column: 0, }, Variable { names: [ ( "C", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "key", ), ], ), [ Ident { expr: [ Symbol( "t", ), ], line: 292, }, ], ), ], line: 292, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'v'", ), ], ), ], line: 292, column: 16, }, ], ], ), ], line: 292, }, ], ], line: 293, column: 0, }, Variable { names: [ ( "C1", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Ident { expr: [ Symbol( "t", ), ], line: 293, }, ], ), [ Symbol( "1", ), ], ), ], line: 293, column: 12, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 293, column: 18, }, ], ], ), ], line: 293, }, ], ], line: 293, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 293, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 294, }, ], ], line: 294, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 297, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [ "u", ], body: CodeBlock { start: 1759, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "C", ), Symbol( ".", ), Symbol( "key", ), ], line: 298, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 298, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C1", ), ], line: 299, }, ], ], ), ], line: 299, }, ], ], ), ], line: 299, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], ], ), ], line: 298, }, ], end: 1780, }, line: 300, column: 1, }, ], ), ], line: 300, column: 2, }, ], ], ), ], line: 294, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 300, }, Ident { expr: [ Symbol( "t", ), ], line: 302, }, ], values: [ [ Symbol( "nil", ), ], ], line: 302, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 302, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 303, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C", ), ], line: 305, }, ], ], ), ], line: 305, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "C1", ), ], line: 305, }, ], ], ), ], line: 305, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 304, }, Alter { names: [ Ident { expr: [ Symbol( "C", ), ], line: 305, }, Ident { expr: [ Symbol( "C1", ), ], line: 306, }, ], values: [ [ Symbol( "nil", ), ], ], line: 310, column: 0, }, Variable { names: [ ( "mt", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 310, column: 8, }, ], ], line: 310, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 310, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ], line: 311, column: 6, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "20", ), ], ), ], line: 311, column: 10, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "30", ), ], ), ], line: 311, column: 14, }, ], ), ( None, [ Table { data: [ ( None, [ Symbol( "40", ), ], ), ], line: 311, column: 18, }, ], ), ], line: 311, column: 19, }, ], ], line: 311, column: 20, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 311, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 311, }, ], ], ), ], line: 311, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 311, }, ], values: [ [ Symbol( "nil", ), ], ], line: 313, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 1858, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Table { data: [], line: 313, column: 5, }, ], ], line: 313, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 313, }, ], ), Symbol( "]", ), ], line: 313, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "k", ), ], ), [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "x", ), ], line: 313, }, ], ), ], line: 313, column: 17, }, ], ), ], line: 313, column: 18, }, ], ], line: 313, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 313, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 313, }, ], ], line: 313, column: 22, }, ], end: 1881, }, line: 313, column: 30, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 313, }, Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 315, }, ], ], line: 316, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 317, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 317, }, ], body: CodeBlock { start: 1895, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 317, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 317, }, ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "k", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 317, }, ], ], line: 317, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 317, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 317, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 317, column: 17, }, ], end: 1913, }, line: 317, column: 21, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 318, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 317, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 318, }, ], values: [ [ Symbol( "nil", ), ], ], line: 319, column: 3, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 319, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "4", ), ], step: None, code: CodeBlock { start: 1932, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 321, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 321, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 321, }, Operator( ( "*", true, ), ), Symbol( "10", ), ], ], ), ], line: 321, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 321, }, ], ), Symbol( "]", ), ], line: 321, }, ], values: [ [ Symbol( "nil", ), ], ], line: 321, column: 21, }, ], end: 1954, }, line: 321, column: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 322, }, ], ], ), ], line: 322, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 321, }, Variable { names: [ ( "K", false, ), ], values: [ [ Table { data: [], line: 324, column: 5, }, ], ], line: 324, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 325, }, ], ), Symbol( "]", ), ], line: 324, }, ], values: [ [ Table { data: [], line: 325, column: 7, }, ], ], line: 326, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1982, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 326, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 326, }, ], ), Symbol( "]", ), ], line: 326, }, ], values: [ [ Table { data: [], line: 326, column: 10, }, ], ], line: 326, column: 11, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 326, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 326, }, ], ), Symbol( "]", ), ], line: 326, }, ], ), Symbol( "]", ), ], line: 326, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 326, column: 26, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 326, }, ], ], ), ], line: 326, }, ], ], line: 326, column: 29, }, ], end: 2012, }, line: 326, column: 37, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 326, }, ], values: [ [ Symbol( "nil", ), ], ], line: 328, column: 0, }, Variable { names: [ ( "k", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 329, column: 0, }, ForLoop { iter: "j", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 2026, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Table { data: [], line: 330, column: 5, }, ], ], line: 330, column: 6, }, Variable { names: [ ( "nk", false, ), ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 330, }, Operator( ( "%", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 330, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 331, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "nk", ), ], line: 331, }, ], ), Symbol( "]", ), ], line: 331, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 331, }, ], ), Symbol( "]", ), ], line: 330, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "x", ), ], line: 331, }, ], ), ( Some( [ Symbol( "k", ), ], ), [ Ident { expr: [ Symbol( "k", ), ], line: 331, }, ], ), ], line: 331, column: 21, }, ], ], line: 331, column: 22, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 331, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 331, }, ], ], line: 331, column: 26, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 331, }, ], values: [ [ Ident { expr: [ Symbol( "nk", ), ], line: 331, }, ], ], line: 331, column: 29, }, ], end: 2070, }, line: 332, column: 1, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 332, }, Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 334, }, ], ], line: 335, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 336, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 336, }, ], body: CodeBlock { start: 2084, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "K", ), ], line: 336, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 336, }, ], ), Symbol( "]", ), ], line: 336, }, ], ), Symbol( "]", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 336, }, ], ), Symbol( "]", ), ], line: 336, }, ], ], line: 336, column: 17, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 336, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 336, }, ], ], line: 336, column: 24, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 336, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "k", ), ], line: 336, }, ], ], line: 336, column: 30, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 336, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 336, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 336, column: 35, }, ], end: 2120, }, line: 336, column: 39, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 337, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 336, }, Alter { names: [ Ident { expr: [ Symbol( "K", ), ], line: 337, }, ], values: [ [ Symbol( "nil", ), ], ], line: 338, column: 3, }, Ident { expr: [ Symbol( "GC", ), Call( [], ), ], line: 338, }, DoBlock( CodeBlock { start: 2133, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 345, }, Variable { names: [ ( "u", false, ), ], values: [ [ Table { data: [], line: 346, column: 5, }, ], ], line: 347, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Table { data: [], line: 347, column: 5, }, ], ], line: 347, column: 6, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 347, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 347, column: 15, }, ], ], ), ], line: 347, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 348, }, ], [ 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: 349, }, ], ), Symbol( "]", ), ], line: 349, }, ], ], line: 349, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 350, }, ], ), Symbol( "]", ), ], line: 349, }, ], values: [ [ Symbol( "true", ), ], ], line: 350, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 351, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 351, }, ], ], ), ], line: 350, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 352, }, Operator( ( "==", true, ), ), Symbol( "8", ), ], body: CodeBlock { start: 28, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"here\"", ), ], ], ), ], line: 352, }, ], end: 33, }, next: None, line: 352, column: 10, }, ], end: 70, }, line: 353, column: 1, }, ], ), ], line: 353, column: 2, }, ], ], ), ], line: 347, }, 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: 356, column: 7, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 356, }, ], ], ), ], line: 356, }, ], ], ), ], line: 356, }, ], ], line: 356, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 357, }, ], ), Symbol( "]", ), ], line: 356, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 357, }, ], ], line: 357, column: 6, }, ], end: 99, }, line: 358, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), ], line: 360, }, ], ], ), ], line: 360, }, ], ], ), ], line: 358, }, ForLoop { iter: "i", start: [ Symbol( "8", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 114, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 361, }, ], ), Symbol( "]", ), ], line: 361, }, ], ], ), ], line: 361, }, ], end: 122, }, line: 361, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "5", ), ], step: None, code: CodeBlock { start: 129, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 364, column: 7, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 364, }, ], ], ), ], line: 364, }, ], ], ), ], line: 364, }, ], ], line: 364, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 365, }, ], ), Symbol( "]", ), ], line: 364, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 365, }, ], ], line: 365, column: 6, }, ], end: 149, }, line: 366, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 366, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 159, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 369, }, ], ), Symbol( "]", ), ], line: 369, }, ], ], ), ], line: 369, }, ], end: 167, }, line: 369, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 371, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 369, }, ], values: [ [ Symbol( "false", ), ], ], line: 371, column: 8, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 375, column: 4, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 186, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Table { data: [], line: 375, column: 3, }, ], ], ), ], line: 375, }, ], end: 190, }, line: 375, column: 15, }, ], ), ], line: 375, column: 16, }, ], ], ), ], line: 371, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), ], line: 376, }, ], ], ), ], line: 376, }, ], ], line: 376, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 377, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 377, }, ], ], ), ], line: 377, }, Operator( ( "==", true, ), ), Symbol( "\"string\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 377, }, ], [ Symbol( "\"error in __gc\"", ), ], ], ), ], line: 377, }, ], ], ), ], line: 376, }, ], end: 2356, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 379, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 384, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 2363, code: [ Expr( [ Ident { expr: [ Symbol( "Message", ), ], line: 385, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "print", ), ], line: 385, }, ], ), Ident { expr: [ Call( [ [ Symbol( "'\\n >>> testC not active: skipping userdata GC tests <<<\\n'", ), ], ], ), ], line: 385, }, ], end: 2372, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 2372, 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: 390, }, ], [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 390, }, ], ], ), ], line: 390, }, ], ], ), ], line: 390, }, ], ], ), ), ], end: 26, }, line: 391, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 391, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 394, }, ], ], line: 394, column: 7, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 395, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 395, column: 11, }, ], ], ), ], line: 394, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 397, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( Some( [ Ident { expr: [ Symbol( "u", ), ], line: 397, }, ], ), [ Symbol( "0", ), ], ), ], line: 397, column: 10, }, ], ], line: 397, column: 11, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 397, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'vk'", ), ], ), ], line: 397, column: 20, }, ], ], ), ], line: 397, }, 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: 398, }, ], ], ), ], line: 398, }, ], ), Symbol( "]", ), ], line: 398, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 398, }, ], ], line: 398, column: 9, }, ], end: 91, }, line: 398, column: 17, }, ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 399, }, ], ], ), ], line: 399, }, ], stop: None, initial: None, code: CodeBlock { start: 99, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 399, }, ], ], ), ], line: 399, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 399, }, ], ], ), ], line: 399, }, ], ], ), ], line: 399, }, ], end: 112, }, line: 399, column: 21, }, Variable { names: [ ( "a1", false, ), ], values: [ [ Table { data: [], line: 400, column: 5, }, ], ], line: 400, column: 6, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 400, }, ], ], ), ], line: 400, }, ], stop: None, initial: None, code: CodeBlock { start: 128, code: [ Alter { names: [ Ident { expr: [ Symbol( "a1", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 400, }, ], ), Symbol( "]", ), ], line: 400, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 400, }, ], ], line: 400, column: 6, }, ], end: 135, }, line: 400, column: 23, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a1", ), ], line: 401, }, ], ], ), ], line: 401, }, ], stop: None, initial: None, code: CodeBlock { start: 145, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "v", ), ], line: 401, }, ], ), Symbol( "]", ), ], line: 401, }, ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 401, }, ], ], line: 401, column: 6, }, ], end: 152, }, line: 401, 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: 402, }, ], ), Symbol( "]", ), ], line: 402, }, ], ], ), ], line: 402, }, ], end: 167, }, line: 402, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 403, }, ], ], ), Symbol( ".", ), Symbol( "a", ), ], line: 402, }, ], values: [ [ Ident { expr: [ Symbol( "a1", ), ], line: 403, }, ], ], line: 403, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 404, }, ], ], ), Symbol( ".", ), Symbol( "u", ), ], line: 403, }, ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 404, }, ], ], line: 405, column: 0, }, DoBlock( CodeBlock { start: 184, code: [ Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 406, }, ], ], line: 406, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 407, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 406, }, ], 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: 408, }, ], ), Symbol( "]", ), ], line: 408, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 408, }, ], ], ), ], line: 408, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 409, }, ], ), Symbol( "]", ), ], line: 409, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 408, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 410, }, ], ], ), ], line: 410, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 410, }, ], ], ), ], line: 410, }, ], ], ), ], line: 409, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 411, }, ], ], ), Symbol( ".", ), Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "o", ), ], line: 411, }, ], ), Symbol( "]", ), ], line: 411, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 411, }, ], ], ), ], line: 410, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 411, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 412, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 412, column: 5, }, ], end: 71, }, line: 413, column: 1, }, ], ], line: 413, column: 1, }, ], end: 256, }, ), Alter { names: [ Ident { expr: [ Symbol( "a1", ), ], line: 414, }, Ident { expr: [ Symbol( "u", ), ], line: 415, }, ], values: [ [ Symbol( "nil", ), ], ], line: 415, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 416, }, ], ], ), ], line: 416, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 415, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 416, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 418, }, Operator( ( "==", true, ), ), Symbol( "11", ), ], ], ), ], line: 417, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 418, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 420, }, ], ], ), ], line: 420, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 419, }, ], end: 2664, }, next: None, line: 421, column: 1, }, ), line: 421, column: 1, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 425, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 425, column: 13, }, ], ], ), ], line: 425, }, ], ], line: 425, column: 14, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 427, }, ], ], ), ], line: 427, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"v\"", ), ], ), ], line: 427, column: 12, }, ], ], ), ], line: 425, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 428, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 427, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 2702, code: [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 428, }, ], end: 2709, }, line: 428, column: 18, }, ], ], line: 428, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 428, }, ], values: [ [ Symbol( "nil", ), ], ], line: 429, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 429, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 432, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 432, column: 13, }, ], ], ), ], line: 432, }, ], ], line: 433, column: 0, }, Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 433, }, ], ], ), ], line: 433, }, ], ], line: 433, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 433, }, ], values: [ [ Table { data: [ ( Some( [ Table { data: [ ( None, [ Symbol( "0", ), ], ), ], line: 434, column: 9, }, ], ), [ Symbol( "1", ), ], ), ( Some( [ Symbol( "0", ), ], ), [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ], line: 434, column: 20, }, ], ), ], line: 434, column: 21, }, ], ], line: 434, column: 22, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 434, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 434, column: 33, }, ], ], ), ], line: 434, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 434, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 2779, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 436, }, ], ], ), Symbol( ".", ), Symbol( "x", ), ], line: 436, }, ], ], ), ], line: 436, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 436, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), ], line: 436, }, ], values: [ [ Symbol( "10", ), ], ], line: 437, column: 3, }, ], end: 2797, }, line: 438, column: 1, }, ], ], line: 438, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 438, }, Ident { expr: [ Symbol( "m", ), ], line: 439, }, ], values: [ [ Symbol( "nil", ), ], ], line: 439, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 439, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 441, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 440, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 441, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 445, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 2824, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"!!!\"", ), ], ], ), ], line: 445, }, ], end: 2827, }, line: 445, column: 16, }, ], ), ], line: 445, column: 17, }, ], ], ), ], line: 445, }, ], ], line: 445, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 445, }, ], values: [ [ Symbol( "nil", ), ], ], line: 446, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), ], line: 447, }, ], ], ), ], line: 447, }, ], ], ), ], line: 446, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "_soft", ), ], line: 450, }, ], body: CodeBlock { start: 2844, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"deep structures\"", ), ], ], ), ], line: 451, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 452, column: 5, }, ], ], line: 453, 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: 454, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "next", ), ], ), [ Ident { expr: [ Symbol( "a", ), ], line: 454, }, ], ), ], line: 454, column: 7, }, ], ], line: 454, column: 7, }, ], end: 24, }, line: 455, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 455, }, ], end: 2872, }, next: None, line: 457, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"self-referenced threads\"", ), ], ], ), ], line: 457, }, Variable { names: [ ( "thread_id", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 462, column: 0, }, Variable { names: [ ( "threads", false, ), ], values: [ [ Table { data: [], line: 462, column: 5, }, ], ], line: 464, column: 0, }, Function { local: true, name: [ Symbol( "fn", ), ], args: [ "thread", ], body: CodeBlock { start: 2891, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 465, column: 5, }, ], ], line: 465, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "threads", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "thread_id", ), ], line: 466, }, ], ), Symbol( "]", ), ], line: 465, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Alter { names: [ Ident { expr: [ Symbol( "thread", ), ], line: 467, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 467, }, ], ], line: 467, column: 3, }, ], end: 17, }, line: 468, column: 1, }, ], ], line: 468, column: 1, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [], ), ], line: 468, }, ], end: 2914, }, line: 470, column: 1, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 472, }, Operator( ( "<", true, ), ), Symbol( "1000", ), ], body: CodeBlock { start: 2919, code: [ Variable { names: [ ( "thread", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "fn", ), ], line: 473, }, ], ], ), ], line: 473, }, ], ], line: 473, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "thread", ), ], line: 474, }, ], [ Ident { expr: [ Symbol( "thread", ), ], line: 474, }, ], ], ), ], line: 473, }, Alter { names: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 474, }, ], values: [ [ Ident { expr: [ Symbol( "thread_id", ), ], line: 475, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 475, column: 5, }, ], end: 2942, }, line: 476, column: 1, }, DoBlock( CodeBlock { start: 2943, code: [ Variable { names: [ ( "collected", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 485, column: 4, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 485, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 486, }, 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: 490, }, ], ], ), ], line: 490, }, Operator( ( "==", true, ), ), Symbol( "'function'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "param", ), ], line: 490, }, ], ], ), ], line: 490, }, Operator( ( "==", true, ), ), Symbol( "'thread'", ), ], ], ), ], line: 490, }, Alter { names: [ Ident { expr: [ Symbol( "param", ), ], line: 490, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "param", ), ], line: 491, }, ], ), ( None, [ Ident { expr: [ Symbol( "f", ), ], line: 491, }, ], ), ], line: 491, column: 7, }, ], ], line: 491, column: 7, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "param", ), ], line: 492, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "collected", ), ], line: 492, }, ], values: [ [ Symbol( "true", ), ], ], line: 492, column: 3, }, ], end: 37, }, line: 492, column: 14, }, ], ), ], line: 492, column: 15, }, ], ], ), ], line: 491, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 492, }, ], end: 51, }, line: 494, column: 1, }, ], ), Ident { expr: [ Call( [], ), ], line: 494, }, ], end: 61, }, line: 495, column: 1, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 496, }, ], ], ), ], line: 496, }, ], ], line: 496, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 497, }, ], [ Ident { expr: [ Symbol( "co", ), ], line: 497, }, ], ], ), ], line: 497, }, ], ], ), ], line: 496, }, ], end: 95, }, ), Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 498, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "collected", ), ], line: 502, }, ], ], ), ], line: 501, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 502, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collected", ), ], line: 504, }, ], ], ), ], line: 503, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 504, }, ], end: 3058, }, ), DoBlock( CodeBlock { start: 3059, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 510, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 510, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 512, }, ], ], line: 513, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 516, }, Operator( ( ">", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 516, }, ], body: CodeBlock { start: 12, 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: 514, }, ], values: [ [ Table { data: [], line: 514, column: 6, }, ], ], line: 514, column: 6, }, ], end: 14, }, line: 514, column: 14, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "0", ), ], ], ), ], line: 514, }, ], end: 33, }, line: 516, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 516, }, ], end: 3102, }, ), IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 521, }, ], body: CodeBlock { start: 3105, 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: 524, column: 8, }, ], ], line: 524, 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: 525, }, ], ], ), ), ], end: 20, }, line: 525, column: 12, }, ], ], ), ], line: 524, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 526, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 525, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 526, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Symbol( "30", ), ], ), ], line: 527, column: 7, }, ], ], line: 527, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 528, }, ], ], ), ], line: 528, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 527, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 528, }, ], end: 59, }, line: 530, column: 1, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 532, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 532, column: 13, }, ], ], ), ], line: 532, }, ], ], line: 532, column: 14, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 532, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "'stop'", ), ], ], ), ], line: 533, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 533, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 535, }, ], ], ), ], line: 535, }, ], ], line: 536, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), Call( [], ), ], line: 536, }, ], ], line: 536, column: 8, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"atomic\"", ), ], ], ), ], line: 536, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [], ), ], line: 538, }, Operator( ( "==", true, ), ), Symbol( "\"atomic\"", ), ], ], ), ], line: 537, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), Call( [], ), ], line: 539, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 538, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 540, }, ], ], ), ], line: 540, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 539, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"pause\"", ), ], ], ), ], line: 540, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "co", ), ], line: 542, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 542, }, Operator( ( "==", true, ), ), Symbol( "30", ), ], ], ), ], line: 541, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 542, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 547, }, ], ], line: 547, column: 9, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 547, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 548, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"atomic\"", ), ], ], ), ], line: 549, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gcstate", ), Call( [ [ Symbol( "\"sweepallgc\"", ), ], ], ), ], line: 550, }, Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 552, column: 5, }, ], ], line: 552, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 553, }, ], ], ), ], line: 553, }, Operator( ( "==", true, ), ), Symbol( "\"black\"", ), ], ], ), ], line: 552, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 554, }, ], ], ), ], line: 554, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 553, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setuservalue", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 555, }, ], [ Ident { expr: [ Symbol( "x", ), ], line: 555, }, ], ], ), ], line: 554, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 556, }, ], ], ), ], line: 556, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 555, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 556, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"+\"", ), ], ], ), ], line: 557, }, ], end: 3340, }, next: None, line: 560, column: 1, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 563, }, ], body: CodeBlock { start: 3343, code: [ Variable { names: [ ( "debug", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "\"debug\"", ), ], ], ), ], line: 564, }, ], ], line: 564, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 564, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 566, }, ], ], line: 567, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "newuserdata", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 567, }, ], ], line: 567, column: 9, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 568, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 568, column: 11, }, ], ], ), ], line: 567, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 569, }, ], [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Symbol( "true", ), ], ), ], line: 569, column: 11, }, ], ], ), ], line: 568, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "gccolor", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 570, }, ], ], ), ], line: 570, }, Operator( ( "==", true, ), ), Symbol( "\"white\"", ), ], ], ), ], line: 569, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "checkmemory", ), Call( [], ), ], line: 570, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 571, }, ], end: 3415, }, next: None, line: 573, column: 1, }, IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 576, }, ], body: CodeBlock { start: 3418, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"emergency collections\"", ), ], ], ), ], line: 577, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 577, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 578, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 580, }, Operator( ( "+", true, ), ), Symbol( "200", ), ], ], ), ], line: 579, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "200", ), ], step: None, code: CodeBlock { start: 29, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 581, column: 5, }, ], ], line: 581, column: 5, }, ], end: 35, }, line: 581, column: 13, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 581, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 582, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"table\"", ), ], ], ), ], line: 584, }, ], ], line: 585, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 585, column: 6, }, ], ), ( None, [ Table { data: [], line: 585, column: 9, }, ], ), ( None, [ Table { data: [], line: 585, column: 12, }, ], ), ], line: 585, column: 13, }, ], ], line: 585, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"table\"", ), ], ], ), ], line: 586, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 586, }, Operator( ( "+", true, ), ), Symbol( "4", ), ], ], ), ], line: 585, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 586, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"function\"", ), ], ], ), ], line: 587, }, ], ], line: 587, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 587, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 92, code: [], end: 93, }, line: 588, column: 6, }, ], ], line: 588, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"function\"", ), ], ], ), ], line: 589, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 589, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 588, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 589, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"thread\"", ), ], ], ), ], line: 590, }, ], ], line: 590, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 590, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 123, code: [], end: 124, }, line: 591, column: 10, }, ], ], ), ], line: 591, }, ], ], line: 591, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "\"thread\"", ), ], ], ), ], line: 592, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 592, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 591, }, ], end: 3557, }, next: None, line: 593, column: 1, }, DoBlock( CodeBlock { start: 3558, code: [ Variable { names: [ ( "setmetatable", false, ), ( "assert", false, ), ( "type", false, ), ( "print", false, ), ( "getmetatable", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), ], line: 597, }, ], [ Ident { expr: [ Symbol( "assert", ), ], line: 598, }, ], [ Ident { expr: [ Symbol( "type", ), ], line: 598, }, ], [ Ident { expr: [ Symbol( "print", ), ], line: 598, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), ], line: 598, }, ], ], line: 599, column: 0, }, Variable { names: [ ( "tt", false, ), ], values: [ [ Table { data: [], line: 599, column: 5, }, ], ], line: 599, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "tt", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 599, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 33, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 601, }, ], ], ), ], line: 601, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "tt", ), ], line: 601, }, ], ], ), ], line: 601, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "'xuxu'", ), Operator( ( "..", true, ), ), Expr( [ Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "3", ), ], ), Ident { expr: [], line: 603, }, Operator( ( "..", true, ), ), Symbol( "'joao'", ), ], [ Table { data: [], line: 603, column: 15, }, ], ], line: 603, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 603, }, ], values: [ [ Ident { expr: [ Symbol( "o", ), ], line: 604, }, ], ], line: 604, column: 3, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 605, column: 4, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 605, }, ], ], ), ], line: 604, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\">>> closing state \"", ), Operator( ( "..", true, ), ), Symbol( "\"<<<\\n\"", ), ], ], ), ], line: 605, }, ], end: 74, }, line: 607, column: 1, }, ], ], line: 608, column: 0, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 608, column: 7, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 608, }, ], ], ), ], line: 608, }, ], ], line: 608, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 608, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "u", ), ], line: 609, }, ], ), ], line: 609, column: 5, }, ], ], line: 609, column: 5, }, ], end: 3648, }, ), DoBlock( CodeBlock { start: 3649, code: [ Variable { names: [ ( "mt", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "__gc", ), ], ), [ Lambda { args: [ "o", ], body: CodeBlock { start: 10, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "o", ), ], line: 614, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ), ], end: 15, }, line: 614, column: 15, }, ], ), ], line: 614, column: 16, }, ], ], line: 615, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 23, code: [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "insert", ), Call( [ [ Ident { expr: [ Symbol( "___Glob", ), ], line: 617, }, ], [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 617, column: 10, }, ], [ Ident { expr: [ Symbol( "mt", ), ], line: 617, }, ], ], ), ], line: 617, }, ], ], ), ], line: 617, }, ], end: 38, }, line: 618, column: 1, }, ], end: 3688, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "'isrunning'", ), ], ], ), ], line: 622, }, ], ], ), ], line: 619, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 622, }, ]