--- source: src/main.rs expression: parsed input_file: test-data/lua5.1-tests/gc.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing garbage collection'", ), ], ], ), ], line: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 1, }, Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 3, }, ], values: [ [ Symbol( "234", ), ], ], line: 5, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "limit", ), ], line: 5, }, ], values: [ [ Symbol( "5000", ), ], ], line: 7, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 7, }, ], values: [ [ Symbol( "0", ), ], ], line: 11, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'tables'", ), ], ], ), ], line: 11, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 14, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 14, }, ], body: CodeBlock { start: 28, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 15, column: 5, }, ], ], line: 15, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 15, }, ], values: [ [ Symbol( "nil", ), ], ], line: 15, column: 9, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 15, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 16, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 16, column: 5, }, ], end: 43, }, line: 17, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 17, }, ], values: [ [ Symbol( "\"a\"", ), ], ], line: 19, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 19, }, ], values: [ [ Symbol( "0", ), ], ], line: 21, column: 3, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'strings'", ), ], ], ), ], line: 21, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 23, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 23, }, ], body: CodeBlock { start: 58, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 24, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 24, }, Operator( ( "..", true, ), ), Symbol( "\"b\"", ), ], ], line: 24, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 24, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 25, }, ], [ Symbol( "'(%d%d*)'", ), ], [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "upper", ), ], line: 25, }, ], ], ), ], line: 25, }, ], ], line: 25, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 25, }, ], values: [ [ Symbol( "\"a\"", ), ], ], line: 26, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 26, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 27, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 27, column: 5, }, ], end: 87, }, line: 28, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 28, }, ], values: [ [ Symbol( "0", ), ], ], line: 31, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 31, }, ], values: [ [ Table { data: [], line: 33, column: 4, }, ], ], line: 33, column: 4, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'functions'", ), ], ], ), ], line: 33, }, Function { local: false, name: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), ], args: [], body: CodeBlock { start: 104, code: [ WhileLoop { condition: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 37, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 37, }, ], body: CodeBlock { start: 5, code: [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"function temp(a) return 'a%d' end\"", ), ], [ Ident { expr: [ Symbol( "contCreate", ), ], line: 38, }, ], ], ), ], line: 38, }, ], ], ), Call( [], ), ], line: 38, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "temp", ), Call( [], ), ], line: 39, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "'a%d'", ), ], [ Ident { expr: [ Symbol( "contCreate", ), ], line: 39, }, ], ], ), ], line: 39, }, ], ], ), ], line: 38, }, Alter { names: [ Ident { expr: [ Symbol( "contCreate", ), ], line: 39, }, ], values: [ [ Ident { expr: [ Symbol( "contCreate", ), ], line: 40, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 40, column: 5, }, ], end: 39, }, line: 41, column: 1, }, ], end: 144, }, line: 42, column: 1, }, Ident { expr: [ Symbol( "a", ), Symbol( ":", ), Symbol( "test", ), Call( [], ), ], line: 42, }, DoBlock( CodeBlock { start: 150, code: [ Variable { names: [ ( "f", false, ), ], values: [ [ Lambda { args: [], body: CodeBlock { start: 6, code: [], end: 7, }, line: 47, column: 7, }, ], ], line: 47, column: 7, }, ], end: 158, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"functions with errors\"", ), ], ], ), ], line: 47, }, Alter { names: [ Ident { expr: [ Symbol( "prog", ), ], line: 50, }, ], 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: 61, column: 0, }, DoBlock( CodeBlock { start: 166, code: [ Variable { names: [ ( "step", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 63, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 63, }, ], [ Symbol( "\"_soft\"", ), ], ], ), ], line: 63, }, ], body: CodeBlock { start: 12, code: [ Alter { names: [ Ident { expr: [ Symbol( "step", ), ], line: 63, }, ], values: [ [ Symbol( "13", ), ], ], line: 63, column: 3, }, ], end: 16, }, next: None, line: 63, column: 12, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 64, }, ], ], ), ], line: 64, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 64, }, ], ), code: CodeBlock { start: 30, code: [ ForLoop { iter: "j", start: [ Ident { expr: [ Symbol( "i", ), ], line: 65, }, ], end: [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 65, }, ], ], ), ], line: 65, }, ], step: Some( [ Ident { expr: [ Symbol( "step", ), ], line: 65, }, ], ), code: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 66, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 66, }, ], [ Ident { expr: [ Symbol( "j", ), ], line: 66, }, ], ], ), ], line: 66, }, ], ], ), ], line: 66, }, ], ], ), ], line: 66, }, ], end: 31, }, line: 67, column: 1, }, ], end: 62, }, line: 68, column: 1, }, ], end: 229, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'long strings'", ), ], ], ), ], line: 69, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 71, }, ], values: [ [ Symbol( "\"01234567890123456789012345678901234567890123456789012345678901234567890123456789\"", ), ], ], line: 72, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 73, }, ], ], ), ], line: 73, }, Operator( ( "==", true, ), ), Symbol( "80", ), ], ], ), ], line: 72, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 73, }, ], values: [ [ Symbol( "''", ), ], ], line: 74, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 74, }, ], values: [ [ Symbol( "0", ), ], ], line: 75, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 75, }, ], values: [ [ Symbol( "300", ), ], ], line: 77, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 77, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 77, }, ], body: CodeBlock { start: 261, code: [ Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 77, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 77, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 77, }, ], ], line: 77, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 77, }, ], values: [ [ Ident { expr: [ Symbol( "n", ), ], line: 77, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 77, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "j", ), ], line: 77, }, ], values: [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 77, }, ], ], ), ], line: 77, }, ], ], line: 77, column: 18, }, ], end: 280, }, line: 77, column: 24, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "len", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 78, }, ], ], ), ], line: 78, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 78, }, Operator( ( "*", true, ), ), Symbol( "80", ), ], ], ), ], line: 77, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 78, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "sub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 79, }, ], [ Symbol( "1", ), ], [ Symbol( "20000", ), ], ], ), ], line: 79, }, ], ], line: 79, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 79, }, Ident { expr: [ Symbol( "i", ), ], line: 80, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 80, }, ], [ Symbol( "'(%d%d%d%d)'", ), ], [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "sin", ), ], line: 80, }, ], ], ), ], line: 80, }, ], ], line: 80, column: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 81, }, Operator( ( "==", true, ), ), Symbol( "20000", ), Operator( ( "/", true, ), ), Symbol( "4", ), ], ], ), ], line: 80, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 81, }, ], values: [ [ Symbol( "nil", ), ], ], line: 82, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 82, }, ], values: [ [ Symbol( "nil", ), ], ], line: 83, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( "[", ), Expr( [ Symbol( "\"while\"", ), ], ), Symbol( "]", ), ], line: 85, }, Operator( ( "==", true, ), ), Symbol( "234", ), ], ], ), ], line: 83, }, Variable { names: [ ( "bytes", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 88, }, ], ], line: 89, column: 0, }, WhileLoop { condition: [ Symbol( "1", ), ], body: CodeBlock { start: 353, code: [ Variable { names: [ ( "nbytes", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 90, }, ], ], line: 91, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "nbytes", ), ], line: 91, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "bytes", ), ], line: 91, }, ], body: CodeBlock { start: 11, code: [ Break, ], end: 13, }, next: None, line: 91, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "bytes", ), ], line: 91, }, ], values: [ [ Ident { expr: [ Symbol( "nbytes", ), ], line: 92, }, ], ], line: 92, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 92, }, ], values: [ [ Table { data: [], line: 93, column: 4, }, ], ], line: 93, column: 4, }, ], end: 374, }, line: 94, column: 1, }, Function { local: true, name: [ Symbol( "dosteps", ), ], args: [ "siz", ], body: CodeBlock { start: 380, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 98, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 98, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 100, column: 5, }, ], ], line: 101, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "100", ), ], step: None, code: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 101, }, ], ), Symbol( "]", ), ], line: 101, }, ], values: [ [ Table { data: [ ( None, [ Table { data: [], line: 101, column: 8, }, ], ), ], line: 101, column: 9, }, ], ], line: 101, column: 10, }, Variable { names: [ ( "b", false, ), ], values: [ [ Table { data: [], line: 101, column: 15, }, ], ], line: 101, column: 15, }, ], end: 33, }, line: 101, column: 23, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 102, }, ], ], line: 103, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 104, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Ident { expr: [ Symbol( "siz", ), ], line: 106, }, ], ], ), ], line: 106, }, ], body: CodeBlock { start: 44, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 105, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 105, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 105, column: 5, }, ], end: 50, }, line: 106, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 107, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 107, }, ], ], ), ], line: 106, }, Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 108, }, ], ], ), ), ], end: 447, }, line: 109, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 111, }, Operator( ( ">", true, ), ), Symbol( "10", ), ], ], ), ], line: 109, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "6", ), ], ], ), ], line: 112, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 112, }, ], ], ), ], line: 111, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dosteps", ), Call( [ [ Symbol( "10000", ), ], ], ), ], line: 113, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 112, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "1000000", ), ], ], ), ], line: 114, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 113, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"step\"", ), ], [ Symbol( "1000000", ), ], ], ), ], line: 115, }, ], ], ), ], line: 114, }, DoBlock( CodeBlock { start: 498, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 119, }, ], ], line: 119, column: 6, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 119, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 120, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 124, }, Operator( ( ">", true, ), ), Symbol( "1000", ), ], body: CodeBlock { start: 12, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 123, column: 5, }, ], ], line: 123, column: 5, }, ], end: 18, }, line: 124, column: 6, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 124, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "gcinfo", ), Call( [], ), ], line: 128, }, Operator( ( "<", true, ), ), Symbol( "1000", ), ], body: CodeBlock { start: 26, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 127, column: 5, }, ], ], line: 127, column: 5, }, ], end: 32, }, line: 128, column: 6, }, ], end: 536, }, ), Alter { names: [ Ident { expr: [ Symbol( "lim", ), ], line: 129, }, ], values: [ [ Symbol( "15", ), ], ], line: 131, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 131, }, ], values: [ [ Table { data: [], line: 132, column: 4, }, ], ], line: 134, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 134, }, ], step: None, code: CodeBlock { start: 550, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 134, column: 4, }, ], ), Symbol( "]", ), ], line: 134, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 134, }, ], ], line: 134, column: 7, }, ], end: 558, }, line: 134, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 134, }, ], values: [ [ Table { data: [], line: 135, column: 4, }, ], ], line: 136, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 136, }, ], ], ), ], line: 136, }, ], stop: None, initial: None, code: CodeBlock { start: 572, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 136, }, ], ), Symbol( "]", ), ], line: 136, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 136, }, ], ], line: 136, column: 6, }, ], end: 579, }, line: 136, column: 17, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 138, }, ], ], ), ], line: 138, }, ], stop: None, initial: None, code: CodeBlock { start: 587, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 139, }, ], ), Symbol( "]", ), ], line: 139, }, ], values: [ [ Symbol( "nil", ), ], ], line: 139, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 140, }, ], ], ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 140, }, ], ], ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 139, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 140, }, ], end: 613, }, line: 142, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 142, }, ], values: [ [ Symbol( "nil", ), ], ], line: 143, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 143, }, ForFuncLoop { iters: [ "n", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 145, }, ], ], ), ], line: 145, }, ], stop: None, initial: None, code: CodeBlock { start: 627, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "'cannot be here'", ), ], ], ), ], line: 145, }, ], end: 630, }, line: 145, column: 11, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 146, }, ], step: None, code: CodeBlock { start: 637, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 146, }, ], ), Symbol( "]", ), ], line: 146, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 146, }, ], ], line: 146, column: 6, }, ], end: 644, }, line: 146, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 147, }, ], step: None, code: CodeBlock { start: 651, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 147, }, ], ), Symbol( "]", ), ], line: 147, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 147, }, ], ], ), ], line: 147, }, ], end: 661, }, line: 147, column: 17, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'weak tables'", ), ], ], ), ], line: 147, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 150, }, ], values: [ [ Table { data: [], line: 151, column: 4, }, ], ], line: 151, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 151, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'k'", ), ], ), ], line: 151, column: 14, }, ], ], ), ], line: 151, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 153, }, ], step: None, code: CodeBlock { start: 688, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 153, column: 4, }, ], ), Symbol( "]", ), ], line: 153, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 153, }, ], ], line: 153, column: 7, }, ], end: 696, }, line: 153, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 155, }, ], step: None, code: CodeBlock { start: 703, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 155, column: 5, }, ], ], line: 155, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 155, }, ], ), Symbol( "]", ), ], line: 155, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 155, }, ], ], line: 155, column: 12, }, ], end: 716, }, line: 155, column: 20, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 156, }, ], step: None, code: CodeBlock { start: 723, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 156, }, ], ), Symbol( "]", ), ], line: 156, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 156, }, ], ], line: 156, column: 6, }, ], end: 730, }, line: 156, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 157, }, ], step: None, code: CodeBlock { start: 737, code: [ Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'@'", ), ], [ Ident { expr: [ Symbol( "i", ), ], line: 157, }, ], ], ), ], line: 157, }, ], ], line: 157, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "s", ), ], line: 157, }, ], ), Symbol( "]", ), ], line: 157, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 157, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), ], ], line: 157, column: 20, }, ], end: 758, }, line: 157, column: 28, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 157, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 160, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 160, }, ], ], ), ], line: 160, }, ], stop: None, initial: None, code: CodeBlock { start: 775, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 160, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 160, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 160, }, Operator( ( "..", true, ), ), Symbol( "'#'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 160, }, ], ], ), ], line: 160, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 160, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 160, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 160, column: 18, }, ], end: 794, }, line: 160, column: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 161, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 161, }, ], ], ), ], line: 160, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 161, }, ], values: [ [ Table { data: [], line: 163, column: 4, }, ], ], line: 163, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 163, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'v'", ), ], ), ], line: 163, column: 14, }, ], ], ), ], line: 163, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 163, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'b'", ), ], [ Symbol( "21", ), ], ], ), ], line: 164, }, ], ], line: 164, column: 13, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 164, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 166, }, ], ], ), ], line: 165, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 166, }, ], values: [ [ Symbol( "nil", ), ], ], line: 169, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 169, }, ], step: None, code: CodeBlock { start: 854, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 169, }, ], ), Symbol( "]", ), ], line: 169, }, ], values: [ [ Table { data: [], line: 169, column: 7, }, ], ], line: 169, column: 7, }, ], end: 862, }, line: 169, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 170, }, ], step: None, code: CodeBlock { start: 869, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 170, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ), Symbol( "]", ), ], line: 170, }, ], values: [ [ Table { data: [], line: 170, column: 9, }, ], ], line: 170, column: 9, }, ], end: 879, }, line: 170, column: 17, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 172, }, ], step: None, code: CodeBlock { start: 886, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 172, column: 5, }, ], ], line: 172, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 172, }, ], ), Symbol( "]", ), ], line: 172, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 172, }, ], ], line: 172, column: 12, }, ], end: 899, }, line: 172, column: 20, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 173, }, ], step: None, code: CodeBlock { start: 906, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 173, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 173, }, ], ), Symbol( "]", ), ], line: 173, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 173, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), ], ], line: 173, column: 10, }, ], end: 917, }, line: 173, column: 18, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 173, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 176, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 176, }, ], ], ), ], line: 176, }, ], stop: None, initial: None, code: CodeBlock { start: 934, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 176, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 176, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 176, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 176, }, Operator( ( "..", true, ), ), Symbol( "'x'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 176, }, ], ], ), ], line: 176, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 176, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 176, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 176, column: 20, }, ], end: 955, }, line: 176, column: 31, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 177, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 177, }, ], ], ), ], line: 176, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 177, }, ], values: [ [ Table { data: [], line: 179, column: 4, }, ], ], line: 179, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 179, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'vk'", ), ], ), ], line: 179, column: 14, }, ], ], ), ], line: 179, }, Variable { names: [ ( "x", false, ), ( "y", false, ), ( "z", false, ), ], values: [ [ Table { data: [], line: 180, column: 9, }, ], [ Table { data: [], line: 180, column: 12, }, ], [ Table { data: [], line: 180, column: 15, }, ], ], line: 180, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 180, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 182, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 182, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 182, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 182, }, ], [ Ident { expr: [ Symbol( "z", ), ], line: 182, }, ], ], line: 182, column: 20, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 183, }, ], ), Symbol( "]", ), ], line: 182, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 183, }, ], ], line: 185, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "4", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 185, }, ], step: None, code: CodeBlock { start: 1041, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 185, }, ], ), Symbol( "]", ), ], line: 185, }, ], values: [ [ Table { data: [], line: 185, column: 7, }, ], ], line: 185, column: 7, }, ], end: 1049, }, line: 185, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 186, }, ], step: None, code: CodeBlock { start: 1056, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Table { data: [], line: 186, column: 4, }, ], ), Symbol( "]", ), ], line: 186, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 186, }, ], ], line: 186, column: 7, }, ], end: 1064, }, line: 186, column: 15, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "lim", ), ], line: 187, }, ], step: None, code: CodeBlock { start: 1071, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 187, column: 5, }, ], ], line: 187, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "t", ), ], line: 187, }, ], ), Symbol( "]", ), ], line: 187, }, ], values: [ [ Ident { expr: [ Symbol( "t", ), ], line: 187, }, ], ], line: 187, column: 12, }, ], end: 1084, }, line: 187, column: 20, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 187, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 189, }, ], ], ), ], line: 189, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 188, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 191, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 191, }, ], ], ), ], line: 191, }, ], stop: None, initial: None, code: CodeBlock { start: 1110, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 192, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 192, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 192, }, ], ), Ident { expr: [], line: 192, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 193, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 193, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 193, }, ], ), Ident { expr: [], line: 193, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 194, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 194, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "z", ), ], line: 194, }, ], ), Ident { expr: [], line: 194, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 194, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 194, }, ], ], ), ], line: 192, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 194, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 195, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 195, column: 5, }, ], end: 1153, }, line: 196, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 197, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 196, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 197, }, Ident { expr: [ Symbol( "y", ), ], line: 198, }, Ident { expr: [ Symbol( "z", ), ], line: 198, }, ], values: [ [ Symbol( "nil", ), ], ], line: 198, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 198, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 200, }, ], ], ), ], line: 200, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'$'", ), ], [ Symbol( "11", ), ], ], ), ], line: 200, }, ], ], ), ], line: 199, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 200, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 205, }, ], ], line: 206, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 207, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( Some( [ Ident { expr: [ Symbol( "u", ), ], line: 207, }, ], ), [ Symbol( "0", ), ], ), ], line: 207, column: 10, }, ], ], line: 207, column: 11, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 207, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'vk'", ), ], ), ], line: 207, column: 20, }, ], ], ), ], line: 207, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1228, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 208, }, ], ], ), ], line: 208, }, ], ), Symbol( "]", ), ], line: 208, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 208, }, ], ], line: 208, column: 9, }, ], end: 1238, }, line: 208, column: 17, }, ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 209, }, ], ], ), ], line: 209, }, ], stop: None, initial: None, code: CodeBlock { start: 1246, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 209, }, ], ], ), ], line: 209, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 209, }, ], ], ), ], line: 209, }, ], ], ), ], line: 209, }, ], end: 1259, }, line: 209, column: 21, }, Variable { names: [ ( "a1", false, ), ], values: [ [ Table { data: [], line: 210, column: 5, }, ], ], line: 210, column: 6, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 210, }, ], ], ), ], line: 210, }, ], stop: None, initial: None, code: CodeBlock { start: 1275, code: [ Alter { names: [ Ident { expr: [ Symbol( "a1", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 210, }, ], ), Symbol( "]", ), ], line: 210, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 210, }, ], ], line: 210, column: 6, }, ], end: 1282, }, line: 210, column: 23, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a1", ), ], line: 211, }, ], ], ), ], line: 211, }, ], stop: None, initial: None, code: CodeBlock { start: 1292, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "v", ), ], line: 211, }, ], ), Symbol( "]", ), ], line: 211, }, ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 211, }, ], ], line: 211, column: 6, }, ], end: 1299, }, line: 211, column: 17, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1306, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 212, }, ], ), Symbol( "]", ), ], line: 212, }, ], ], ), ], line: 212, }, ], end: 1314, }, line: 212, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 213, }, ], ], ), Symbol( ".", ), Symbol( "a", ), ], line: 212, }, ], values: [ [ Ident { expr: [ Symbol( "a1", ), ], line: 213, }, ], ], line: 213, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 214, }, ], ], ), Symbol( ".", ), Symbol( "u", ), ], line: 213, }, ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 214, }, ], ], line: 215, column: 0, }, DoBlock( CodeBlock { start: 1331, code: [ Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "u", ), ], line: 216, }, ], ], line: 216, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 217, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 216, }, ], 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: 218, }, ], ), Symbol( "]", ), ], line: 218, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 218, }, ], ], ), ], line: 218, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 219, }, ], ), Symbol( "]", ), ], line: 219, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 218, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 220, }, ], ], ), ], line: 220, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 220, }, ], ], ), ], line: 220, }, ], ], ), ], line: 219, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 221, }, ], ], ), Symbol( ".", ), Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "o", ), ], line: 221, }, ], ), Symbol( "]", ), ], line: 221, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 221, }, ], ], ), ], line: 220, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 221, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 222, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 222, column: 5, }, ], end: 71, }, line: 223, column: 1, }, ], ], line: 223, column: 1, }, ], end: 1403, }, ), Alter { names: [ Ident { expr: [ Symbol( "a1", ), ], line: 224, }, Ident { expr: [ Symbol( "u", ), ], line: 225, }, ], values: [ [ Symbol( "nil", ), ], ], line: 225, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 226, }, ], ], ), ], line: 226, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ], line: 225, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 226, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 228, }, Operator( ( "==", true, ), ), Symbol( "11", ), ], ], ), ], line: 227, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 228, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 230, }, ], ], ), ], line: 230, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 229, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 234, }, ], ], line: 234, column: 7, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 235, }, ], ], ), ], line: 235, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"v\"", ), ], ), ], line: 235, column: 12, }, ], ], ), ], line: 234, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 236, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 235, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 1469, code: [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 236, }, ], end: 1476, }, line: 236, column: 18, }, ], ], line: 236, column: 18, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 236, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 239, }, ], ], line: 240, column: 0, }, Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 240, }, ], ], ), ], line: 240, }, ], ], line: 240, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 240, }, ], values: [ [ Table { data: [ ( Some( [ Table { data: [ ( None, [ Symbol( "0", ), ], ), ], line: 241, column: 9, }, ], ), [ Symbol( "1", ), ], ), ( Some( [ Symbol( "0", ), ], ), [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ], line: 241, column: 20, }, ], ), ], line: 241, column: 21, }, ], ], line: 241, column: 22, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "x", ), ], line: 241, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 241, column: 33, }, ], ], ), ], line: 241, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 241, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 1536, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 243, }, ], ], ), Symbol( ".", ), Symbol( "x", ), ], line: 243, }, ], ], ), ], line: 243, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 243, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), ], line: 243, }, ], values: [ [ Symbol( "10", ), ], ], line: 244, column: 3, }, ], end: 1554, }, line: 245, column: 1, }, ], ], line: 245, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 245, }, Ident { expr: [ Symbol( "m", ), ], line: 246, }, ], values: [ [ Symbol( "nil", ), ], ], line: 246, column: 5, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 246, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 248, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 247, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 248, }, ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 252, }, ], ], line: 252, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 253, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 252, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 1584, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"!!!\"", ), ], ], ), ], line: 253, }, ], end: 1587, }, line: 253, column: 13, }, ], ], line: 253, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "u", ), ], line: 253, }, ], values: [ [ Symbol( "nil", ), ], ], line: 254, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "collectgarbage", ), ], line: 255, }, ], ], ), ], line: 255, }, ], ], ), ], line: 254, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 258, }, ], [ Symbol( "\"_soft\"", ), ], ], ), ], line: 258, }, ], body: CodeBlock { start: 1607, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"deep structures\"", ), ], ], ), ], line: 259, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 260, column: 5, }, ], ], line: 261, 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: 262, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "next", ), ], ), [ Ident { expr: [ Symbol( "a", ), ], line: 262, }, ], ), ], line: 262, column: 7, }, ], ], line: 262, column: 7, }, ], end: 24, }, line: 263, column: 1, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 263, }, ], end: 1635, }, next: None, line: 265, column: 1, }, Variable { names: [ ( "thread_id", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 269, column: 0, }, Variable { names: [ ( "threads", false, ), ], values: [ [ Table { data: [], line: 269, column: 5, }, ], ], line: 271, column: 0, }, Function { local: false, name: [ Symbol( "fn", ), ], args: [ "thread", ], body: CodeBlock { start: 1649, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 272, column: 5, }, ], ], line: 272, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "threads", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "thread_id", ), ], line: 273, }, ], ), Symbol( "]", ), ], line: 272, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Alter { names: [ Ident { expr: [ Symbol( "thread", ), ], line: 274, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 274, }, ], ], line: 274, column: 3, }, ], end: 17, }, line: 275, column: 1, }, ], ], line: 275, column: 1, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [], ), ], line: 275, }, ], end: 1672, }, line: 277, column: 1, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 279, }, Operator( ( "<", true, ), ), Symbol( "1000", ), ], body: CodeBlock { start: 1677, code: [ Variable { names: [ ( "thread", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "fn", ), ], line: 280, }, ], ], ), ], line: 280, }, ], ], line: 280, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "thread", ), ], line: 281, }, ], [ Ident { expr: [ Symbol( "thread", ), ], line: 281, }, ], ], ), ], line: 280, }, Alter { names: [ Ident { expr: [ Symbol( "thread_id", ), ], line: 281, }, ], values: [ [ Ident { expr: [ Symbol( "thread_id", ), ], line: 282, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 282, column: 5, }, ], end: 1700, }, line: 283, column: 1, }, DoBlock( CodeBlock { start: 1701, code: [ Variable { names: [ ( "newproxy", false, ), ( "assert", false, ), ( "type", false, ), ( "print", false, ), ( "getmetatable", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), ], line: 289, }, ], [ Ident { expr: [ Symbol( "assert", ), ], line: 290, }, ], [ Ident { expr: [ Symbol( "type", ), ], line: 290, }, ], [ Ident { expr: [ Symbol( "print", ), ], line: 290, }, ], [ Ident { expr: [ Symbol( "getmetatable", ), ], line: 290, }, ], ], line: 291, column: 0, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 291, }, ], ], line: 292, column: 0, }, Variable { names: [ ( "tt", false, ), ], values: [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 292, }, ], ], ), ], line: 292, }, ], ], line: 292, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 292, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "u", ), ], line: 293, }, ], ), ], line: 293, column: 5, }, ], ], line: 293, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "tt", ), Symbol( ".", ), Symbol( "__gc", ), ], line: 293, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 47, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 295, }, ], ], ), ], line: 295, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "tt", ), ], line: 295, }, ], ], ), ], line: 295, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "'xuxu'", ), Operator( ( "..", true, ), ), Expr( [ Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "3", ), ], ), Ident { expr: [], line: 297, }, Operator( ( "..", true, ), ), Symbol( "'joao'", ), ], [ Table { data: [], line: 297, column: 15, }, ], ], line: 297, column: 15, }, Alter { names: [ Ident { expr: [ Symbol( "___Glob", ), ], line: 297, }, ], values: [ [ Ident { expr: [ Symbol( "o", ), ], line: 298, }, ], ], line: 298, column: 3, }, Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Ident { expr: [ Symbol( "o", ), ], line: 299, }, ], ], ), ], line: 298, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\">>> closing state \"", ), Operator( ( "..", true, ), ), Symbol( "\"<<<\\n\"", ), ], ], ), ], line: 299, }, ], end: 85, }, line: 301, column: 1, }, ], ], line: 301, column: 1, }, ], end: 1787, }, ), DoBlock( CodeBlock { start: 1788, code: [ Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 306, }, ], ], line: 306, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 307, }, ], ], ), Symbol( ".", ), Symbol( "__gc", ), ], line: 306, }, ], values: [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 18, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "o", ), ], line: 307, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ), ], end: 23, }, line: 307, column: 16, }, ], ], line: 307, column: 16, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "insert", ), Call( [ [ Ident { expr: [ Symbol( "___Glob", ), ], line: 308, }, ], [ Ident { expr: [ Symbol( "u", ), ], line: 308, }, ], ], ), ], line: 307, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 38, code: [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "insert", ), Call( [ [ Ident { expr: [ Symbol( "___Glob", ), ], line: 309, }, ], [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 309, }, ], ], ), ], line: 309, }, ], ], ), ], line: 309, }, ], end: 50, }, line: 309, column: 19, }, ], end: 1839, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 310, }, ]