--- source: src/main.rs expression: parsed input_file: test-data/lua5.4-tests/locals.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing local variables and environments'", ), ], ], ), ], line: 4, }, Variable { names: [ ( "debug", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "\"debug\"", ), ], ], ), ], line: 6, }, ], ], line: 8, column: 0, }, Variable { names: [ ( "tracegc", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "\"tracegc\"", ), ], ], ), ], line: 8, }, ], ], line: 13, column: 0, }, Function { local: true, name: [ Symbol( "f", ), ], args: [ "x", ], body: CodeBlock { start: 20, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 14, }, ], values: [ [ Symbol( "nil", ), ], ], line: 14, column: 4, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 14, }, ], ], ), ), ], end: 27, }, line: 15, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 16, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 15, }, Function { local: true, name: [ Symbol( "f", ), ], args: [], body: CodeBlock { start: 41, code: [ Variable { names: [ ( "x", false, ), ], values: [], line: 19, column: 3, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 19, }, ], ], ), ), ], end: 47, }, line: 20, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 21, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 20, }, Function { local: true, name: [ Symbol( "f", ), ], args: [ "x", ], body: CodeBlock { start: 62, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 24, }, ], values: [ [ Symbol( "nil", ), ], ], line: 24, column: 4, }, Variable { names: [ ( "y", false, ), ], values: [], line: 24, column: 7, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 24, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 24, }, ], ], ), ), ], end: 74, }, line: 25, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 26, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "select", ), Call( [ [ Symbol( "2", ), ], [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "20", ), ], ], ), ], line: 26, }, ], ], ), ], line: 26, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 25, }, DoBlock( CodeBlock { start: 96, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 30, column: 0, }, DoBlock( CodeBlock { start: 5, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "100", ), ], ], line: 31, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 31, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 31, }, ], end: 17, }, ), DoBlock( CodeBlock { start: 18, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1000", ), ], ], line: 34, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 34, }, Operator( ( "==", true, ), ), Symbol( "1000", ), ], ], ), ], line: 34, }, ], end: 30, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 36, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 35, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 37, }, Operator( ( "~=", true, ), ), Symbol( "10", ), ], body: CodeBlock { start: 41, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "20", ), ], ], line: 38, column: 4, }, ], end: 46, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 46, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "30", ), ], ], line: 40, column: 4, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 41, }, Operator( ( "==", true, ), ), Symbol( "30", ), ], ], ), ], line: 40, }, ], end: 57, }, next: None, line: 42, column: 1, }, ), line: 42, column: 1, }, ], end: 154, }, ), Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 43, }, ], values: [ [ Symbol( "nil", ), ], ], line: 49, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [], line: 49, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 49, }, ], values: [ [ Symbol( "1", ), ], ], line: 50, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 50, }, ], values: [ [ Symbol( "nil", ), ], ], line: 52, column: 3, }, Ident { expr: [ Symbol( "load", ), Call( [ [ Symbol( "'local a = {}'", ), ], ], ), Call( [], ), ], line: 52, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 54, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 53, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "a", ], body: CodeBlock { start: 182, code: [ Variable { names: [ ( "_1", false, ), ( "_2", false, ), ( "_3", false, ), ( "_4", false, ), ( "_5", false, ), ], values: [], line: 57, column: 10, }, Variable { names: [ ( "_6", false, ), ( "_7", false, ), ( "_8", false, ), ( "_9", false, ), ( "_10", false, ), ], values: [], line: 58, column: 10, }, Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "3", ), ], ], line: 60, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 60, }, ], ], line: 61, column: 0, }, Variable { names: [ ( "c", false, ), ( "d", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 61, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 61, }, ], ], line: 62, column: 0, }, IfStatement { condition: [ Expr( [ Ident { expr: [ Symbol( "d", ), ], line: 62, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 62, }, ], ), Ident { expr: [], line: 62, }, ], body: CodeBlock { start: 43, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "'q'", ), ], ], line: 63, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 63, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), ], line: 64, }, ], ], line: 64, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 65, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], ], ), ], line: 64, }, ], end: 57, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 57, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 67, }, ], end: 62, }, next: None, line: 68, column: 1, }, ), line: 68, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 69, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], ], ), ], line: 68, }, Variable { names: [ ( "f", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 70, column: 4, }, ], end: 255, }, line: 71, column: 1, }, Variable { names: [ ( "b", false, ), ], values: [ [ Symbol( "10", ), ], ], line: 74, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [], line: 74, column: 3, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 76, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 76, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], body: CodeBlock { start: 263, code: [ Variable { names: [ ( "b", false, ), ], values: [], line: 75, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 75, }, Ident { expr: [ Symbol( "b", ), ], line: 75, }, ], values: [ [ Symbol( "1", ), ], [ Symbol( "2", ), ], ], line: 75, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 75, }, Operator( ( "+", true, ), ), Symbol( "1", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 75, }, ], ], ), ], line: 75, }, ], end: 284, }, line: 76, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 79, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 76, }, Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 79, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 82, }, ], ], ), ], line: 82, }, Operator( ( "==", true, ), ), Symbol( "'function'", ), ], ], ), ], line: 81, }, Function { local: true, name: [ Symbol( "getenv", ), ], args: [ "f", ], body: CodeBlock { start: 314, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getupvalue", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 86, }, ], [ Symbol( "1", ), ], ], ), ], line: 86, }, ], ], line: 86, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 87, }, Operator( ( "==", true, ), ), Symbol( "'_ENV'", ), ], ], ), ], line: 86, }, Return( Some( [ [ Ident { expr: [ Symbol( "b", ), ], line: 88, }, ], ], ), ), ], end: 336, }, line: 89, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getenv", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Symbol( "\"a=3\"", ), ], ], ), ], line: 92, }, ], ], ), ], line: 92, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), ], line: 92, }, ], ], ), ], line: 89, }, Variable { names: [ ( "c", false, ), ], values: [ [ Table { data: [], line: 93, column: 5, }, ], ], line: 93, column: 6, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Symbol( "\"a = 3\"", ), ], [ Symbol( "nil", ), ], [ Symbol( "nil", ), ], [ Ident { expr: [ Symbol( "c", ), ], line: 93, }, ], ], ), ], line: 93, }, ], ], line: 93, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getenv", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 94, }, ], ], ), ], line: 94, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 94, }, ], ], ), ], line: 93, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), Symbol( ".", ), Symbol( "a", ), ], line: 95, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 94, }, Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 95, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), Symbol( ".", ), Symbol( "a", ), ], line: 97, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], ], ), ], line: 96, }, DoBlock( CodeBlock { start: 394, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "2", ), ], ], line: 102, column: 0, }, Variable { names: [ ( "p", false, ), ], values: [ [ Symbol( "4", ), ], ], line: 103, column: 0, }, RepeatLoop { condition: [ Ident { expr: [ Symbol( "p", ), ], line: 116, }, Operator( ( "<=", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 9, code: [ ForLoop { iter: "j", start: [ Operator( ( "-", false, ), ), Symbol( "3", ), ], end: [ Symbol( "3", ), ], step: None, code: CodeBlock { start: 8, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ MultilineString( "[[local a=%s;\n a=a+%s;\n assert(a ==2^%s)]]", ), ], [ Ident { expr: [ Symbol( "j", ), ], line: 107, }, ], [ Ident { expr: [ Symbol( "p", ), ], line: 107, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "j", ), ], line: 107, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 107, }, ], ], ), ], line: 105, }, ], [ Symbol( "''", ), ], ], ), ], line: 105, }, ], ], ), Call( [], ), ], line: 105, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ MultilineString( "[[local a=%s;\n a=a-%s;\n assert(a==-2^%s)]]", ), ], [ Operator( ( "-", false, ), ), Ident { expr: [ Symbol( "j", ), ], line: 110, }, ], [ Ident { expr: [ Symbol( "p", ), ], line: 110, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "j", ), ], line: 110, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 110, }, ], ], ), ], line: 108, }, ], [ Symbol( "''", ), ], ], ), ], line: 108, }, ], ], ), Call( [], ), ], line: 107, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ MultilineString( "[[local a,b=0,%s;\n a=b-%s;\n assert(a==-2^%s)]]", ), ], [ Operator( ( "-", false, ), ), Ident { expr: [ Symbol( "j", ), ], line: 113, }, ], [ Ident { expr: [ Symbol( "p", ), ], line: 113, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "j", ), ], line: 113, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 113, }, ], ], ), ], line: 111, }, ], [ Symbol( "''", ), ], ], ), ], line: 111, }, ], ], ), Call( [], ), ], line: 110, }, ], end: 83, }, line: 114, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "p", ), ], line: 114, }, ], values: [ [ Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "p", ), ], line: 115, }, ], ], line: 115, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 115, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 115, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 115, column: 11, }, ], end: 104, }, line: 116, column: 4, }, ], end: 502, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 117, }, IfStatement { condition: [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 122, }, ], [ Symbol( "\"T\"", ), ], ], ), ], line: 122, }, ], body: CodeBlock { start: 512, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 124, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( Some( [ Table { data: [], line: 126, column: 3, }, ], ), [ Symbol( "4", ), ], ), ( Some( [ Symbol( "3", ), ], ), [ Symbol( "0", ), ], ), ( Some( [ Symbol( "alo", ), ], ), [ Symbol( "1", ), ], ), ( Some( [ Symbol( "a1234567890123456789012345678901234567890", ), ], ), [ Symbol( "10", ), ], ), ], line: 130, column: 1, }, ], ], line: 132, column: 0, }, Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "querytab", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 132, }, ], ], ), ], line: 132, }, ], ], line: 134, column: 0, }, ForFuncLoop { iters: [ "k", "_", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 134, }, ], ], ), ], line: 134, }, ], stop: None, initial: None, code: CodeBlock { start: 48, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 134, }, ], ), Symbol( "]", ), ], line: 134, }, ], values: [ [ Ident { expr: [ Symbol( "undef", ), ], line: 134, }, ], ], line: 134, column: 6, }, ], end: 55, }, line: 134, column: 17, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 134, }, ForLoop { iter: "i", start: [ Symbol( "0", ), ], end: [ Ident { expr: [ Symbol( "t", ), ], line: 136, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], step: None, code: CodeBlock { start: 67, code: [ Variable { names: [ ( "k", false, ), ], values: [ [ Ident { expr: [ Symbol( "querytab", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 137, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 137, }, ], ], ), ], line: 137, }, ], ], line: 137, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 138, }, ], ], ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "'number'", ), Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "k", ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "'alo'", ), ], ], ), ], line: 137, }, ], end: 94, }, line: 139, column: 1, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 142, column: 5, }, ], ], line: 143, column: 0, }, Function { local: true, name: [ Symbol( "additems", ), ], args: [], body: CodeBlock { start: 104, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 144, }, ], values: [ [ Symbol( "true", ), ], ], line: 144, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "y", ), ], line: 144, }, ], values: [ [ Symbol( "true", ), ], ], line: 144, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "z", ), ], line: 144, }, ], values: [ [ Symbol( "true", ), ], ], line: 144, column: 17, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 144, }, ], values: [ [ Symbol( "true", ), ], ], line: 145, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 145, }, ], values: [ [ Symbol( "true", ), ], ], line: 146, column: 6, }, ], end: 134, }, line: 147, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "huge", ), ], line: 148, }, ], step: None, code: CodeBlock { start: 143, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 149, }, ], ], ), ], line: 149, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "additems", ), ], line: 150, }, ], ], ), ], line: 150, }, ], ], line: 150, column: 9, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [], ), ], line: 150, }, Variable { names: [ ( "count", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 153, column: 0, }, ForFuncLoop { iters: [ "k", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 153, }, ], ], ), ], line: 153, }, ], stop: None, initial: None, code: CodeBlock { start: 34, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 154, }, ], ), Symbol( "]", ), ], line: 154, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 154, }, ], ], ), ], line: 154, }, Alter { names: [ Ident { expr: [ Symbol( "count", ), ], line: 154, }, ], values: [ [ Ident { expr: [ Symbol( "count", ), ], line: 155, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 155, column: 5, }, ], end: 49, }, line: 156, column: 1, }, IfStatement { condition: [ Ident { expr: [ Symbol( "st", ), ], line: 157, }, ], body: CodeBlock { start: 52, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "count", ), ], line: 158, }, Operator( ( "==", true, ), ), Symbol( "5", ), ], ], ), ], line: 158, }, Break, ], end: 61, }, next: None, line: 159, column: 1, }, ], end: 205, }, line: 160, column: 1, }, ], end: 718, }, next: None, line: 161, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_ENV", ), ], line: 166, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "_G", ), ], line: 166, }, ], ], ), ], line: 161, }, DoBlock( CodeBlock { start: 725, code: [ Variable { names: [ ( "dummy", false, ), ], values: [], line: 169, column: 2, }, Variable { names: [ ( "_ENV", false, ), ], values: [ [ Expr( [ Lambda { args: [ "...", ], body: CodeBlock { start: 10, code: [ Return( Some( [ [ Symbol( "...", ), ], ], ), ), ], end: 13, }, line: 170, column: 11, }, ], ), Ident { expr: [ Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 170, }, ], [ Ident { expr: [ Symbol( "dummy", ), ], line: 170, }, ], ], ), ], line: 170, }, ], ], line: 172, column: 0, }, DoBlock( CodeBlock { start: 20, code: [ Variable { names: [ ( "_ENV", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "assert", ), ], ), [ Ident { expr: [ Symbol( "assert", ), ], line: 173, }, ], ), ], line: 173, column: 8, }, ], ], line: 173, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 173, }, ], end: 34, }, ), Alter { names: [ Ident { expr: [ Symbol( "mt", ), ], line: 174, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "_G", ), ], ), [ Ident { expr: [ Symbol( "_G", ), ], line: 175, }, ], ), ], line: 175, column: 7, }, ], ], line: 176, column: 0, }, Variable { names: [ ( "foo", false, ), ( "x", false, ), ], values: [], line: 176, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 176, }, ], values: [ [ Symbol( "false", ), ], ], line: 178, column: 0, }, DoBlock( CodeBlock { start: 49, code: [ Variable { names: [ ( "_ENV", false, ), ], values: [ [ Ident { expr: [ Symbol( "mt", ), ], line: 179, }, ], ], line: 180, column: 0, }, Function { local: false, name: [ Symbol( "foo", ), ], args: [ "x", ], body: CodeBlock { start: 9, code: [ Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 181, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 181, }, ], ], line: 182, column: 0, }, DoBlock( CodeBlock { start: 4, code: [ Variable { names: [ ( "_ENV", false, ), ], values: [ [ Ident { expr: [ Symbol( "_G", ), ], line: 183, }, ], ], line: 183, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 183, }, ], values: [ [ Symbol( "1000", ), ], ], line: 183, column: 8, }, ], end: 13, }, ), Return( Some( [ [ Lambda { args: [ "x", ], body: CodeBlock { start: 18, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "A", ), ], line: 185, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 185, }, ], ], ), ), ], end: 23, }, line: 185, column: 10, }, ], ], ), ), ], end: 33, }, line: 186, column: 1, }, ], end: 83, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getenv", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 188, }, ], ], ), ], line: 188, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "mt", ), ], line: 188, }, ], ], ), ], line: 187, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 188, }, ], values: [ [ Ident { expr: [ Symbol( "foo", ), Call( [ [ Symbol( "'hi'", ), ], ], ), ], line: 189, }, ], ], line: 189, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "mt", ), Symbol( ".", ), Symbol( "A", ), ], line: 189, }, Operator( ( "==", true, ), ), Symbol( "'hi'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "A", ), ], line: 189, }, Operator( ( "==", true, ), ), Symbol( "1000", ), ], ], ), ], line: 189, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), Call( [ [ Symbol( "'*'", ), ], ], ), ], line: 190, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "mt", ), Symbol( ".", ), Symbol( "A", ), ], line: 190, }, Operator( ( "..", true, ), ), Symbol( "'*'", ), ], ], ), ], line: 189, }, DoBlock( CodeBlock { start: 125, code: [ Variable { names: [ ( "_ENV", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "assert", ), ], ), [ Ident { expr: [ Symbol( "assert", ), ], line: 193, }, ], ), ( Some( [ Symbol( "A", ), ], ), [ Symbol( "10", ), ], ), ], line: 193, column: 12, }, ], ], line: 193, column: 13, }, DoBlock( CodeBlock { start: 14, code: [ Variable { names: [ ( "_ENV", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "assert", ), ], ), [ Ident { expr: [ Symbol( "assert", ), ], line: 195, }, ], ), ( Some( [ Symbol( "A", ), ], ), [ Symbol( "20", ), ], ), ], line: 195, column: 12, }, ], ], line: 195, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "A", ), ], line: 196, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 195, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 196, }, ], values: [ [ Ident { expr: [ Symbol( "A", ), ], line: 196, }, ], ], line: 196, column: 10, }, ], end: 38, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "A", ), ], line: 198, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 198, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 197, }, ], end: 174, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 200, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 199, }, DoBlock( CodeBlock { start: 181, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ], values: [ [ Symbol( "10", ), ], [ Symbol( "20", ), ], [ Symbol( "30", ), ], ], line: 204, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 204, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 205, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 205, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 205, }, ], ], line: 205, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 206, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 206, }, Operator( ( "==", true, ), ), Symbol( "60", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 206, }, Operator( ( "==", true, ), ), Symbol( "30", ), ], ], ), ], line: 205, }, Function { local: true, name: [ Symbol( "checkro", ), ], args: [ "name", "code", ], body: CodeBlock { start: 47, code: [ Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "code", ), ], line: 208, }, ], ], ), ], line: 208, }, ], ], line: 209, column: 0, }, Variable { names: [ ( "gab", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"attempt to assign to const variable '%s'\"", ), ], [ Ident { expr: [ Symbol( "name", ), ], line: 209, }, ], ], ), ], line: 209, }, ], ], line: 209, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 210, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 210, }, ], [ Ident { expr: [ Symbol( "gab", ), ], line: 210, }, ], ], ), ], line: 210, }, ], ], ), ], line: 209, }, ], end: 82, }, line: 211, column: 1, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"y\"", ), ], [ Symbol( "\"local x, y , z = 10, 20, 30; x = 11; y = 12\"", ), ], ], ), ], line: 211, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"x\"", ), ], [ Symbol( "\"local x , y, z = 10, 20, 30; x = 11\"", ), ], ], ), ], line: 212, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"z\"", ), ], [ Symbol( "\"local x , y, z = 10, 20, 30; y = 10; z = 11\"", ), ], ], ), ], line: 213, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"foo\"", ), ], [ Symbol( "\"local foo = 10; function foo() end\"", ), ], ], ), ], line: 214, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"foo\"", ), ], [ Symbol( "\"local foo = {}; function foo() end\"", ), ], ], ), ], line: 215, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"z\"", ), ], [ MultilineString( "[[\n local a, z , b = 10;\n function foo() a = 20; z = 32; end\n ]]", ), ], ], ), ], line: 216, }, Ident { expr: [ Symbol( "checkro", ), Call( [ [ Symbol( "\"var1\"", ), ], [ MultilineString( "[[\n local a, var1 = 10;\n function foo() a = 20; z = function () var1 = 12; end end\n ]]", ), ], ], ), ], line: 221, }, ], end: 306, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing to-be-closed variables\"", ), ], ], ), ], line: 227, }, Function { local: true, name: [ Symbol( "stack", ), ], args: [ "n", ], body: CodeBlock { start: 314, code: [ Alter { names: [ Ident { expr: [ Symbol( "n", ), ], line: 232, }, ], values: [ [ Expr( [ Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 232, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ), Ident { expr: [], line: 232, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "stack", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 232, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], ), ], line: 232, }, ], ), Ident { expr: [], line: 232, }, ], ], line: 232, column: 16, }, ], end: 331, }, line: 232, column: 23, }, Function { local: true, name: [ Symbol( "func2close", ), ], args: [ "f", "x", "y", ], body: CodeBlock { start: 341, code: [ Variable { names: [ ( "obj", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 235, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Ident { expr: [ Symbol( "f", ), ], line: 235, }, ], ), ], line: 235, column: 13, }, ], ], ), ], line: 235, }, ], ], line: 236, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 236, }, ], body: CodeBlock { start: 17, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 237, }, ], [ Ident { expr: [ Symbol( "obj", ), ], line: 237, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 237, }, ], ], ), ), ], end: 24, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 24, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "obj", ), ], line: 239, }, ], ], ), ), ], end: 27, }, next: None, line: 240, column: 1, }, ), line: 240, column: 1, }, ], end: 369, }, line: 241, column: 1, }, DoBlock( CodeBlock { start: 370, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 245, column: 5, }, ], ], line: 246, column: 0, }, DoBlock( CodeBlock { start: 6, code: [ Variable { names: [ ( "b", true, ), ], values: [ [ Symbol( "false", ), ], ], line: 248, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( None, [ Symbol( "\"x\"", ), ], ), ], line: 248, column: 11, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Lambda { args: [ "self", ], body: CodeBlock { start: 26, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 250, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 250, }, ], values: [ [ Ident { expr: [ Symbol( "self", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 250, }, ], ], line: 250, column: 12, }, ], end: 39, }, line: 251, column: 1, }, ], ), ], line: 252, column: 1, }, ], ], ), ], line: 248, }, ], ], line: 253, column: 0, }, Variable { names: [ ( "w", false, ), ( "y", true, ), ( "z", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "err", ], body: CodeBlock { start: 59, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "err", ), ], line: 254, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 254, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 254, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 254, }, ], values: [ [ Symbol( "\"y\"", ), ], ], line: 254, column: 16, }, ], end: 76, }, line: 255, column: 1, }, ], [ Symbol( "10", ), ], [ Symbol( "20", ), ], ], ), ], line: 253, }, ], ], line: 256, column: 0, }, Variable { names: [ ( "c", true, ), ], values: [ [ Symbol( "nil", ), ], ], line: 256, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 257, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 256, }, ], values: [ [ Symbol( "\"in\"", ), ], ], line: 257, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "w", ), ], line: 258, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "z", ), ], line: 258, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 257, }, ], end: 114, }, ), Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 260, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 259, }, ], values: [ [ Symbol( "\"out\"", ), ], ], line: 260, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 261, }, Operator( ( "==", true, ), ), Symbol( "\"in\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 261, }, Operator( ( "==", true, ), ), Symbol( "\"y\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 261, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 261, }, Operator( ( "==", true, ), ), Symbol( "\"out\"", ), ], ], ), ], line: 260, }, ], end: 524, }, ), DoBlock( CodeBlock { start: 525, code: [ Variable { names: [ ( "X", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 267, column: 0, }, Variable { names: [ ( "x", false, ), ( "closescope", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 17, code: [ Ident { expr: [ Symbol( "stack", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 268, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 269, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 268, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 269, }, ], values: [ [ Symbol( "true", ), ], ], line: 270, column: 3, }, ], end: 32, }, line: 271, column: 1, }, ], [ Symbol( "100", ), ], ], ), ], line: 267, }, ], ], line: 271, column: 4, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 272, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 271, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 272, }, ], values: [ [ Symbol( "101", ), ], ], line: 272, column: 11, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "x", ], body: CodeBlock { start: 52, code: [ Variable { names: [ ( "_", true, ), ], values: [ [ Ident { expr: [ Symbol( "closescope", ), ], line: 276, }, ], ], line: 277, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 277, }, ], [ Ident { expr: [ Symbol( "X", ), ], line: 277, }, ], [ Symbol( "23", ), ], ], ), ), ], end: 66, }, line: 278, column: 1, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ], values: [ [ Ident { expr: [ Symbol( "foo", ), Call( [ [ Symbol( "1.5", ), ], ], ), ], line: 280, }, ], ], line: 280, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 281, }, Operator( ( "==", true, ), ), Symbol( "1.5", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 281, }, Operator( ( "==", true, ), ), Symbol( "false", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 281, }, Operator( ( "==", true, ), ), Symbol( "23", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "X", ), ], line: 281, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 280, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 281, }, ], values: [ [ Symbol( "false", ), ], ], line: 283, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "foo", ), ], line: 283, }, ], values: [ [ Lambda { args: [ "x", ], body: CodeBlock { start: 104, code: [ Variable { names: [ ( "_", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 288, }, Operator( ( "==", true, ), ), Symbol( "\"foo\"", ), ], ], ), ], line: 288, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 289, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 288, }, ], end: 34, }, line: 290, column: 1, }, ], ], ), ], line: 285, }, ], ], line: 291, column: 0, }, Variable { names: [ ( "_", true, ), ], values: [ [ Ident { expr: [ Symbol( "closescope", ), ], line: 291, }, ], ], line: 292, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "15", ), ], ], line: 293, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "y", ), ], line: 293, }, ], ], ), ), ], end: 153, }, line: 294, column: 1, }, ], ], line: 294, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 296, }, Operator( ( "==", true, ), ), Symbol( "15", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "X", ), ], line: 296, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 294, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 296, }, ], values: [ [ Symbol( "false", ), ], ], line: 298, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "foo", ), ], line: 298, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 173, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "closescope", ), ], line: 300, }, ], ], line: 301, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 301, }, ], ], ), ), ], end: 183, }, line: 302, column: 1, }, ], ], line: 302, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 304, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "closescope", ), ], line: 304, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "X", ), ], line: 304, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 302, }, ], end: 721, }, ), DoBlock( CodeBlock { start: 722, code: [ Variable { names: [ ( "flag", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 313, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 313, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 18, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "flag", ), ], line: 315, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 315, }, Alter { names: [ Ident { expr: [ Symbol( "flag", ), ], line: 315, }, ], values: [ [ Symbol( "true", ), ], ], line: 315, column: 10, }, ], end: 29, }, line: 316, column: 1, }, ], ), ], line: 316, column: 2, }, ], ], ), ], line: 313, }, ], ], line: 317, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "nil", ), ], ], line: 318, column: 0, }, Variable { names: [ ( "z", false, ), ], values: [ [ Symbol( "nil", ), ], ], line: 319, column: 0, }, DoBlock( CodeBlock { start: 46, code: [ Variable { names: [ ( "a", true, ), ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 320, }, ], ], line: 320, column: 7, }, ], end: 54, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "flag", ), ], line: 322, }, ], ], ), ], line: 321, }, ], end: 781, }, ), DoBlock( CodeBlock { start: 782, code: [ Variable { names: [ ( "flag", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 328, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 328, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 18, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "flag", ), ], line: 330, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 330, }, Alter { names: [ Ident { expr: [ Symbol( "flag", ), ], line: 330, }, ], values: [ [ Symbol( "true", ), ], ], line: 330, column: 10, }, ], end: 29, }, line: 331, column: 1, }, ], ), ], line: 331, column: 2, }, ], ], ), ], line: 328, }, ], ], line: 333, column: 0, }, Function { local: true, name: [ Symbol( "a", ), ], args: [], body: CodeBlock { start: 36, code: [ Return( Some( [ [ Expr( [ Lambda { args: [], body: CodeBlock { start: 5, code: [ Return( Some( [ [ Symbol( "nil", ), ], ], ), ), ], end: 8, }, line: 334, column: 8, }, ], ), Ident { expr: [], line: 334, }, ], [ Symbol( "nil", ), ], [ Symbol( "nil", ), ], [ Ident { expr: [ Symbol( "x", ), ], line: 334, }, ], ], ), ), ], end: 52, }, line: 335, column: 1, }, Variable { names: [ ( "v", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 337, column: 0, }, Variable { names: [ ( "w", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 338, column: 0, }, Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 339, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 340, column: 0, }, Variable { names: [ ( "z", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 341, column: 0, }, ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "a", ), Call( [], ), ], line: 341, }, ], stop: None, initial: None, code: CodeBlock { start: 94, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 342, }, ], values: [ [ Ident { expr: [ Symbol( "k", ), ], line: 342, }, ], ], line: 342, column: 3, }, ], end: 98, }, line: 343, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "flag", ), ], line: 344, }, ], ], ), ], line: 343, }, ], end: 885, }, ), DoBlock( CodeBlock { start: 886, code: [ Variable { names: [ ( "X", false, ), ( "Y", false, ), ], values: [], line: 351, column: 4, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 9, code: [ Variable { names: [ ( "_", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "Y", ), ], line: 353, }, ], values: [ [ Symbol( "10", ), ], ], line: 353, column: 3, }, ], end: 15, }, line: 353, column: 15, }, ], ], ), ], line: 353, }, ], ], line: 353, column: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "X", ), ], line: 354, }, Operator( ( "==", true, ), ), Symbol( "true", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "Y", ), ], line: 354, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 353, }, Return( Some( [ [ Symbol( "1", ), ], [ Symbol( "2", ), ], [ Symbol( "3", ), ], ], ), ), ], end: 42, }, line: 356, column: 1, }, Function { local: true, name: [ Symbol( "bar", ), ], args: [], body: CodeBlock { start: 47, code: [ Variable { names: [ ( "_", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 359, }, ], values: [ [ Symbol( "false", ), ], ], line: 359, column: 3, }, ], end: 15, }, line: 359, column: 15, }, ], ], ), ], line: 359, }, ], ], line: 359, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 359, }, ], values: [ [ Symbol( "true", ), ], ], line: 361, column: 0, }, DoBlock( CodeBlock { start: 20, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 362, }, ], ], ), ), ], end: 25, }, ), ], end: 73, }, line: 364, column: 1, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [ [ Ident { expr: [ Symbol( "bar", ), Call( [], ), ], line: 366, }, ], ], line: 366, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "X", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "false", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "Y", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 367, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 366, }, ], end: 998, }, ), DoBlock( CodeBlock { start: 999, code: [ Variable { names: [ ( "closed", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 378, column: 0, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 9, code: [ Return( Some( [ [ Lambda { args: [], body: CodeBlock { start: 4, code: [ Return( Some( [ [ Symbol( "true", ), ], ], ), ), ], end: 7, }, line: 379, column: 7, }, ], [ Symbol( "0", ), ], [ Symbol( "0", ), ], [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "closed", ), ], line: 380, }, ], values: [ [ Symbol( "true", ), ], ], line: 380, column: 3, }, ], end: 21, }, line: 380, column: 9, }, ], ], ), ], line: 379, }, ], ], ), ), ], end: 32, }, line: 381, column: 1, }, Function { local: true, name: [ Symbol( "tail", ), ], args: [], body: CodeBlock { start: 37, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "closed", ), ], line: 383, }, ], ], ), ), ], end: 40, }, line: 383, column: 8, }, Function { local: true, name: [ Symbol( "foo1", ), ], args: [], body: CodeBlock { start: 45, code: [ ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 386, }, ], stop: None, initial: None, code: CodeBlock { start: 7, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "tail", ), Call( [], ), ], line: 386, }, ], ], ), ), ], end: 12, }, line: 386, column: 12, }, ], end: 58, }, line: 387, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foo1", ), Call( [], ), ], line: 389, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 387, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "closed", ), ], line: 390, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 389, }, ], end: 1072, }, ), DoBlock( CodeBlock { start: 1073, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing errors in __close\"", ), ], ], ), ], line: 395, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 9, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 401, }, ], [ Symbol( "\"@y\"", ), ], ], ), ], line: 401, }, ], ], ), ], line: 401, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@x\"", ), ], ], ), ], line: 401, }, ], end: 30, }, line: 403, column: 1, }, ], ], ), ], line: 399, }, ], ], line: 405, column: 0, }, Variable { names: [ ( "x1", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 45, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 407, }, ], [ Symbol( "\"@y\"", ), ], ], ), ], line: 407, }, ], ], ), ], line: 407, }, ], end: 57, }, line: 408, column: 1, }, ], ], ), ], line: 405, }, ], ], line: 410, column: 0, }, Variable { names: [ ( "gc", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 69, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 410, }, ], end: 73, }, line: 410, column: 15, }, ], ], ), ], line: 410, }, ], ], line: 412, column: 0, }, Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 88, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 414, }, ], [ Symbol( "\"@z\"", ), ], ], ), ], line: 414, }, ], ], ), ], line: 414, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@y\"", ), ], ], ), ], line: 414, }, ], end: 104, }, line: 416, column: 1, }, ], ], ), ], line: 412, }, ], ], line: 418, column: 0, }, Variable { names: [ ( "z", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 119, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 420, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 420, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@z\"", ), ], ], ), ], line: 420, }, ], end: 130, }, line: 422, column: 1, }, ], ], ), ], line: 418, }, ], ], line: 424, column: 0, }, Return( Some( [ [ Symbol( "200", ), ], ], ), ), ], end: 143, }, line: 425, column: 1, }, Variable { names: [ ( "stat", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 427, }, ], [ Symbol( "false", ), ], ], ), ], line: 427, }, ], ], line: 427, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 428, }, ], [ Symbol( "\"@x\"", ), ], ], ), ], line: 428, }, ], ], ), ], line: 427, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 170, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 437, }, Operator( ( "==", true, ), ), Symbol( "\"pcall\"", ), ], ], ), ], line: 437, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 438, }, ], [ Symbol( "\"@x1\"", ), ], ], ), ], line: 438, }, ], ], ), ], line: 437, }, ], end: 39, }, line: 439, column: 1, }, ], ], ), ], line: 433, }, ], ], line: 441, column: 0, }, Variable { names: [ ( "x1", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 54, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 443, }, Operator( ( "==", true, ), ), Symbol( "\"pcall\"", ), ], ], ), ], line: 443, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 444, }, ], [ Symbol( "\"@y\"", ), ], ], ), ], line: 444, }, ], ], ), ], line: 443, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@x1\"", ), ], ], ), ], line: 444, }, ], end: 83, }, line: 446, column: 1, }, ], ], ), ], line: 441, }, ], ], line: 448, column: 0, }, Variable { names: [ ( "gc", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 95, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 448, }, ], end: 99, }, line: 448, column: 15, }, ], ], ), ], line: 448, }, ], ], line: 450, column: 0, }, Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 114, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 452, }, Operator( ( "==", true, ), ), Symbol( "\"pcall\"", ), ], ], ), ], line: 452, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 453, }, ], [ Symbol( "\"@z\"", ), ], ], ), ], line: 453, }, ], ], ), ], line: 452, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@y\"", ), ], ], ), ], line: 453, }, ], end: 143, }, line: 455, column: 1, }, ], ], ), ], line: 450, }, ], ], line: 457, column: 0, }, Variable { names: [ ( "first", false, ), ], values: [ [ Symbol( "true", ), ], ], line: 458, column: 0, }, Variable { names: [ ( "z", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 162, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 460, }, Operator( ( "==", true, ), ), Symbol( "\"pcall\"", ), ], ], ), ], line: 460, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "first", ), ], line: 462, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 462, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 460, }, Alter { names: [ Ident { expr: [ Symbol( "first", ), ], line: 462, }, ], values: [ [ Symbol( "false", ), ], ], line: 463, column: 3, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@z\"", ), ], ], ), ], line: 463, }, ], end: 191, }, line: 465, column: 1, }, ], ], ), ], line: 458, }, ], ], line: 465, column: 2, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "4", ), ], ], ), ], line: 465, }, ], end: 367, }, line: 468, column: 1, }, Variable { names: [ ( "stat", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 470, }, ], [ Symbol( "true", ), ], ], ), ], line: 470, }, ], ], line: 470, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 471, }, ], [ Symbol( "\"@x1\"", ), ], ], ), ], line: 471, }, ], ], ), ], line: 470, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "...", ], body: CodeBlock { start: 395, code: [ DoBlock( CodeBlock { start: 1, code: [ Variable { names: [ ( "x1", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 478, }, ], [ Symbol( "\"@X\"", ), ], ], ), ], line: 478, }, ], ], ), ], line: 478, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@Y\"", ), ], ], ), ], line: 478, }, ], end: 30, }, line: 480, column: 1, }, ], ], ), ], line: 476, }, ], ], line: 482, column: 0, }, Variable { names: [ ( "x123", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 45, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 484, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 484, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@X\"", ), ], ], ), ], line: 484, }, ], end: 56, }, line: 486, column: 1, }, ], ], ), ], line: 482, }, ], ], line: 486, column: 2, }, ], end: 59, }, ), Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "false", ), ], ], ), ], line: 487, }, ], end: 461, }, line: 489, column: 1, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "xpcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 491, }, ], [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "traceback", ), ], line: 491, }, ], ], ), ], line: 491, }, ], ], line: 491, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 492, }, ], [ Symbol( "\"^[^ ]* @Y\"", ), ], ], ), ], line: 492, }, ], ], ), ], line: 491, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "...", ], body: CodeBlock { start: 491, code: [ Variable { names: [ ( "x123", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@x123\"", ), ], ], ), ], line: 496, }, ], end: 16, }, line: 496, column: 16, }, ], ], ), ], line: 496, }, ], ], line: 496, column: 17, }, ], end: 509, }, line: 497, column: 1, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "xpcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 499, }, ], [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "traceback", ), ], line: 499, }, ], ], ), ], line: 499, }, ], ], line: 499, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "match", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 500, }, ], [ Symbol( "\"^[^ ]* @x123\"", ), ], ], ), ], line: 500, }, ], ], ), ], line: 499, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 501, }, ], [ Symbol( "\"in metamethod 'close'\"", ), ], ], ), ], line: 501, }, ], ], ), ], line: 500, }, ], end: 1618, }, ), DoBlock( CodeBlock { start: 1619, code: [ Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 5, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Table { data: [], line: 507, column: 8, }, ], ], line: 507, column: 8, }, Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "false", ), ], ], ), ], line: 507, }, ], end: 20, }, line: 509, column: 1, }, Variable { names: [ ( "stat", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 510, }, ], ], ), ], line: 510, }, ], ], line: 510, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "stat", ), ], line: 511, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 512, }, ], [ Symbol( "\"variable 'x' got a non%-closable value\"", ), ], ], ), ], line: 511, }, ], ], ), ], line: 510, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 48, code: [ Variable { names: [ ( "xyz", true, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 515, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Ident { expr: [ Symbol( "print", ), ], line: 515, }, ], ), ], line: 515, column: 16, }, ], ], ), ], line: 515, }, ], ], line: 515, column: 17, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "xyz", ), ], line: 516, }, ], ], ), Symbol( ".", ), Symbol( "__close", ), ], line: 515, }, ], values: [ [ Symbol( "nil", ), ], ], line: 516, column: 8, }, ], end: 74, }, line: 517, column: 1, }, Variable { names: [ ( "stat", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 518, }, ], ], ), ], line: 518, }, ], ], line: 518, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "stat", ), ], line: 519, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 519, }, ], [ Symbol( "\"metamethod 'close'\"", ), ], ], ), ], line: 519, }, ], ], ), ], line: 518, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 102, code: [ Variable { names: [ ( "a1", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 523, }, ], [ Symbol( "\"number value\"", ), ], ], ), ], line: 523, }, ], ], ), ], line: 523, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "12", ), ], ], ), ], line: 523, }, ], end: 30, }, line: 525, column: 1, }, ], ], ), ], line: 522, }, ], ], line: 526, column: 0, }, Variable { names: [ ( "a2", true, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 526, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Ident { expr: [ Symbol( "print", ), ], line: 526, }, ], ), ], line: 526, column: 16, }, ], ], ), ], line: 526, }, ], ], line: 527, column: 0, }, Variable { names: [ ( "a3", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 62, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 528, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 528, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "123", ), ], ], ), ], line: 528, }, ], end: 73, }, line: 530, column: 1, }, ], ], ), ], line: 527, }, ], ], line: 530, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a2", ), ], line: 531, }, ], ], ), Symbol( ".", ), Symbol( "__close", ), ], line: 530, }, ], values: [ [ Symbol( "4", ), ], ], line: 531, column: 8, }, ], end: 185, }, line: 532, column: 1, }, Variable { names: [ ( "stat", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 533, }, ], ], ), ], line: 533, }, ], ], line: 533, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "stat", ), ], line: 534, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 534, }, Operator( ( "==", true, ), ), Symbol( "12", ), ], ], ), ], line: 533, }, ], end: 1823, }, ), DoBlock( CodeBlock { start: 1824, code: [ Variable { names: [ ( "track", false, ), ], values: [ [ Table { data: [], line: 539, column: 5, }, ], ], line: 540, column: 0, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 10, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Variable { names: [ ( "xx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 543, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 543, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 544, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 543, }, ], values: [ [ Symbol( "\"xx\"", ), ], ], line: 544, column: 9, }, ], end: 30, }, line: 545, column: 1, }, ], ], ), ], line: 542, }, ], ], line: 545, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 546, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 545, }, ], values: [ [ Symbol( "\"x\"", ), ], ], line: 546, column: 9, }, ], end: 52, }, line: 547, column: 1, }, ], ], ), ], line: 541, }, ], ], line: 547, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 548, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 547, }, ], values: [ [ Symbol( "\"foo\"", ), ], ], line: 549, column: 0, }, Return( Some( [ [ Symbol( "20", ), ], [ Symbol( "30", ), ], [ Symbol( "40", ), ], ], ), ), ], end: 79, }, line: 550, column: 1, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [ [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 551, }, ], ], line: 551, column: 12, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 552, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 552, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 552, }, Operator( ( "==", true, ), ), Symbol( "40", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 552, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 551, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 553, }, Operator( ( "==", true, ), ), Symbol( "\"foo\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 553, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 553, }, Operator( ( "==", true, ), ), Symbol( "\"xx\"", ), ], ], ), ], line: 552, }, Variable { names: [ ( "track", false, ), ], values: [ [ Table { data: [], line: 556, column: 5, }, ], ], line: 557, column: 0, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 142, code: [ Variable { names: [ ( "x0", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 559, }, Operator( ( "==", true, ), ), Symbol( "202", ), ], ], ), ], line: 559, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 560, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 559, }, ], values: [ [ Symbol( "\"x0\"", ), ], ], line: 560, column: 9, }, ], end: 30, }, line: 561, column: 1, }, ], ], ), ], line: 558, }, ], ], line: 562, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 42, code: [ Variable { names: [ ( "xx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 564, }, Operator( ( "==", true, ), ), Symbol( "101", ), ], ], ), ], line: 564, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 565, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 564, }, ], values: [ [ Symbol( "\"xx\"", ), ], ], line: 565, column: 9, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "202", ), ], ], ), ], line: 565, }, ], end: 34, }, line: 567, column: 1, }, ], ], ), ], line: 563, }, ], ], line: 567, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 568, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 567, }, ], values: [ [ Symbol( "\"x\"", ), ], ], line: 568, column: 9, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "101", ), ], ], ), ], line: 568, }, ], end: 91, }, line: 570, column: 1, }, ], ], ), ], line: 562, }, ], ], line: 570, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "track", ), ], line: 571, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 570, }, ], values: [ [ Symbol( "\"foo\"", ), ], ], line: 572, column: 0, }, Return( Some( [ [ Symbol( "20", ), ], [ Symbol( "30", ), ], [ Symbol( "40", ), ], ], ), ), ], end: 250, }, line: 573, column: 1, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 574, }, ], ], ), ], line: 574, }, ], ], line: 574, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 575, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 575, }, Operator( ( "==", true, ), ), Symbol( "202", ), ], ], ), ], line: 574, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 576, }, Operator( ( "==", true, ), ), Symbol( "\"foo\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 576, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 576, }, Operator( ( "==", true, ), ), Symbol( "\"xx\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "track", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 576, }, Operator( ( "==", true, ), ), Symbol( "\"x0\"", ), ], ], ), ], line: 575, }, ], end: 2123, }, ), Function { local: true, name: [ Symbol( "checktable", ), ], args: [ "t1", "t2", ], body: CodeBlock { start: 2131, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t1", ), ], line: 582, }, Operator( ( "==", true, ), ), Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t2", ), ], line: 582, }, ], ], ), ], line: 582, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t1", ), ], line: 583, }, ], step: None, code: CodeBlock { start: 16, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t1", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 584, }, ], ), Symbol( "]", ), ], line: 584, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t2", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 584, }, ], ), Symbol( "]", ), ], line: 584, }, ], ], ), ], line: 584, }, ], end: 29, }, line: 585, column: 1, }, ], end: 2161, }, line: 586, column: 1, }, DoBlock( CodeBlock { start: 2162, code: [ Function { local: true, name: [ Symbol( "overflow", ), ], args: [ "n", ], body: CodeBlock { start: 6, code: [ Ident { expr: [ Symbol( "overflow", ), Call( [ [ Ident { expr: [ Symbol( "n", ), ], line: 592, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], ), ], line: 592, }, ], end: 13, }, line: 593, column: 1, }, Function { local: true, name: [ Symbol( "errorh", ), ], args: [ "m", ], body: CodeBlock { start: 19, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 598, }, ], [ Symbol( "\"stack overflow\"", ), ], ], ), ], line: 598, }, ], ], ), ], line: 598, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "o", ], body: CodeBlock { start: 23, code: [ Alter { names: [ Ident { expr: [ Symbol( "o", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 599, }, ], values: [ [ Symbol( "10", ), ], ], line: 599, column: 6, }, ], end: 30, }, line: 599, column: 19, }, ], ], ), ], line: 599, }, ], ], line: 600, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 600, }, ], ], ), ), ], end: 53, }, line: 601, column: 1, }, Variable { names: [ ( "flag", false, ), ], values: [], line: 603, column: 2, }, Variable { names: [ ( "st", false, ), ( "obj", false, ), ], values: [], line: 604, column: 4, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 69, code: [ Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "obj", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 609, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 609, }, Alter { names: [ Ident { expr: [ Symbol( "obj", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 609, }, ], values: [ [ Symbol( "100", ), ], ], line: 610, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "flag", ), ], line: 610, }, ], values: [ [ Ident { expr: [ Symbol( "obj", ), ], line: 611, }, ], ], line: 611, column: 3, }, ], end: 30, }, line: 612, column: 1, }, ], ], ), ], line: 608, }, ], ], line: 612, column: 2, }, Ident { expr: [ Symbol( "tracegc", ), Symbol( ".", ), Symbol( "stop", ), Call( [], ), ], line: 612, }, Alter { names: [ Ident { expr: [ Symbol( "st", ), ], line: 613, }, Ident { expr: [ Symbol( "obj", ), ], line: 614, }, ], values: [ [ Ident { expr: [ Symbol( "xpcall", ), Call( [ [ Ident { expr: [ Symbol( "overflow", ), ], line: 614, }, ], [ Ident { expr: [ Symbol( "errorh", ), ], line: 614, }, ], [ Symbol( "0", ), ], ], ), ], line: 614, }, ], ], line: 614, column: 12, }, Ident { expr: [ Symbol( "tracegc", ), Symbol( ".", ), Symbol( "start", ), Call( [], ), ], line: 614, }, ], end: 123, }, line: 616, column: 1, }, ], ], ), ], line: 606, }, ], ], line: 616, column: 2, }, Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 616, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 618, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "obj", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 618, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "flag", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 618, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 617, }, ], end: 2309, }, ), IfStatement { condition: [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 622, }, ], [ Symbol( "\"T\"", ), ], ], ), ], line: 622, }, ], body: CodeBlock { start: 2317, code: [ Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 5, code: [ Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [], ), ], line: 625, }, ], end: 17, }, line: 625, column: 17, }, ], ], ), ], line: 625, }, ], ], line: 626, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 626, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 35, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 628, }, Variable { names: [ ( "x", false, ), ], values: [ [ Table { data: [], line: 628, column: 12, }, ], ], line: 628, column: 12, }, ], end: 48, }, line: 629, column: 1, }, ], ), ], line: 630, column: 1, }, ], ], ), ], line: 626, }, ], ], line: 630, column: 2, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "1000", ), ], ], ), ], line: 630, }, ], end: 60, }, line: 632, column: 1, }, Ident { expr: [ Symbol( "stack", ), Call( [ [ Symbol( "5", ), ], ], ), ], line: 632, }, Variable { names: [ ( "_", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 638, }, ], ], ), ], line: 638, }, ], ], line: 638, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 639, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), ], ], ), ], line: 638, }, Variable { names: [ ( "closemsg", false, ), ], values: [], line: 641, column: 2, }, Variable { names: [ ( "close", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 92, code: [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [], ), ], line: 643, }, Alter { names: [ Ident { expr: [ Symbol( "closemsg", ), ], line: 643, }, ], values: [ [ Ident { expr: [ Symbol( "msg", ), ], line: 644, }, ], ], line: 644, column: 3, }, ], end: 101, }, line: 645, column: 1, }, ], ], ), ], line: 642, }, ], ], line: 648, column: 0, }, Function { local: true, name: [ Symbol( "enter", ), ], args: [ "count", ], body: CodeBlock { start: 108, code: [ Ident { expr: [ Symbol( "stack", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 649, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "alloccount", ), Call( [ [ Ident { expr: [ Symbol( "count", ), ], line: 650, }, ], ], ), ], line: 649, }, Alter { names: [ Ident { expr: [ Symbol( "closemsg", ), ], line: 650, }, ], values: [ [ Symbol( "nil", ), ], ], line: 652, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "close", ), ], line: 652, }, ], ], ), ), ], end: 124, }, line: 653, column: 1, }, Function { local: true, name: [ Symbol( "test", ), ], args: [], body: CodeBlock { start: 129, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "enter", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 656, }, ], ], line: 657, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Table { data: [], line: 657, column: 5, }, ], ], line: 657, column: 5, }, ], end: 145, }, line: 658, column: 1, }, Variable { names: [ ( "_", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "test", ), ], line: 660, }, ], ], ), ], line: 660, }, ], ], line: 660, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 661, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "closemsg", ), ], line: 661, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), ], ], ), ], line: 660, }, Function { local: true, name: [ Symbol( "test", ), ], args: [], body: CodeBlock { start: 169, code: [ Variable { names: [ ( "xxx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 667, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), ], ], ), ], line: 667, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "1000", ), ], ], ), ], line: 667, }, ], end: 26, }, line: 669, column: 1, }, ], ], ), ], line: 666, }, ], ], line: 670, column: 0, }, Variable { names: [ ( "xx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", "msg", ], body: CodeBlock { start: 41, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 671, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), ], ], ), ], line: 671, }, ], end: 49, }, line: 672, column: 1, }, ], ], ), ], line: 670, }, ], ], line: 673, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "enter", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 673, }, ], ], line: 674, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Table { data: [], line: 674, column: 5, }, ], ], line: 674, column: 5, }, ], end: 235, }, line: 675, column: 1, }, Variable { names: [ ( "_", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "test", ), ], line: 677, }, ], ], ), ], line: 677, }, ], ], line: 677, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 678, }, Operator( ( "==", true, ), ), Symbol( "1000", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "closemsg", ), ], line: 678, }, Operator( ( "==", true, ), ), Symbol( "\"not enough memory\"", ), ], ], ), ], line: 677, }, DoBlock( CodeBlock { start: 255, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 681, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "'a'", ), ], [ Symbol( "10000", ), ], ], ), ], line: 682, }, ], ], line: 683, column: 0, }, Variable { names: [ ( "m", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 683, }, ], ], line: 683, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 683, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 684, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "upper", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 685, }, ], ], ), ], line: 685, }, ], ], line: 685, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 687, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 687, }, Operator( ( "<=", true, ), ), Symbol( "11000", ), ], ], ), ], line: 685, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 687, }, ], end: 306, }, ), DoBlock( CodeBlock { start: 307, code: [ Variable { names: [ ( "lim", false, ), ], values: [ [ Symbol( "10000", ), ], ], line: 693, column: 0, }, Variable { names: [ ( "extra", false, ), ], values: [ [ Symbol( "2000", ), ], ], line: 695, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"a\"", ), ], [ Ident { expr: [ Symbol( "lim", ), ], line: 695, }, ], ], ), ], line: 695, }, ], ], line: 698, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "s", ), ], line: 698, }, ], ), ( None, [ Ident { expr: [ Symbol( "s", ), ], line: 698, }, ], ), ], line: 698, column: 8, }, ], ], line: 698, column: 8, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 698, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 700, }, Alter { names: [ Ident { expr: [ Symbol( "m", ), ], line: 700, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 702, }, ], ], line: 702, column: 7, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"stop\"", ), ], ], ), ], line: 702, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 706, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 706, }, ], ], ), ], line: 703, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "concat", ), ], line: 707, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 707, }, ], ], ), ], line: 707, }, ], ], ), ], line: 706, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 709, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 709, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 709, }, ], ], ), ], line: 707, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 712, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 712, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 712, }, ], ], ), ], line: 709, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "concat", ), ], line: 713, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 713, }, ], ], ), ], line: 713, }, ], ], ), ], line: 712, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 715, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 715, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 715, }, ], ], ), ], line: 713, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 718, }, Operator( ( "+", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 718, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 718, }, ], ], ), ], line: 715, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "concat", ), ], line: 719, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 719, }, ], ], ), ], line: 719, }, ], ], ), ], line: 718, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [], ), ], line: 721, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "m", ), ], line: 721, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 721, }, ], ], ), ], line: 719, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Ident { expr: [ Symbol( "m", ), ], line: 724, }, Operator( ( "+", true, ), ), Symbol( "4", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 724, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "extra", ), ], line: 724, }, ], ], ), ], line: 721, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "concat", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 725, }, ], ], ), ], line: 725, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "lim", ), ], line: 725, }, ], ], ), ], line: 724, }, Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "totalmem", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 725, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [ [ Symbol( "\"restart\"", ), ], ], ), ], line: 727, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 728, }, ], end: 493, }, ), DoBlock( CodeBlock { start: 494, code: [ Variable { names: [ ( "trace", false, ), ], values: [ [ Table { data: [], line: 736, column: 5, }, ], ], line: 738, column: 0, }, Function { local: true, name: [ Symbol( "hook", ), ], args: [ "event", ], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 739, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 739, }, ], values: [ [ Ident { expr: [ Symbol( "event", ), ], line: 739, }, Operator( ( "..", true, ), ), Symbol( "\" \"", ), Operator( ( "..", true, ), ), Expr( [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 739, }, Operator( ( "or", true, ), ), Symbol( "\"?\"", ), ], ), Ident { expr: [], line: 739, }, ], ], line: 739, column: 24, }, ], end: 36, }, line: 740, column: 1, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 47, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 744, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 744, }, ], values: [ [ Symbol( "\"x\"", ), ], ], line: 744, column: 9, }, ], end: 57, }, line: 745, column: 1, }, ], ], ), ], line: 743, }, ], ], line: 747, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 69, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 748, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 748, }, ], values: [ [ Symbol( "\"y\"", ), ], ], line: 748, column: 9, }, ], end: 79, }, line: 749, column: 1, }, ], ], ), ], line: 747, }, ], ], line: 749, column: 2, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "sethook", ), Call( [ [ Ident { expr: [ Symbol( "hook", ), ], line: 751, }, ], [ Symbol( "\"r\"", ), ], ], ), ], line: 749, }, Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "testC", ), Call( [ [ MultilineString( "[[\n toclose 2 # x\n pushnum 10\n pushint 20\n toclose 3 # y\n return 2\n ]]", ), ], [ Ident { expr: [ Symbol( "x", ), ], line: 758, }, ], [ Ident { expr: [ Symbol( "y", ), ], line: 758, }, ], ], ), ], line: 752, }, ], ), ], line: 758, column: 7, }, ], ], line: 758, column: 7, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "sethook", ), Call( [], ), ], line: 758, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Ident { expr: [ Symbol( "trace", ), ], line: 762, }, ], [ Table { data: [ ( None, [ Symbol( "\"return sethook\"", ), ], ), ( None, [ Symbol( "\"y\"", ), ], ), ( None, [ Symbol( "\"return ?\"", ), ], ), ( None, [ Symbol( "\"x\"", ), ], ), ( None, [ Symbol( "\"return ?\"", ), ], ), ( None, [ Symbol( "\"return testC\"", ), ], ), ], line: 763, column: 13, }, ], ], ), ], line: 759, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 765, }, ], [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ( None, [ Symbol( "20", ), ], ), ], line: 765, column: 9, }, ], ], ), ], line: 763, }, ], end: 631, }, ), ], end: 2949, }, next: None, line: 767, column: 1, }, DoBlock( CodeBlock { start: 2950, code: [ Variable { names: [ ( "trace", false, ), ], values: [ [ Table { data: [], line: 771, column: 5, }, ], ], line: 773, column: 0, }, Function { local: true, name: [ Symbol( "hook", ), ], args: [ "event", ], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 774, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 774, }, ], values: [ [ Ident { expr: [ Symbol( "event", ), ], line: 774, }, Operator( ( "..", true, ), ), Symbol( "\" \"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "getinfo", ), Call( [ [ Symbol( "2", ), ], ], ), Symbol( ".", ), Symbol( "name", ), ], line: 774, }, ], ], line: 774, column: 20, }, ], end: 32, }, line: 775, column: 1, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [ "...", ], body: CodeBlock { start: 38, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 779, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 779, }, ], values: [ [ Symbol( "\"x\"", ), ], ], line: 779, column: 9, }, ], end: 24, }, line: 780, column: 1, }, ], ], ), ], line: 778, }, ], ], line: 782, column: 0, }, Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 39, code: [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "sethook", ), Call( [ [ Ident { expr: [ Symbol( "hook", ), ], line: 783, }, ], [ Symbol( "\"r\"", ), ], ], ), ], line: 783, }, ], end: 48, }, line: 784, column: 1, }, ], ], ), ], line: 782, }, ], ], line: 786, column: 0, }, Return( Some( [ [ Symbol( "...", ), ], ], ), ), ], end: 90, }, line: 787, column: 1, }, Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "foo", ), Call( [ [ Symbol( "10", ), ], [ Symbol( "20", ), ], [ Symbol( "30", ), ], ], ), ], line: 789, }, ], ), ], line: 789, column: 13, }, ], ], line: 789, column: 13, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "sethook", ), Call( [], ), ], line: 789, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 791, }, ], [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ( None, [ Symbol( "20", ), ], ), ( None, [ Symbol( "30", ), ], ), ], line: 791, column: 11, }, ], ], ), ], line: 790, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Ident { expr: [ Symbol( "trace", ), ], line: 792, }, ], [ Table { data: [ ( None, [ Symbol( "\"return sethook\"", ), ], ), ( None, [ Symbol( "\"return close\"", ), ], ), ( None, [ Symbol( "\"x\"", ), ], ), ( None, [ Symbol( "\"return close\"", ), ], ), ( None, [ Symbol( "\"return foo\"", ), ], ), ], line: 793, column: 11, }, ], ], ), ], line: 791, }, ], end: 3087, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"to-be-closed variables in coroutines\"", ), ], ], ), ], line: 794, }, DoBlock( CodeBlock { start: 3090, code: [ Variable { names: [ ( "trace", false, ), ], values: [ [ Table { data: [], line: 802, column: 5, }, ], ], line: 803, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 15, code: [ Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 804, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 804, }, ], values: [ [ Symbol( "\"nowX\"", ), ], ], line: 807, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 23, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 808, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 808, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 809, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 808, }, ], values: [ [ Symbol( "\"x1\"", ), ], ], line: 809, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"x\"", ), ], ], ), ], line: 809, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 811, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 810, }, ], values: [ [ Symbol( "\"x2\"", ), ], ], line: 811, column: 9, }, ], end: 54, }, line: 812, column: 1, }, ], ], ), ], line: 807, }, ], ], line: 814, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 61, code: [ DoBlock( CodeBlock { start: 1, code: [ Variable { names: [ ( "z", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 817, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 817, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 818, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 817, }, ], values: [ [ Symbol( "\"z1\"", ), ], ], line: 818, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"z\"", ), ], ], ), ], line: 818, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 820, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 819, }, ], values: [ [ Symbol( "\"z2\"", ), ], ], line: 820, column: 9, }, ], end: 45, }, line: 821, column: 1, }, ], ], ), ], line: 816, }, ], ], line: 821, column: 2, }, ], end: 48, }, ), Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 824, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 822, }, ], values: [ [ Symbol( "\"nowY\"", ), ], ], line: 827, column: 0, }, Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 71, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 828, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 828, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 829, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 828, }, ], values: [ [ Symbol( "\"y1\"", ), ], ], line: 829, column: 9, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"y\"", ), ], ], ), ], line: 829, }, Alter { names: [ Ident { expr: [ Symbol( "trace", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "trace", ), ], line: 831, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 830, }, ], values: [ [ Symbol( "\"y2\"", ), ], ], line: 831, column: 9, }, ], end: 102, }, line: 832, column: 1, }, ], ], ), ], line: 827, }, ], ], line: 834, column: 0, }, Return( Some( [ [ Symbol( "10", ), ], [ Symbol( "20", ), ], [ Symbol( "30", ), ], ], ), ), ], end: 171, }, line: 835, column: 1, }, ], ], ), ], line: 814, }, ], ], ), ), ], end: 188, }, line: 836, column: 1, }, ], ], ), ], line: 803, }, ], ], line: 836, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 838, }, Operator( ( "==", true, ), ), Symbol( "\"z\"", ), ], ], ), ], line: 836, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 839, }, Operator( ( "==", true, ), ), Symbol( "\"y\"", ), ], ], ), ], line: 838, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 840, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), ], ], ), ], line: 839, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 841, }, ], ), ], line: 841, column: 7, }, ], [ Table { data: [ ( None, [ Symbol( "true", ), ], ), ( None, [ Symbol( "10", ), ], ), ( None, [ Symbol( "20", ), ], ), ( None, [ Symbol( "30", ), ], ), ], line: 841, column: 17, }, ], ], ), ], line: 840, }, Ident { expr: [ Symbol( "checktable", ), Call( [ [ Ident { expr: [ Symbol( "trace", ), ], line: 842, }, ], [ Table { data: [ ( None, [ Symbol( "\"nowX\"", ), ], ), ( None, [ Symbol( "\"z1\"", ), ], ), ( None, [ Symbol( "\"z2\"", ), ], ), ( None, [ Symbol( "\"nowY\"", ), ], ), ( None, [ Symbol( "\"y1\"", ), ], ), ( None, [ Symbol( "\"y2\"", ), ], ), ( None, [ Symbol( "\"x1\"", ), ], ), ( None, [ Symbol( "\"x2\"", ), ], ), ], line: 842, column: 21, }, ], ], ), ], line: 841, }, ], end: 3344, }, ), DoBlock( CodeBlock { start: 3345, code: [ Variable { names: [ ( "extrares", false, ), ], values: [], line: 850, column: 2, }, Function { local: true, name: [ Symbol( "check", ), ], args: [ "body", "extra", "...", ], body: CodeBlock { start: 12, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "pack", ), Call( [ [ Symbol( "...", ), ], ], ), ], line: 853, }, ], ], line: 854, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "body", ), ], line: 854, }, ], ], ), ], line: 854, }, ], ], line: 855, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "extra", ), ], line: 855, }, ], body: CodeBlock { start: 21, code: [ Alter { names: [ Ident { expr: [ Symbol( "extrares", ), ], line: 856, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 856, }, ], ], line: 856, column: 5, }, ], end: 27, }, next: None, line: 857, column: 1, }, Variable { names: [ ( "res", false, ), ], values: [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "pack", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 858, }, ], ], ), ], line: 858, }, ], ], line: 858, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res", ), Symbol( ".", ), Symbol( "n", ), ], line: 859, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 859, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 858, }, Variable { names: [ ( "res2", false, ), ], values: [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "pack", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 860, }, ], ], ), ], line: 860, }, ], ], line: 860, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res2", ), Symbol( ".", ), Symbol( "n", ), ], line: 861, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "n", ), ], line: 861, }, ], ], ), ], line: 860, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 862, }, ], step: None, code: CodeBlock { start: 82, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 863, }, ], ), Symbol( "]", ), ], line: 863, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), ], body: CodeBlock { start: 8, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res2", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 864, }, ], ), Symbol( "]", ), ], line: 864, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 864, }, ], ], ), ], line: 864, }, ], end: 21, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 21, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res2", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 866, }, ], ), Symbol( "]", ), ], line: 866, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 866, }, ], ), Symbol( "]", ), ], line: 866, }, ], ], ), ], line: 866, }, ], end: 34, }, next: None, line: 867, column: 1, }, ), line: 867, column: 1, }, ], end: 117, }, line: 868, column: 1, }, ], end: 130, }, line: 869, column: 1, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 135, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 872, }, ], ], ), ], line: 872, }, ], ], line: 873, column: 0, }, Variable { names: [ ( "extra", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "self", ], body: CodeBlock { start: 24, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "self", ), ], line: 874, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "extrares", ), ], line: 874, }, ], ], ), ], line: 874, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 874, }, ], end: 37, }, line: 876, column: 1, }, ], ], ), ], line: 873, }, ], ], line: 876, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "extrares", ), ], line: 876, }, ], values: [ [ Ident { expr: [ Symbol( "extra", ), ], line: 877, }, ], ], line: 878, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "unpack", ), Call( [ [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ( None, [ Ident { expr: [ Symbol( "x", ), ], line: 878, }, ], ), ( None, [ Symbol( "30", ), ], ), ], line: 878, column: 11, }, ], ], ), ], line: 878, }, ], ], ), ), ], end: 188, }, line: 879, column: 1, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 880, }, ], [ Symbol( "true", ), ], [ Symbol( "10", ), ], [ Symbol( "\"x\"", ), ], [ Symbol( "30", ), ], ], ), ], line: 879, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "extrares", ), ], line: 881, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 880, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 211, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 884, }, ], ], ), ], line: 884, }, ], ], line: 885, column: 0, }, Return( None, ), ], end: 225, }, line: 886, column: 1, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 887, }, ], [ Symbol( "false", ), ], ], ), ], line: 886, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 236, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 890, }, ], ], ), ], line: 890, }, ], ], line: 891, column: 0, }, Variable { names: [ ( "y", false, ), ( "z", false, ), ], values: [ [ Symbol( "20", ), ], [ Symbol( "30", ), ], ], line: 892, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 892, }, ], ], ), ), ], end: 259, }, line: 893, column: 1, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 894, }, ], [ Symbol( "false", ), ], [ Symbol( "\"x\"", ), ], ], ), ], line: 893, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 272, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 897, }, ], ], ), ], line: 897, }, ], ], line: 898, column: 0, }, Variable { names: [ ( "extra", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 898, }, ], ], ), ], line: 898, }, ], ], line: 899, column: 0, }, Return( Some( [ [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "unpack", ), Call( [ [ Table { data: [], line: 899, column: 7, }, ], [ Symbol( "1", ), ], [ Symbol( "100", ), ], ], ), ], line: 899, }, ], ], ), ), ], end: 309, }, line: 900, column: 1, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 901, }, ], [ Symbol( "true", ), ], [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "unpack", ), Call( [ [ Table { data: [], line: 901, column: 12, }, ], [ Symbol( "1", ), ], [ Symbol( "100", ), ], ], ), ], line: 901, }, ], ], ), ], line: 900, }, ], end: 3673, }, ), DoBlock( CodeBlock { start: 3674, code: [ Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 10, code: [ Function { local: true, name: [ Symbol( "foo", ), ], args: [ "err", ], body: CodeBlock { start: 6, code: [ Variable { names: [ ( "z", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 910, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 910, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "err", ), ], line: 910, }, Operator( ( "+", true, ), ), Symbol( "20", ), ], ], ), ], line: 910, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"z\"", ), ], ], ), ], line: 910, }, Return( Some( [ [ Symbol( "100", ), ], [ Symbol( "200", ), ], ], ), ), ], end: 37, }, line: 913, column: 1, }, ], ], ), ], line: 909, }, ], ], line: 915, column: 0, }, Variable { names: [ ( "y", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 52, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 917, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "err", ), ], line: 917, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "msg", ), ], line: 917, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "err", ), ], line: 917, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ), Ident { expr: [], line: 917, }, ], ], ), ], line: 917, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"y\"", ), ], ], ), ], line: 917, }, IfStatement { condition: [ Ident { expr: [ Symbol( "err", ), ], line: 919, }, ], body: CodeBlock { start: 25, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Ident { expr: [ Symbol( "err", ), ], line: 919, }, Operator( ( "+", true, ), ), Symbol( "20", ), ], ], ), ], line: 919, }, ], end: 32, }, next: None, line: 919, column: 10, }, ], end: 85, }, line: 920, column: 1, }, ], ], ), ], line: 915, }, ], ], line: 922, column: 0, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 100, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 923, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "err", ), ], line: 923, }, Operator( ( "or", true, ), ), Expr( [ Ident { expr: [ Symbol( "msg", ), ], line: 923, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "err", ), ], line: 923, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ), Ident { expr: [], line: 923, }, ], ], ), ], line: 923, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"x\"", ), ], ], ), ], line: 923, }, Return( Some( [ [ Symbol( "100", ), ], [ Symbol( "200", ), ], ], ), ), ], end: 127, }, line: 926, column: 1, }, ], ], ), ], line: 922, }, ], ], line: 928, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "err", ), ], line: 928, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], body: CodeBlock { start: 133, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Ident { expr: [ Symbol( "err", ), ], line: 928, }, ], ], ), ], line: 928, }, ], end: 138, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 138, code: [ Return( Some( [ [ Symbol( "10", ), ], [ Symbol( "20", ), ], ], ), ), ], end: 143, }, next: None, line: 928, column: 15, }, ), line: 928, column: 15, }, ], end: 150, }, line: 929, column: 1, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 931, }, ], [ Symbol( "nil", ), ], ], ), ], line: 931, }, ], ], ), ], line: 929, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 932, }, ], [ Symbol( "1", ), ], ], ), ], line: 932, }, ], ], ), ], line: 931, }, Return( Some( [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "foo", ), ], line: 933, }, ], [ Symbol( "10", ), ], ], ), ], line: 933, }, ], ], ), ), ], end: 190, }, line: 934, column: 1, }, ], ], ), ], line: 907, }, ], ], line: 936, column: 0, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 936, }, ], ], line: 936, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 937, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 937, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 936, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 937, }, Ident { expr: [ Symbol( "b", ), ], line: 938, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 938, }, ], ], line: 938, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 939, }, Operator( ( "==", true, ), ), Symbol( "\"y\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 939, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 938, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 939, }, Ident { expr: [ Symbol( "b", ), ], line: 940, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 940, }, ], ], line: 940, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 941, }, Operator( ( "==", true, ), ), Symbol( "\"z\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 941, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 940, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 942, }, ], ], line: 942, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 943, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 943, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 943, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 942, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 945, }, ], ], line: 945, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 946, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 946, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 945, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 946, }, Ident { expr: [ Symbol( "b", ), ], line: 947, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 947, }, ], ], line: 947, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 948, }, Operator( ( "==", true, ), ), Symbol( "\"y\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 948, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 947, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 948, }, Ident { expr: [ Symbol( "b", ), ], line: 949, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 949, }, ], ], line: 949, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 950, }, Operator( ( "==", true, ), ), Symbol( "\"z\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 950, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 949, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 951, }, ], ], line: 951, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 952, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 952, }, Operator( ( "==", true, ), ), Symbol( "21", ), ], ], ), ], line: 951, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 954, }, ], ], line: 954, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 955, }, Operator( ( "==", true, ), ), Symbol( "\"x\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 955, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 954, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 955, }, Ident { expr: [ Symbol( "b", ), ], line: 956, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 956, }, ], ], line: 956, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 957, }, Operator( ( "==", true, ), ), Symbol( "\"y\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 957, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 956, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 957, }, Ident { expr: [ Symbol( "b", ), ], line: 958, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 958, }, ], ], line: 958, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 959, }, Operator( ( "==", true, ), ), Symbol( "\"z\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 959, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 958, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 960, }, ], ], line: 960, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 961, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "msg", ), ], line: 961, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "20", ), ], ], ), ], line: 960, }, ], end: 4080, }, ), DoBlock( CodeBlock { start: 4081, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 968, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 969, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 18, code: [ Variable { names: [ ( "xv", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 970, }, ], values: [ [ Symbol( "true", ), ], ], line: 970, column: 3, }, ], end: 15, }, line: 970, column: 15, }, ], ], ), ], line: 970, }, ], ], line: 971, column: 0, }, DoBlock( CodeBlock { start: 17, code: [ Variable { names: [ ( "yv", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "y", ), ], line: 972, }, ], values: [ [ Symbol( "true", ), ], ], line: 972, column: 3, }, ], end: 15, }, line: 972, column: 15, }, ], ], ), ], line: 972, }, ], ], line: 972, column: 16, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 972, }, ], end: 40, }, ), Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "200", ), ], ], ), ], line: 974, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "23", ), ], ], ), ], line: 975, }, ], end: 69, }, line: 977, column: 1, }, ], ], ), ], line: 969, }, ], ], line: 979, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 979, }, ], ], line: 979, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 980, }, Operator( ( "==", true, ), ), Symbol( "100", ), Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "x", ), ], line: 980, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "y", ), ], line: 980, }, ], ], ), ], line: 979, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 980, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 981, }, ], ], line: 981, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 982, }, Operator( ( "==", true, ), ), Symbol( "200", ), Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "x", ), ], line: 982, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 982, }, ], ], ), ], line: 981, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 983, }, ], ], ), ], line: 983, }, ], ], line: 983, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 984, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 984, }, Operator( ( "==", true, ), ), Symbol( "23", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 984, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 984, }, ], ], ), ], line: 983, }, ], end: 4208, }, ), DoBlock( CodeBlock { start: 4209, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 991, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 14, code: [ Variable { names: [ ( "xx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 993, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 993, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 993, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 994, }, ], [ Symbol( "\"@XXX\"", ), ], ], ), ], line: 994, }, ], ], ), ], line: 993, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@YYY\"", ), ], ], ), ], line: 994, }, ], end: 36, }, line: 996, column: 1, }, ], ], ), ], line: 992, }, ], ], line: 997, column: 0, }, Variable { names: [ ( "xv", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 48, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 998, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 998, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 998, column: 6, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"@XXX\"", ), ], ], ), ], line: 998, }, ], end: 59, }, line: 999, column: 1, }, ], ], ), ], line: 997, }, ], ], line: 999, column: 2, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 999, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "200", ), ], ], ), ], line: 1000, }, ], end: 85, }, line: 1002, column: 1, }, ], ], ), ], line: 991, }, ], ], line: 1002, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 1003, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 1002, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 1003, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1003, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 1004, }, ], ], ), ], line: 1004, }, ], ], line: 1004, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 1004, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], ], ), ], line: 1004, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 1005, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 1005, }, ], [ Symbol( "\"@YYY\"", ), ], ], ), ], line: 1005, }, ], ], ), ], line: 1004, }, Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1008, column: 0, }, Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1008, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "co", ), ], line: 1008, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 148, code: [ Variable { names: [ ( "xx", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "err", ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "y", ), ], line: 1011, }, ], values: [ [ Ident { expr: [ Symbol( "y", ), ], line: 1011, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 1011, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "err", ), ], line: 1012, }, ], [ Symbol( "\"XXX\"", ), ], ], ), ], line: 1012, }, ], ], ), ], line: 1011, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"YYY\"", ), ], ], ), ], line: 1012, }, ], end: 36, }, line: 1014, column: 1, }, ], ], ), ], line: 1010, }, ], ], line: 1015, column: 0, }, Variable { names: [ ( "xv", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 48, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 1016, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 1016, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 1016, column: 6, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"XXX\"", ), ], ], ), ], line: 1016, }, ], end: 59, }, line: 1017, column: 1, }, ], ], ), ], line: 1015, }, ], ], line: 1017, column: 2, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 1017, }, Return( Some( [ [ Symbol( "200", ), ], ], ), ), ], end: 217, }, line: 1020, column: 1, }, ], ], ), ], line: 1009, }, ], ], line: 1020, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 1021, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 1020, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 1021, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1021, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 1022, }, ], ], ), ], line: 1022, }, ], ], line: 1022, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 1023, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 1023, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 1022, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 1025, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 1025, }, ], [ Symbol( "\"%w+%.%w+:%d+: YYY\"", ), ], ], ), ], line: 1025, }, ], ], ), ], line: 1023, }, ], end: 4476, }, ), Variable { names: [ ( "co", false, ), ], values: [], line: 1030, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "co", ), ], line: 1030, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 4487, code: [ Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 11, code: [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "exit", ), Call( [ [ Symbol( "false", ), ], ], ), ], line: 1033, }, ], end: 18, }, line: 1033, column: 18, }, ], ], ), ], line: 1033, }, ], ], line: 1033, column: 19, }, Alter { names: [ Ident { expr: [ Symbol( "co", ), ], line: 1033, }, ], values: [ [ Symbol( "nil", ), ], ], line: 1034, column: 3, }, Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [], ), ], line: 1034, }, ], end: 4515, }, line: 1036, column: 1, }, ], ], ), ], line: 1031, }, ], ], line: 1036, column: 2, }, Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 1036, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 1038, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 1037, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 1038, }, IfStatement { condition: [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 1042, }, ], [ Symbol( "\"T\"", ), ], ], ), ], line: 1042, }, ], body: CodeBlock { start: 4536, code: [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"to-be-closed variables x coroutines in C\"", ), ], ], ), ], line: 1043, }, DoBlock( CodeBlock { start: 5, code: [ Variable { names: [ ( "token", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1046, column: 0, }, Variable { names: [ ( "count", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1047, column: 0, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "makeCfunc", ), Call( [ [ Symbol( "[[\n toclose 1\n toclose 2\n return .\n ]]", ), ], ], ), ], line: 1047, }, ], ], line: 1053, column: 0, }, Variable { names: [ ( "obj", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [ "_", "msg", ], body: CodeBlock { start: 26, code: [ Alter { names: [ Ident { expr: [ Symbol( "count", ), ], line: 1054, }, ], values: [ [ Ident { expr: [ Symbol( "count", ), ], line: 1054, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 1054, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "token", ), ], line: 1054, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "count", ), ], line: 1055, }, ], [ Ident { expr: [ Symbol( "token", ), ], line: 1055, }, ], ], ), ], line: 1055, }, ], ], line: 1055, column: 10, }, ], end: 42, }, line: 1056, column: 1, }, ], ], ), ], line: 1053, }, ], ], line: 1058, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 1058, }, ], ], ), ], line: 1058, }, ], ], line: 1059, column: 0, }, Variable { names: [ ( "ct", false, ), ( "res", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [ [ Ident { expr: [ Symbol( "obj", ), ], line: 1059, }, ], [ Ident { expr: [ Symbol( "obj", ), ], line: 1059, }, ], [ Symbol( "10", ), ], [ Symbol( "20", ), ], [ Symbol( "30", ), ], [ Symbol( "3", ), ], ], ), ], line: 1059, }, ], ], line: 1059, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "ct", ), ], line: 1061, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), ], line: 1061, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1059, }, Alter { names: [ Ident { expr: [ Symbol( "ct", ), ], line: 1061, }, Ident { expr: [ Symbol( "res", ), ], line: 1063, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 1063, }, ], ], line: 1063, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "ct", ), ], line: 1064, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), ], line: 1064, }, Operator( ( "==", true, ), ), Symbol( "100", ), ], ], ), ], line: 1063, }, Alter { names: [ Ident { expr: [ Symbol( "res", ), ], line: 1064, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "co", ), Call( [ [ Symbol( "200", ), ], ], ), ], line: 1065, }, ], ), ], line: 1065, column: 8, }, ], ], line: 1065, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 1066, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 1066, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 1066, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 1066, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 1065, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "token", ), ], line: 1067, }, Operator( ( "==", true, ), ), Symbol( "200", ), ], ], ), ], line: 1066, }, ], end: 149, }, ), DoBlock( CodeBlock { start: 150, code: [ Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "makeCfunc", ), Call( [ [ Symbol( "[[\n toclose 1\n return .\n ]]", ), ], ], ), ], line: 1071, }, ], ], line: 1076, column: 0, }, Variable { names: [ ( "obj", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 15, code: [ Variable { names: [ ( "temp", false, ), ], values: [], line: 1077, column: 2, }, Variable { names: [ ( "x", true, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Ident { expr: [ Symbol( "temp", ), ], line: 1079, }, ], ], ), ], line: 1079, }, Return( Some( [ [ Symbol( "1", ), ], [ Symbol( "2", ), ], [ Symbol( "3", ), ], ], ), ), ], end: 26, }, line: 1081, column: 1, }, ], ], ), ], line: 1078, }, ], ], line: 1081, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "temp", ), ], line: 1081, }, ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), Call( [ [ Symbol( "\"closing obj\"", ), ], ], ), ], line: 1082, }, ], ], line: 1083, column: 0, }, Return( Some( [ [ Symbol( "1", ), ], [ Symbol( "2", ), ], [ Symbol( "3", ), ], ], ), ), ], end: 57, }, line: 1084, column: 1, }, ], ], ), ], line: 1076, }, ], ], line: 1086, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "wrap", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 1086, }, ], ], ), ], line: 1086, }, ], ], line: 1087, column: 0, }, Variable { names: [ ( "res", false, ), ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [ [ Ident { expr: [ Symbol( "obj", ), ], line: 1087, }, ], [ Symbol( "10", ), ], [ Symbol( "30", ), ], [ Symbol( "1", ), ], ], ), ], line: 1087, }, ], ], line: 1087, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res", ), ], line: 1088, }, Operator( ( "==", true, ), ), Symbol( "\"closing obj\"", ), ], ], ), ], line: 1087, }, Alter { names: [ Ident { expr: [ Symbol( "res", ), ], line: 1088, }, ], values: [ [ Ident { expr: [ Symbol( "co", ), Call( [ [ Symbol( "\"closing x\"", ), ], ], ), ], line: 1089, }, ], ], line: 1089, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res", ), ], line: 1090, }, Operator( ( "==", true, ), ), Symbol( "\"closing x\"", ), ], ], ), ], line: 1089, }, Alter { names: [ Ident { expr: [ Symbol( "res", ), ], line: 1090, }, ], values: [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "co", ), Call( [], ), ], line: 1091, }, ], ), ], line: 1091, column: 7, }, ], ], line: 1091, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 1092, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "res", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 1092, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 1091, }, ], end: 272, }, ), DoBlock( CodeBlock { start: 273, code: [ Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "makeCfunc", ), Call( [ [ Symbol( "[[\n toclose 1\n closeslot 1\n ]]", ), ], ], ), ], line: 1097, }, ], ], line: 1101, column: 0, }, Variable { names: [ ( "obj", false, ), ], values: [ [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "yield", ), ], line: 1101, }, ], ], ), ], line: 1101, }, ], ], line: 1102, column: 0, }, Variable { names: [ ( "co", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "create", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 1102, }, ], ], ), ], line: 1102, }, ], ], line: 1103, column: 0, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "coroutine", ), Symbol( ".", ), Symbol( "resume", ), Call( [ [ Ident { expr: [ Symbol( "co", ), ], line: 1103, }, ], [ Ident { expr: [ Symbol( "obj", ), ], line: 1103, }, ], ], ), ], line: 1103, }, ], ], line: 1103, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 1104, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 1104, }, ], [ Symbol( "\"attempt to yield across\"", ), ], ], ), ], line: 1104, }, ], ], ), ], line: 1103, }, Variable { names: [ ( "f", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "makeCfunc", ), Call( [ [ Symbol( "[[\n toclose 1\n ]]", ), ], ], ), ], line: 1107, }, ], ], line: 1110, column: 0, }, Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 1110, }, ], [ Ident { expr: [ Symbol( "obj", ), ], line: 1110, }, ], ], ), ], line: 1110, }, ], ], line: 1110, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 1111, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 1111, }, ], [ Symbol( "\"attempt to yield from outside\"", ), ], ], ), ], line: 1111, }, ], ], ), ], line: 1110, }, ], end: 358, }, ), ], end: 4895, }, next: None, line: 1113, column: 1, }, DoBlock( CodeBlock { start: 4896, code: [ Variable { names: [ ( "numopen", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1120, column: 0, }, Function { local: true, name: [ Symbol( "open", ), ], args: [ "x", ], body: CodeBlock { start: 10, code: [ Alter { names: [ Ident { expr: [ Symbol( "numopen", ), ], line: 1121, }, ], values: [ [ Ident { expr: [ Symbol( "numopen", ), ], line: 1121, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 1122, column: 0, }, Return( Some( [ [ Lambda { args: [], body: CodeBlock { start: 9, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 1124, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 1124, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], line: 1125, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 1125, }, Operator( ( ">", true, ), ), Symbol( "0", ), ], body: CodeBlock { start: 10, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 1125, }, ], ], ), ), ], end: 13, }, next: None, line: 1125, column: 8, }, ], end: 23, }, line: 1126, column: 1, }, ], [ Symbol( "nil", ), ], [ Symbol( "nil", ), ], [ Ident { expr: [ Symbol( "func2close", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 33, code: [ Alter { names: [ Ident { expr: [ Symbol( "numopen", ), ], line: 1129, }, ], values: [ [ Ident { expr: [ Symbol( "numopen", ), ], line: 1129, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ], line: 1129, column: 5, }, ], end: 39, }, line: 1129, column: 11, }, ], ], ), ], line: 1128, }, ], ], ), ), ], end: 51, }, line: 1130, column: 1, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1133, column: 0, }, ForFuncLoop { iters: [ "i", ], expr: [ Ident { expr: [ Symbol( "open", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 1133, }, ], stop: None, initial: None, code: CodeBlock { start: 63, code: [ Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 1134, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 1134, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 1134, }, ], ], line: 1134, column: 5, }, ], end: 69, }, line: 1135, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 1136, }, Operator( ( "==", true, ), ), Symbol( "45", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "numopen", ), ], line: 1136, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1135, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1139, column: 0, }, ForFuncLoop { iters: [ "i", ], expr: [ Ident { expr: [ Symbol( "open", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 1139, }, ], stop: None, initial: None, code: CodeBlock { start: 91, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 1140, }, Operator( ( "<", true, ), ), Symbol( "5", ), ], body: CodeBlock { start: 5, code: [ Break, ], end: 7, }, next: None, line: 1140, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 1140, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 1141, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 1141, }, ], ], line: 1141, column: 5, }, ], end: 104, }, line: 1142, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 1143, }, Operator( ( "==", true, ), ), Symbol( "35", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "numopen", ), ], line: 1143, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1142, }, Variable { names: [ ( "s", false, ), ], values: [ [ Symbol( "0", ), ], ], line: 1146, column: 0, }, ForFuncLoop { iters: [ "i", ], expr: [ Ident { expr: [ Symbol( "open", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 1146, }, ], stop: None, initial: None, code: CodeBlock { start: 126, code: [ ForFuncLoop { iters: [ "j", ], expr: [ Ident { expr: [ Symbol( "open", ), Call( [ [ Symbol( "10", ), ], ], ), ], line: 1147, }, ], stop: None, initial: None, code: CodeBlock { start: 8, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 1148, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "j", ), ], line: 1148, }, Operator( ( "<", true, ), ), Symbol( "5", ), ], body: CodeBlock { start: 7, code: [], end: 8, }, next: None, line: 1148, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "s", ), ], line: 1148, }, ], values: [ [ Ident { expr: [ Symbol( "s", ), ], line: 1149, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 1149, }, ], ], line: 1149, column: 5, }, ], end: 22, }, line: 1150, column: 1, }, ], end: 149, }, line: 1151, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 1153, }, Operator( ( "==", true, ), ), Symbol( "375", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "numopen", ), ], line: 1153, }, Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 1151, }, ], end: 5056, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 1154, }, Return( Some( [ [ Symbol( "5", ), ], [ Ident { expr: [ Symbol( "f", ), ], line: 1158, }, ], ], ), ), ], end: 5790, }, ), ]