--- source: src/main.rs expression: parsed input_file: test-data/lua5.1-tests/closure.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing closures and coroutines\"", ), ], ], ), ], line: 1, }, Variable { names: [ ( "A", false, ), ( "B", false, ), ], values: [ [ Symbol( "0", ), ], [ Table { data: [ ( Some( [ Symbol( "g", ), ], ), [ Symbol( "10", ), ], ), ], line: 3, column: 12, }, ], ], line: 4, column: 0, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "x", ], body: CodeBlock { start: 19, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 5, column: 5, }, ], ], line: 6, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "1000", ), ], step: None, code: CodeBlock { start: 12, code: [ Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 8, column: 0, }, DoBlock( CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 9, }, ], ), Symbol( "]", ), ], line: 9, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 8, code: [ Alter { names: [ Ident { expr: [ Symbol( "B", ), Symbol( ".", ), Symbol( "g", ), ], line: 9, }, ], values: [ [ Ident { expr: [ Symbol( "B", ), Symbol( ".", ), Symbol( "g", ), ], line: 9, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 9, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "y", ), ], line: 9, }, ], values: [ [ Ident { expr: [ Symbol( "y", ), ], line: 9, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 9, }, ], ], line: 9, column: 16, }, Return( Some( [ [ Ident { expr: [ Symbol( "y", ), ], line: 9, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 9, }, ], ], ), ), ], end: 29, }, line: 9, column: 29, }, ], ], line: 9, column: 29, }, ], end: 35, }, ), ], end: 48, }, line: 11, column: 1, }, Variable { names: [ ( "dummy", false, ), ], values: [ [ Lambda { args: [], body: CodeBlock { start: 54, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "A", ), ], line: 12, }, ], ), Symbol( "]", ), ], line: 12, }, ], ], ), ), ], end: 60, }, line: 12, column: 12, }, ], ], line: 12, column: 12, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 12, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 13, }, ], values: [ [ Symbol( "1", ), ], ], line: 14, column: 4, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "dummy", ), Call( [], ), ], line: 14, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 14, }, ], ], ), ], line: 14, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 14, }, ], values: [ [ Symbol( "0", ), ], ], line: 14, column: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Call( [], ), ], line: 15, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 15, }, ], ], ), ], line: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), Call( [], ), ], line: 16, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 16, }, ], ], ), ], line: 15, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "B", ), Symbol( ".", ), Symbol( "g", ), ], line: 18, }, Operator( ( "==", true, ), ), Symbol( "12", ), ], ], ), ], line: 17, }, Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 19, }, ], ], ), ), ], end: 138, }, line: 20, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 20, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 22, }, ], ], line: 24, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "1", ), ], ), [ Table { data: [], line: 24, column: 10, }, ], ), ], line: 24, column: 11, }, ], ], line: 24, column: 11, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 25, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "'kv'", ), ], ), ], line: 25, column: 9, }, ], ], ), ], line: 24, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "x", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 26, }, ], body: CodeBlock { start: 171, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "A", ), ], line: 27, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 27, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 27, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 27, }, ], ], line: 27, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 27, }, ], values: [ [ Ident { expr: [ Symbol( "A", ), ], line: 28, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 28, column: 5, }, ], end: 187, }, line: 29, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Call( [], ), ], line: 30, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 30, }, ], ], ), ], line: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Call( [], ), ], line: 31, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 31, }, ], ], ), ], line: 30, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Call( [], ), ], line: 32, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 32, }, ], ], ), ], line: 31, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 32, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Call( [], ), ], line: 34, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 34, }, ], ], ), ], line: 33, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Call( [], ), ], line: 35, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 35, }, ], ], ), ], line: 34, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), Call( [], ), ], line: 36, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 36, }, ], ], ), ], line: 35, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "8", ), ], ), Symbol( "]", ), Call( [], ), ], line: 37, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 37, }, ], ], ), ], line: 36, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 38, }, ], ], ), Symbol( ".", ), Symbol( "__mode", ), ], line: 38, }, Operator( ( "==", true, ), ), Symbol( "'kv'", ), ], ], ), ], line: 37, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "B", ), Symbol( ".", ), Symbol( "g", ), ], line: 39, }, Operator( ( "==", true, ), ), Symbol( "19", ), ], ], ), ], line: 38, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 39, }, ], values: [ [ Table { data: [], line: 42, column: 4, }, ], ], line: 43, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 311, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 44, }, ], ), Symbol( "]", ), ], line: 44, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "set", ), ], ), [ Lambda { args: [ "x", ], body: CodeBlock { start: 12, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 44, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 44, }, ], ], line: 44, column: 3, }, ], end: 16, }, line: 44, column: 16, }, ], ), ( Some( [ Symbol( "get", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 22, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 44, }, ], ], ), ), ], end: 25, }, line: 44, column: 25, }, ], ), ], line: 44, column: 26, }, ], ], line: 45, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 45, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], body: CodeBlock { start: 31, code: [ Break, ], end: 33, }, next: None, line: 45, column: 7, }, ], end: 345, }, line: 46, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 47, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 46, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "set", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 47, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 49, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], ], ), ], line: 48, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "set", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 49, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 51, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], ], ), ], line: 50, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 52, }, Operator( ( "==", true, ), ), Symbol( "'a'", ), ], ], ), ], line: 51, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 52, }, ], values: [ [ Table { data: [], line: 54, column: 4, }, ], ], line: 55, column: 0, }, ForFuncLoop { iters: [ "i", "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Table { data: [ ( None, [ Symbol( "'a'", ), ], ), ( None, [ Symbol( "'b'", ), ], ), ], line: 55, column: 11, }, ], ], ), ], line: 55, }, ], stop: None, initial: None, code: CodeBlock { start: 427, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 56, }, ], ), Symbol( "]", ), ], line: 56, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "set", ), ], ), [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 56, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 56, }, ], ], line: 56, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "k", ), ], line: 56, }, ], values: [ [ Ident { expr: [ Symbol( "y", ), ], line: 56, }, ], ], line: 56, column: 7, }, ], end: 22, }, line: 56, column: 22, }, ], ), ( Some( [ Symbol( "get", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 28, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 57, }, ], [ Ident { expr: [ Symbol( "k", ), ], line: 57, }, ], ], ), ), ], end: 33, }, line: 57, column: 10, }, ], ), ], line: 57, column: 11, }, ], ], line: 58, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 58, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 39, code: [ Break, ], end: 41, }, next: None, line: 58, column: 7, }, ], end: 469, }, line: 59, column: 1, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "set", ), Call( [ [ Symbol( "10", ), ], [ Symbol( "20", ), ], ], ), ], line: 59, }, Variable { names: [ ( "r", false, ), ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 61, }, ], ], line: 61, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "r", ), ], line: 62, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 62, }, Operator( ( "==", true, ), ), Symbol( "'b'", ), ], ], ), ], line: 61, }, Alter { names: [ Ident { expr: [ Symbol( "r", ), ], line: 62, }, Ident { expr: [ Symbol( "s", ), ], line: 63, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 63, }, ], ], line: 63, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "r", ), ], line: 64, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 64, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 63, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "set", ), Call( [ [ Symbol( "'a'", ), ], [ Symbol( "'b'", ), ], ], ), ], line: 64, }, Alter { names: [ Ident { expr: [ Symbol( "r", ), ], line: 65, }, Ident { expr: [ Symbol( "s", ), ], line: 66, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), Symbol( ".", ), Symbol( "get", ), Call( [], ), ], line: 66, }, ], ], line: 66, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "r", ), ], line: 67, }, Operator( ( "==", true, ), ), Symbol( "\"a\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 67, }, Operator( ( "==", true, ), ), Symbol( "\"b\"", ), ], ], ), ], line: 66, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "3", ), ], step: None, code: CodeBlock { start: 565, code: [ Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 72, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 5, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "i", ), ], line: 72, }, ], ], ), ), ], end: 8, }, line: 72, column: 8, }, ], ], line: 73, column: 0, }, Break, ], end: 575, }, line: 74, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 75, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 74, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Table { data: [ ( None, [ Symbol( "\"a\"", ), ], ), ( None, [ Symbol( "\"b\"", ), ], ), ], line: 77, column: 11, }, ], ], ), ], line: 77, }, ], stop: None, initial: None, code: CodeBlock { start: 595, code: [ Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 78, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 5, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "k", ), ], line: 78, }, ], [ Ident { expr: [ Symbol( "v", ), ], line: 78, }, ], ], ), ), ], end: 10, }, line: 78, column: 10, }, ], ], line: 79, column: 0, }, Break, ], end: 607, }, line: 80, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 81, }, ], ), ], line: 81, column: 8, }, ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 81, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 80, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 82, }, ], ), ], line: 82, column: 8, }, ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 82, }, Operator( ( "==", true, ), ), Symbol( "\"a\"", ), ], ], ), ], line: 81, }, Variable { names: [ ( "b", false, ), ], values: [], line: 87, column: 2, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "x", ], body: CodeBlock { start: 644, code: [ Variable { names: [ ( "first", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 90, column: 0, }, WhileLoop { condition: [ Symbol( "1", ), ], body: CodeBlock { start: 7, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 91, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "first", ), ], line: 91, }, ], body: CodeBlock { start: 8, code: [ Return( None, ), ], end: 10, }, next: None, line: 91, column: 10, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "'xuxu'", ), ], ], line: 92, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 92, }, ], values: [ [ Lambda { args: [ "op", "y", ], body: CodeBlock { start: 22, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "op", ), ], line: 94, }, Operator( ( "==", true, ), ), Symbol( "'set'", ), ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 95, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 95, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 95, }, ], ], line: 95, column: 5, }, ], end: 11, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 11, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 97, }, ], ], ), ), ], end: 14, }, next: None, line: 98, column: 1, }, ), line: 98, column: 1, }, ], end: 37, }, line: 99, column: 1, }, ], ], line: 100, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 100, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], body: CodeBlock { start: 42, code: [ DoBlock( CodeBlock { start: 1, code: [ Break, ], end: 3, }, ), ], end: 46, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 101, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 50, code: [ Return( None, ), ], end: 52, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 52, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 102, }, Operator( ( "~=", true, ), ), Symbol( "3", ), ], body: CodeBlock { start: 5, code: [ Ident { expr: [ Symbol( "error", ), Call( [], ), ], line: 102, }, ], end: 9, }, next: None, line: 102, column: 9, }, ], end: 62, }, next: None, line: 103, column: 1, }, ), line: 103, column: 1, }, ), line: 103, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "first", ), ], line: 103, }, ], values: [ [ Symbol( "nil", ), ], ], line: 104, column: 3, }, ], end: 73, }, line: 105, column: 1, }, ], end: 718, }, line: 106, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "3", ), ], step: None, code: CodeBlock { start: 725, code: [ Ident { expr: [ Symbol( "f", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 109, }, ], ], ), ], line: 109, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'get'", ), ], ], ), ], line: 110, }, Operator( ( "==", true, ), ), Symbol( "'xuxu'", ), ], ], ), ], line: 109, }, Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'set'", ), ], [ Symbol( "10", ), ], ], ), ], line: 110, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'get'", ), ], ], ), ], line: 111, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 111, }, ], ], ), ], line: 111, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 111, }, ], values: [ [ Symbol( "nil", ), ], ], line: 112, column: 3, }, ], end: 760, }, line: 113, column: 1, }, Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 115, }, ], [ Symbol( "4", ), ], ], ), ], line: 113, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'get'", ), ], ], ), ], line: 116, }, Operator( ( "==", true, ), ), Symbol( "'xuxu'", ), ], ], ), ], line: 115, }, Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'set'", ), ], [ Symbol( "10", ), ], ], ), ], line: 116, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Call( [ [ Symbol( "'get'", ), ], ], ), ], line: 117, }, Operator( ( "==", true, ), ), Symbol( "14", ), ], ], ), ], line: 117, }, Variable { names: [ ( "w", false, ), ], values: [], line: 120, column: 2, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "x", ], body: CodeBlock { start: 799, code: [ Return( Some( [ [ Lambda { args: [ "y", ], body: CodeBlock { start: 5, code: [ Return( Some( [ [ Lambda { args: [ "z", ], body: CodeBlock { start: 5, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "w", ), ], line: 124, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 124, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 124, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "z", ), ], line: 124, }, ], ], ), ), ], end: 14, }, line: 124, column: 14, }, ], ], ), ), ], end: 20, }, line: 125, column: 1, }, ], ], ), ), ], end: 820, }, line: 126, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "y", ), ], line: 126, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 128, }, ], ], line: 128, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "w", ), ], line: 128, }, ], values: [ [ Symbol( "1.345", ), ], ], line: 129, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "y", ), Call( [ [ Symbol( "20", ), ], ], ), Call( [ [ Symbol( "30", ), ], ], ), ], line: 130, }, Operator( ( "==", true, ), ), Symbol( "60", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "w", ), ], line: 130, }, ], ], ), ], line: 129, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 134, column: 5, }, ], ], line: 135, column: 0, }, Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 136, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 139, }, Operator( ( ">", true, ), ), Symbol( "10", ), Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 139, }, ], ), Symbol( "]", ), Call( [], ), ], line: 139, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 139, }, ], body: CodeBlock { start: 853, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 137, }, ], ], line: 137, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 138, }, ], ), Symbol( "]", ), ], line: 137, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 12, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 138, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 138, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 138, column: 6, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 138, }, ], ], ), ), ], end: 21, }, line: 138, column: 17, }, ], ], line: 138, column: 17, }, ], end: 875, }, line: 139, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "11", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), Call( [], ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), Call( [], ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 139, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 140, }, Function { local: true, name: [ Symbol( "t", ), ], args: [], body: CodeBlock { start: 922, code: [ Function { local: true, name: [ Symbol( "c", ), ], args: [ "a", "b", ], body: CodeBlock { start: 8, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 147, }, Operator( ( "==", true, ), ), Symbol( "\"test\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 147, }, Operator( ( "==", true, ), ), Symbol( "\"OK\"", ), ], ], ), ], line: 147, }, ], end: 19, }, line: 147, column: 19, }, Function { local: true, name: [ Symbol( "v", ), ], args: [ "f", "...", ], body: CodeBlock { start: 27, code: [ Ident { expr: [ Symbol( "c", ), Call( [ [ Symbol( "\"test\"", ), ], [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 148, }, Operator( ( "~=", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Symbol( "\"FAILED\"", ), Operator( ( "or", true, ), ), Symbol( "\"OK\"", ), ], ], ), ], line: 148, }, ], end: 42, }, line: 148, column: 23, }, Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 150, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "v", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 52, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 150, }, ], ], ), ), ], end: 55, }, line: 150, column: 9, }, ], ], ), ], line: 150, }, ], ], ), ), ], end: 979, }, line: 151, column: 1, }, Ident { expr: [ Symbol( "t", ), Call( [], ), ], line: 151, }, Variable { names: [ ( "f", false, ), ], values: [], line: 157, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "running", ), Call( [], ), ], line: 159, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 157, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "a", ], body: CodeBlock { start: 1000, code: [ Ident { expr: [ Symbol( "setfenv", ), Call( [ [ Symbol( "0", ), ], [ Ident { expr: [ Symbol( "a", ), ], line: 165, }, ], ], ), ], line: 165, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [], ), ], line: 166, }, ], ], ), ], line: 165, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 167, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 167, }, ], ], ), ], line: 166, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 168, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), ], line: 168, }, ], ], ), ], line: 167, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [ [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Symbol( "\"\"", ), ], ], ), ], line: 169, }, ], ], ), ], line: 169, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 169, }, ], ], ), ], line: 168, }, Return( Some( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [], ), ], line: 170, }, ], ], ), ), ], end: 1047, }, line: 171, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 171, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 173, }, ], ], ), ], line: 173, }, ], ], line: 174, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 174, column: 5, }, ], ], line: 174, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 175, }, ], ], ), ], line: 175, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), ], line: 175, }, ], ], ), ], line: 174, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 176, }, ], ], ), ], line: 176, }, ], ], line: 176, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 177, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 177, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), ], line: 177, }, ], ], ), ], line: 176, }, Function { local: true, name: [ Symbol( "eqtab", ), ], args: [ "t1", "t2", ], body: CodeBlock { start: 1094, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "t1", ), ], line: 183, }, ], ], ), ], line: 183, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "t2", ), ], line: 183, }, ], ], ), ], line: 183, }, ], ], ), ], line: 183, }, ForFuncLoop { iters: [ "i", "v", ], expr: [ Ident { expr: [ Symbol( "ipairs", ), Call( [ [ Ident { expr: [ Symbol( "t1", ), ], line: 184, }, ], ], ), ], line: 184, }, ], stop: None, initial: None, code: CodeBlock { start: 26, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t2", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 185, }, ], ), Symbol( "]", ), ], line: 185, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 185, }, ], ], ), ], line: 185, }, ], end: 36, }, line: 186, column: 1, }, ], end: 1131, }, line: 187, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 187, }, ], values: [ [ Symbol( "nil", ), ], ], line: 190, column: 0, }, Function { local: false, name: [ Symbol( "foo", ), ], args: [ "a", "...", ], body: CodeBlock { start: 1143, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "running", ), Call( [], ), ], line: 191, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "f", ), ], line: 191, }, ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 192, }, ], ], ), ], line: 192, }, Operator( ( "==", true, ), ), Symbol( "\"running\"", ), ], ], ), ], line: 191, }, Variable { names: [ ( "arg", false, ), ], values: [ [ Table { data: [ ( None, [ Symbol( "...", ), ], ), ], line: 193, column: 6, }, ], ], line: 194, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "arg", ), ], line: 194, }, ], ], ), ], line: 194, }, ], step: None, code: CodeBlock { start: 39, code: [ Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 195, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "unpack", ), Call( [ [ Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 195, }, ], ), Symbol( "]", ), ], line: 195, }, ], ], ), ], line: 195, }, ], ], ), ], line: 195, }, ], ), ], line: 195, column: 18, }, ], ], line: 195, column: 18, }, ], end: 58, }, line: 196, column: 1, }, Return( Some( [ [ Ident { expr: [ Symbol( "unpack", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 197, }, ], ], ), ], line: 197, }, ], ], ), ), ], end: 1207, }, line: 198, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 198, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 200, }, ], ], ), ], line: 200, }, ], ], line: 200, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 201, }, ], ], ), ], line: 201, }, Operator( ( "==", true, ), ), Symbol( "\"thread\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 201, }, ], ], ), ], line: 201, }, Operator( ( "==", true, ), ), Symbol( "\"suspended\"", ), ], ], ), ], line: 200, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 202, }, ], ], ), ], line: 202, }, ], [ Symbol( "\"thread\"", ), ], ], ), ], line: 202, }, ], ], ), ], line: 201, }, Variable { names: [ ( "s", false, ), ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [], line: 203, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 203, }, Ident { expr: [ Symbol( "a", ), ], line: 204, }, Ident { expr: [ Symbol( "b", ), ], line: 204, }, Ident { expr: [ Symbol( "c", ), ], line: 204, }, Ident { expr: [ Symbol( "d", ), ], line: 204, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 204, }, ], [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 204, column: 23, }, ], [ Table { data: [], line: 204, column: 26, }, ], [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ], line: 204, column: 30, }, ], [ Table { data: [ ( None, [ Symbol( "'a'", ), ], ), ( None, [ Symbol( "'b'", ), ], ), ( None, [ Symbol( "'c'", ), ], ), ], line: 204, column: 38, }, ], ], ), ], line: 204, }, ], ], line: 204, column: 39, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 205, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 205, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 205, }, ], ], ), ], line: 205, }, Operator( ( "==", true, ), ), Symbol( "\"suspended\"", ), ], ], ), ], line: 204, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 205, }, Ident { expr: [ Symbol( "a", ), ], line: 206, }, Ident { expr: [ Symbol( "b", ), ], line: 206, }, Ident { expr: [ Symbol( "c", ), ], line: 206, }, Ident { expr: [ Symbol( "d", ), ], line: 206, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 206, }, ], ], ), ], line: 206, }, ], ], line: 206, column: 16, }, Ident { expr: [ Symbol( "eqtab", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 207, }, ], [ Table { data: [], line: 207, column: 8, }, ], ], ), ], line: 206, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 208, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 208, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 208, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 207, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 208, }, Ident { expr: [ Symbol( "a", ), ], line: 209, }, Ident { expr: [ Symbol( "b", ), ], line: 209, }, Ident { expr: [ Symbol( "c", ), ], line: 209, }, Ident { expr: [ Symbol( "d", ), ], line: 209, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 209, }, ], [ Symbol( "1", ), ], [ Symbol( "2", ), ], [ Symbol( "3", ), ], ], ), ], line: 209, }, ], ], line: 209, column: 22, }, Ident { expr: [ Symbol( "eqtab", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 210, }, ], [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 210, column: 13, }, ], ], ), ], line: 209, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 211, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 211, }, Operator( ( "==", true, ), ), Symbol( "'a'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 211, }, Operator( ( "==", true, ), ), Symbol( "'b'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 211, }, Operator( ( "==", true, ), ), Symbol( "'c'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 211, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 210, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 211, }, Ident { expr: [ Symbol( "a", ), ], line: 212, }, Ident { expr: [ Symbol( "b", ), ], line: 212, }, Ident { expr: [ Symbol( "c", ), ], line: 212, }, Ident { expr: [ Symbol( "d", ), ], line: 212, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 212, }, ], [ Symbol( "\"xuxu\"", ), ], ], ), ], line: 212, }, ], ], line: 212, column: 18, }, Ident { expr: [ Symbol( "eqtab", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 213, }, ], [ Table { data: [ ( None, [ Symbol( "\"xuxu\"", ), ], ), ], line: 213, column: 9, }, ], ], ), ], line: 212, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 214, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 214, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 214, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 214, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 214, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 213, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 215, }, ], ], ), ], line: 215, }, Operator( ( "==", true, ), ), Symbol( "\"dead\"", ), ], ], ), ], line: 214, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 215, }, Ident { expr: [ Symbol( "a", ), ], line: 216, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 216, }, ], [ Symbol( "\"xuxu\"", ), ], ], ), ], line: 216, }, ], ], line: 216, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "s", ), ], line: 217, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 217, }, ], [ Symbol( "\"dead\"", ), ], ], ), ], line: 217, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 217, }, ], ], ), ], line: 217, }, Operator( ( "==", true, ), ), Symbol( "\"dead\"", ), ], ], ), ], line: 216, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "i", ], body: CodeBlock { start: 1506, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 221, }, ], ], ), ], line: 221, }, ], ], ), ), ], end: 1514, }, line: 221, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 221, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 1523, code: [ ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 7, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 224, }, ], ], ), ], line: 224, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 224, }, ], ], ), ], line: 224, }, ], end: 19, }, line: 225, column: 1, }, Return( Some( [ [ Symbol( "'a'", ), ], ], ), ), ], end: 1545, }, line: 227, column: 1, }, ], ], ), ], line: 222, }, ], ], line: 228, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1553, code: [ Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 228, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 228, }, ], ], line: 228, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 228, }, ], ], ), ], line: 228, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 228, }, ], ], ), ], line: 228, }, ], end: 1569, }, line: 228, column: 23, }, Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "x", ), ], line: 228, }, ], values: [ [ Symbol( "'xuxu'", ), ], ], line: 229, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "'xuxu'", ), ], ], ), ], line: 229, }, Operator( ( "==", true, ), ), Symbol( "'a'", ), ], ], ), ], line: 229, }, Function { local: false, name: [ Symbol( "pf", ), ], args: [ "n", "i", ], body: CodeBlock { start: 1591, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 233, }, ], ], ), ], line: 233, }, Ident { expr: [ Symbol( "pf", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 234, }, Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 234, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 234, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 233, }, ], end: 1608, }, line: 235, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 235, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "pf", ), ], line: 237, }, ], ], ), ], line: 237, }, ], ], line: 238, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 239, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 1627, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "1", ), ], [ Symbol( "1", ), ], ], ), ], line: 240, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "s", ), ], line: 240, }, ], ], ), ], line: 240, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 240, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 241, }, Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 241, }, ], ], line: 241, column: 5, }, ], end: 1644, }, line: 242, column: 1, }, Function { local: false, name: [ Symbol( "gen", ), ], args: [ "n", ], body: CodeBlock { start: 1649, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 8, code: [ ForLoop { iter: "i", start: [ Symbol( "2", ), ], end: [ Ident { expr: [ Symbol( "n", ), ], line: 247, }, ], step: None, code: CodeBlock { start: 7, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 247, }, ], ], ), ], line: 247, }, ], end: 14, }, line: 247, column: 14, }, ], end: 23, }, line: 248, column: 1, }, ], ], ), ], line: 246, }, ], ], ), ), ], end: 1674, }, line: 249, column: 1, }, Function { local: false, name: [ Symbol( "filter", ), ], args: [ "p", "g", ], body: CodeBlock { start: 1681, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 8, code: [ WhileLoop { condition: [ Symbol( "1", ), ], body: CodeBlock { start: 3, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "g", ), Call( [], ), ], line: 255, }, ], ], line: 256, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 256, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 11, code: [ Return( None, ), ], end: 13, }, next: None, line: 256, column: 7, }, IfStatement { condition: [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "mod", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 257, }, ], [ Ident { expr: [ Symbol( "p", ), ], line: 257, }, ], ], ), ], line: 257, }, Operator( ( "~=", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 25, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 257, }, ], ], ), ], line: 257, }, ], end: 32, }, next: None, line: 257, column: 19, }, ], end: 36, }, line: 258, column: 1, }, ], end: 45, }, line: 259, column: 1, }, ], ], ), ], line: 253, }, ], ], ), ), ], end: 1728, }, line: 260, column: 1, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "gen", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 262, }, ], ], line: 263, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 263, column: 5, }, ], ], line: 264, column: 0, }, WhileLoop { condition: [ Symbol( "1", ), ], body: CodeBlock { start: 1743, code: [ Variable { names: [ ( "n", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), Call( [], ), ], line: 265, }, ], ], line: 266, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "n", ), ], line: 266, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 11, code: [ Break, ], end: 13, }, next: None, line: 266, column: 7, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "insert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 267, }, ], [ Ident { expr: [ Symbol( "n", ), ], line: 267, }, ], ], ), ], line: 266, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 267, }, ], values: [ [ Ident { expr: [ Symbol( "filter", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 268, }, ], [ Ident { expr: [ Symbol( "x", ), ], line: 268, }, ], ], ), ], line: 268, }, ], ], line: 268, column: 8, }, ], end: 1773, }, line: 269, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 271, }, ], ], ), ], line: 271, }, Operator( ( "==", true, ), ), Symbol( "25", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 271, }, ], ], ), ], line: 271, }, ], ), Symbol( "]", ), ], line: 271, }, Operator( ( "==", true, ), ), Symbol( "97", ), ], ], ), ], line: 269, }, Function { local: false, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 1800, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "1", ), ], ], ), Symbol( ".", ), Symbol( "currentline", ), ], line: 276, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 276, }, ], ], ), Symbol( ".", ), Symbol( "linedefined", ), ], line: 276, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 276, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "currentline", ), ], line: 277, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Ident { expr: [ Symbol( "goo", ), ], line: 277, }, ], ], ), Symbol( ".", ), Symbol( "linedefined", ), ], line: 277, }, ], ], ), ], line: 276, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "3", ), ], ], ), ], line: 277, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 279, }, ], ], ), ], line: 278, }, ], end: 1853, }, line: 280, column: 1, }, Function { local: false, name: [ Symbol( "goo", ), ], args: [], body: CodeBlock { start: 1857, code: [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 282, }, ], end: 1861, }, line: 282, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 282, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "goo", ), ], line: 283, }, ], ], ), ], line: 283, }, ], ], line: 283, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), Call( [], ), ], line: 284, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], ], ), ], line: 283, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 285, }, ], ], ), ], line: 285, }, ], ], line: 285, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 286, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 286, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "foo", ), ], line: 286, }, ], ], ), ], line: 285, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 286, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "goo", ), ], line: 288, }, ], ], ), ], line: 288, }, ], ], line: 288, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 288, }, Ident { expr: [ Symbol( "b", ), ], line: 289, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 289, }, ], ], ), ], line: 289, }, ], ], line: 289, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 290, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 290, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], ], ), ], line: 289, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 290, }, Ident { expr: [ Symbol( "b", ), ], line: 291, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 291, }, ], ], ), ], line: 291, }, ], ], line: 291, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 292, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 292, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "foo", ), ], line: 292, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 292, }, ], ], ), ], line: 292, }, Operator( ( "==", true, ), ), Symbol( "\"dead\"", ), ], ], ), ], line: 291, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 292, }, Ident { expr: [ Symbol( "b", ), ], line: 293, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 293, }, ], ], ), ], line: 293, }, ], ], line: 293, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 294, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 294, }, ], [ Symbol( "\"dead\"", ), ], ], ), ], line: 294, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "status", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 294, }, ], ], ), ], line: 294, }, Operator( ( "==", true, ), ), Symbol( "\"dead\"", ), ], ], ), ], line: 293, }, Function { local: false, name: [ Symbol( "all", ), ], args: [ "a", "n", "k", ], body: CodeBlock { start: 1991, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "k", ), ], line: 299, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 5, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 299, }, ], ], ), ], line: 299, }, ], end: 12, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 12, code: [ ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "n", ), ], line: 301, }, ], step: None, code: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 302, }, ], ), Symbol( "]", ), ], line: 302, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 302, }, ], ], line: 302, column: 6, }, Ident { expr: [ Symbol( "all", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 303, }, ], [ Ident { expr: [ Symbol( "n", ), ], line: 303, }, ], [ Ident { expr: [ Symbol( "k", ), ], line: 303, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], ), ], line: 302, }, ], end: 24, }, line: 304, column: 1, }, ], end: 37, }, next: None, line: 305, column: 1, }, ), line: 305, column: 1, }, ], end: 2029, }, line: 306, column: 1, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 309, column: 0, }, ForFuncLoop { iters: [ "t", ], expr: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2043, code: [ Ident { expr: [ Symbol( "all", ), Call( [ [ Table { data: [], line: 309, column: 4, }, ], [ Symbol( "5", ), ], [ Symbol( "4", ), ], ], ), ], line: 309, }, ], end: 2053, }, line: 309, column: 20, }, ], ], ), ], line: 309, }, ], stop: None, initial: None, code: CodeBlock { start: 2055, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 310, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 310, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 310, column: 5, }, ], end: 2061, }, line: 311, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 312, }, Operator( ( "==", true, ), ), Symbol( "5", ), Operator( ( "^", true, ), ), Symbol( "4", ), ], ], ), ], line: 311, }, Variable { names: [ ( "C", false, ), ], values: [ [ Table { data: [], line: 316, column: 5, }, ], ], line: 316, column: 6, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "C", ), ], line: 316, }, ], [ Table { data: [ ( Some( [ Symbol( "__mode", ), ], ), [ Symbol( "\"kv\"", ), ], ), ], line: 316, column: 15, }, ], ], ), ], line: 316, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2095, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 319, column: 0, }, Function { local: true, name: [ Symbol( "f", ), ], args: [], body: CodeBlock { start: 9, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 319, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 319, }, Operator( ( "+", true, ), ), Symbol( "10", ), ], ], line: 319, column: 6, }, Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 319, }, ], ], ), ), ], end: 18, }, line: 319, column: 14, }, WhileLoop { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 21, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 321, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 321, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 321, column: 5, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 322, }, ], ], ), ], line: 321, }, ], end: 33, }, line: 323, column: 1, }, ], end: 2129, }, line: 324, column: 1, }, ], ], ), ], line: 317, }, ], ], line: 324, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "C", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 324, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 326, }, ], ], line: 326, column: 7, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), Call( [], ), ], line: 328, }, ], ], line: 328, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 329, }, Operator( ( "==", true, ), ), Symbol( "21", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), Call( [], ), Call( [], ), ], line: 329, }, Operator( ( "==", true, ), ), Symbol( "32", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), Call( [], ), ], line: 329, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "f", ), ], line: 329, }, ], ], ), ], line: 328, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 329, }, ], values: [ [ Symbol( "nil", ), ], ], line: 330, column: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 330, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "C", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 332, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 331, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 333, }, Operator( ( "==", true, ), ), Symbol( "43", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 333, }, Operator( ( "==", true, ), ), Symbol( "53", ), ], ], ), ], line: 332, }, Function { local: false, name: [ Symbol( "co_func", ), ], args: [ "current_co", ], body: CodeBlock { start: 2199, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "running", ), Call( [], ), ], line: 339, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "current_co", ), ], line: 339, }, ], ], ), ], line: 339, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "current_co", ), ], line: 340, }, ], ], ), ], line: 340, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 339, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "current_co", ), ], line: 341, }, ], ], ), ], line: 341, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 340, }, Return( Some( [ [ Symbol( "10", ), ], ], ), ), ], end: 2234, }, line: 343, column: 1, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "co_func", ), ], line: 345, }, ], ], ), ], line: 345, }, ], ], line: 346, column: 0, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 346, }, ], [ Ident { expr: [ Symbol( "co", ), ], line: 346, }, ], ], ), ], line: 346, }, ], ], line: 346, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 347, }, Operator( ( "==", true, ), ), Symbol( "true", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 347, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 346, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 348, }, ], [ Ident { expr: [ Symbol( "co", ), ], line: 348, }, ], ], ), ], line: 348, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 347, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 349, }, ], [ Ident { expr: [ Symbol( "co", ), ], line: 349, }, ], ], ), ], line: 349, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 348, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2302, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 353, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "f", ), ], line: 353, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 354, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 354, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 354, column: 6, }, Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 354, }, ], ], ), ), ], end: 20, }, line: 354, column: 16, }, ], ], line: 354, column: 16, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "'x'", ), ], ], ), ], line: 354, }, ], end: 2327, }, line: 356, column: 1, }, ], ], ), ], line: 352, }, ], ], line: 356, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 358, }, ], ], ), ], line: 358, }, ], ], ), ], line: 356, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 360, }, ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], ], ), ], line: 360, }, ], ], ), ], line: 358, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "f", ), Call( [], ), ], line: 361, }, Operator( ( "==", true, ), ), Symbol( "11", ), ], ], ), ], line: 360, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "f", ), Call( [], ), ], line: 362, }, Operator( ( "==", true, ), ), Symbol( "12", ), ], ], ), ], line: 361, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "T", ), ], line: 365, }, ], body: CodeBlock { start: 2386, code: [ Expr( [ Ident { expr: [ Symbol( "Message", ), ], line: 366, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "print", ), ], line: 366, }, ], ), Ident { expr: [ Call( [ [ Symbol( "'\\a\\n >>> testC not active: skipping yield/hook tests <<<\\n\\a'", ), ], ], ), ], line: 366, }, ], end: 2395, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 2395, code: [ Variable { names: [ ( "turn", false, ), ], values: [], line: 369, column: 2, }, Function { local: false, name: [ Symbol( "fact", ), ], args: [ "t", "x", ], body: CodeBlock { start: 9, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "turn", ), ], line: 372, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 372, }, ], ], ), ], line: 372, }, IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 373, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 11, code: [ Return( Some( [ [ Symbol( "1", ), ], ], ), ), ], end: 14, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 14, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 374, }, Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "fact", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 374, }, ], [ Ident { expr: [ Symbol( "x", ), ], line: 374, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], ), ], line: 374, }, ], ], ), ), ], end: 26, }, next: None, line: 375, column: 1, }, ), line: 375, column: 1, }, ], end: 36, }, line: 376, column: 1, }, Variable { names: [ ( "A", false, ), ( "B", false, ), ( "a", false, ), ( "b", false, ), ], values: [ [ Symbol( "0", ), ], [ Symbol( "0", ), ], [ Symbol( "0", ), ], [ Symbol( "0", ), ], ], line: 380, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 62, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "setyhook", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "2", ), ], ], ), ], line: 381, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 381, }, ], values: [ [ Ident { expr: [ Symbol( "fact", ), Call( [ [ Symbol( "\"A\"", ), ], [ Symbol( "10", ), ], ], ), ], line: 382, }, ], ], line: 382, column: 8, }, ], end: 79, }, line: 383, column: 1, }, ], ], ), ], line: 380, }, ], ], line: 385, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 90, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "setyhook", ), Call( [ [ Symbol( "\"\"", ), ], [ Symbol( "3", ), ], ], ), ], line: 386, }, Alter { names: [ Ident { expr: [ Symbol( "B", ), ], line: 386, }, ], values: [ [ Ident { expr: [ Symbol( "fact", ), Call( [ [ Symbol( "\"B\"", ), ], [ Symbol( "11", ), ], ], ), ], line: 387, }, ], ], line: 387, column: 8, }, ], end: 107, }, line: 388, column: 1, }, ], ], ), ], line: 385, }, ], ], line: 390, column: 0, }, WhileLoop { condition: [ Ident { expr: [ Symbol( "A", ), ], line: 390, }, Operator( ( "==", true, ), ), Symbol( "0", ), Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "B", ), ], line: 390, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 117, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "A", ), ], line: 391, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "turn", ), ], line: 391, }, ], values: [ [ Symbol( "\"A\"", ), ], ], line: 391, column: 4, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 391, }, ], ], ), ], line: 391, }, ], end: 16, }, next: None, line: 391, column: 16, }, IfStatement { condition: [ Ident { expr: [ Symbol( "B", ), ], line: 392, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 21, code: [ Alter { names: [ Ident { expr: [ Symbol( "turn", ), ], line: 392, }, ], values: [ [ Symbol( "\"B\"", ), ], ], line: 392, column: 4, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 392, }, ], ], ), ], line: 392, }, ], end: 32, }, next: None, line: 392, column: 16, }, ], end: 150, }, line: 393, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "B", ), ], line: 395, }, Operator( ( "/", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 395, }, Operator( ( "==", true, ), ), Symbol( "11", ), ], ], ), ], line: 393, }, ], end: 2554, }, next: None, line: 396, column: 1, }, ), line: 396, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "_X", ), ], line: 396, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2563, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 402, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Lambda { args: [], body: CodeBlock { start: 10, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 402, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 402, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 402, column: 5, }, ], end: 16, }, line: 402, column: 12, }, ], ], line: 402, column: 12, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [], ), ], line: 402, }, ], end: 2585, }, line: 404, column: 1, }, ], ], ), ], line: 400, }, ], ], line: 404, column: 2, }, Ident { expr: [ Symbol( "_X", ), Call( [], ), ], line: 404, }, Alter { names: [ Ident { expr: [ Symbol( "co", ), ], line: 406, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2598, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "getfenv", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 411, }, ], ], ), ], line: 411, }, Return( Some( [ [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Symbol( "\"return a\"", ), ], ], ), Call( [], ), ], line: 412, }, ], ], ), ), ], end: 2615, }, line: 413, column: 1, }, ], ], ), ], line: 410, }, ], ], line: 413, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 413, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "a", ), ], ), [ Symbol( "15", ), ], ), ], line: 415, column: 7, }, ], ], line: 415, column: 7, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setfenv", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 416, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 416, }, ], ], ), ], line: 415, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getfenv", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 417, }, ], ], ), ], line: 417, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 417, }, ], ], ), ], line: 416, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "select", ), Call( [ [ Symbol( "2", ), ], [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 418, }, ], ], ), ], line: 418, }, ], ], ), ], line: 418, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 418, }, ], ], ), ], line: 417, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "select", ), Call( [ [ Symbol( "2", ), ], [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 419, }, ], ], ), ], line: 419, }, ], ], ), ], line: 419, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "a", ), ], line: 419, }, ], ], ), ], line: 418, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 419, }, ]