--- source: src/main.rs expression: parsed input_file: test-data/lua5.4-tests/goto.lua --- [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 4, }, Function { local: true, name: [ Symbol( "errmsg", ), ], args: [ "code", "m", ], body: CodeBlock { start: 11, code: [ Variable { names: [ ( "st", false, ), ( "msg", false, ), ], values: [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "code", ), ], line: 7, }, ], ], ), ], line: 7, }, ], ], line: 7, column: 9, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "st", ), ], line: 8, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "msg", ), ], line: 8, }, ], [ Ident { expr: [ Symbol( "m", ), ], line: 8, }, ], ], ), ], line: 8, }, ], ], ), ], line: 7, }, ], end: 35, }, line: 9, column: 1, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ goto l1; do ::l1:: end ]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 9, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ do ::l1:: end goto l1; ]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 12, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ ::l1:: ::l1:: ]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 13, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ ::l1:: do ::l1:: end]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 16, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ goto l1; local aa ::l1:: ::l2:: print(3) ]]", ), ], [ Symbol( "\"local 'aa'\"", ), ], ], ), ], line: 17, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[\ndo local bb, cc; end\nlocal aa\n print(3)\n]]", ), ], [ Symbol( "\"local 'aa'\"", ), ], ], ), ], line: 21, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ do ::l1:: end goto l1 ]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 28, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[ goto l1 do ::l1:: end ]]", ), ], [ Symbol( "\"label 'l1'\"", ), ], ], ), ], line: 31, }, Ident { expr: [ Symbol( "errmsg", ), Call( [ [ MultilineString( "[[\n repeat\n if x then end\n local xuxu = 10\n\n until xuxu < x\n]]", ), ], [ Symbol( "\"local 'xuxu'\"", ), ], ], ), ], line: 32, }, Variable { names: [ ( "x", false, ), ], values: [], line: 44, column: 2, }, DoBlock( CodeBlock { start: 92, code: [ Variable { names: [ ( "y", false, ), ], values: [ [ Symbol( "12", ), ], ], line: 46, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 46, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 48, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 48, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 48, }, ], values: [ [ Ident { expr: [ Symbol( "y", ), ], line: 49, }, ], ], line: 49, column: 4, }, ], end: 107, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 51, }, Operator( ( "==", true, ), ), Symbol( "13", ), ], ], ), ], line: 50, }, DoBlock( CodeBlock { start: 114, code: [ Variable { names: [ ( "prog", false, ), ], values: [ [ MultilineString( "[[\n do\n local a = 1\n a = a + 1\n a = a + 10\n a = a + 2\n a = a + 20\n return a\n end\n ]]", ), ], ], line: 66, column: 0, }, Variable { names: [ ( "label", false, ), ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "rep", ), Call( [ [ Symbol( "\"0123456789\"", ), ], [ Symbol( "40", ), ], ], ), ], line: 66, }, ], ], line: 66, column: 11, }, Alter { names: [ Ident { expr: [ Symbol( "prog", ), ], line: 66, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 67, }, ], [ Ident { expr: [ Symbol( "label", ), ], line: 67, }, ], [ Ident { expr: [ Symbol( "label", ), ], line: 67, }, ], [ Ident { expr: [ Symbol( "label", ), ], line: 67, }, ], [ Ident { expr: [ Symbol( "label", ), ], line: 67, }, ], ], ), ], line: 67, }, ], ], line: 67, column: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "load", ), Call( [ [ Ident { expr: [ Symbol( "prog", ), ], line: 68, }, ], ], ), ], line: 68, }, ], ], ), Call( [], ), ], line: 68, }, Operator( ( "==", true, ), ), Symbol( "31", ), ], ], ), ], line: 67, }, ], end: 160, }, ), DoBlock( CodeBlock { start: 161, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "23", ), ], ], line: 74, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 74, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 75, }, ], ], line: 76, column: 1, }, ], end: 170, }, ), WhileLoop { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 173, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "45", ), ], ], line: 83, column: 1, }, ], end: 181, }, line: 84, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 85, }, Operator( ( "==", true, ), ), Symbol( "13", ), ], ], ), ], line: 84, }, IfStatement { condition: [ Ident { expr: [ Symbol( "print", ), ], line: 87, }, ], body: CodeBlock { start: 190, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"should not be here\"", ), ], ], ), ], line: 89, }, Variable { names: [ ( "x", false, ), ], values: [], line: 92, column: 1, }, ], end: 200, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 200, code: [], end: 201, }, next: None, line: 94, column: 1, }, ), line: 94, column: 1, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 206, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 98, column: 5, }, ], ], line: 98, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 100, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 98, }, ], values: [ [ Symbol( "1", ), ], ], line: 100, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 101, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 100, }, ], values: [ [ Symbol( "2", ), ], ], line: 101, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 103, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 101, }, ], values: [ [ Symbol( "3", ), ], ], line: 103, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 104, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 103, }, ], values: [ [ Symbol( "4", ), ], ], line: 104, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 105, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 104, }, ], values: [ [ Symbol( "5", ), ], ], line: 105, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 106, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 106, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 106, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 106, }, Operator( ( "==", true, ), ), Symbol( "5", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "5", ), ], ), Symbol( "]", ), ], line: 107, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 105, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "6", ), ], ), Symbol( "]", ), ], line: 108, }, ], body: CodeBlock { start: 99, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "6", ), ], ), Symbol( "]", ), ], line: 108, }, ], values: [ [ Symbol( "true", ), ], ], line: 108, column: 7, }, ], end: 107, }, next: None, line: 108, column: 15, }, ], end: 314, }, line: 109, column: 1, }, Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 109, }, DoBlock( CodeBlock { start: 318, code: [ Variable { names: [ ( "x", false, ), ], values: [], line: 115, column: 2, }, Variable { names: [ ( "y", false, ), ], values: [], line: 117, column: 2, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 118, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 117, }, Alter { names: [ Ident { expr: [ Symbol( "y", ), ], line: 118, }, ], values: [ [ Symbol( "true", ), ], ], line: 120, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "x", ), ], line: 120, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 18, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 121, }, ], values: [ [ Symbol( "1", ), ], ], line: 121, column: 3, }, ], end: 22, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 22, code: [ Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 123, }, ], values: [ [ Ident { expr: [ Symbol( "x", ), ], line: 123, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 123, column: 5, }, ], end: 28, }, next: None, line: 124, column: 1, }, ), line: 124, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 125, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 125, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 124, }, ], end: 357, }, ), DoBlock( CodeBlock { start: 358, code: [ Variable { names: [ ( "first", false, ), ], values: [ [ Symbol( "true", ), ], ], line: 131, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Symbol( "false", ), ], ], line: 132, column: 0, }, IfStatement { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 133, }, ], values: [ [ Symbol( "true", ), ], ], line: 135, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "first", ), ], line: 135, }, ], body: CodeBlock { start: 6, code: [ Alter { names: [ Ident { expr: [ Symbol( "first", ), ], line: 136, }, ], values: [ [ Symbol( "false", ), ], ], line: 136, column: 3, }, ], end: 10, }, next: None, line: 137, column: 1, }, ], end: 22, }, next: None, line: 138, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 139, }, ], ], ), ], line: 138, }, ], end: 385, }, ), DoBlock( CodeBlock { start: 386, code: [], end: 387, }, ), Variable { names: [ ( "debug", false, ), ], values: [ [ Ident { expr: [ Symbol( "require", ), Call( [ [ Symbol( "'debug'", ), ], ], ), ], line: 149, }, ], ], line: 151, column: 0, }, Function { local: true, name: [ Symbol( "foo", ), ], args: [], body: CodeBlock { start: 397, code: [ Variable { names: [ ( "t", false, ), ], values: [ [ Table { data: [], line: 152, column: 5, }, ], ], line: 153, column: 0, }, DoBlock( CodeBlock { start: 6, code: [ Variable { names: [ ( "i", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 155, column: 0, }, Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [], line: 155, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 155, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 20, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 156, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 156, }, ], [ Ident { expr: [ Symbol( "c", ), ], line: 156, }, ], [ Ident { expr: [ Symbol( "d", ), ], line: 156, }, ], ], ), ), ], end: 29, }, line: 156, column: 17, }, ], ], line: 158, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [], line: 158, column: 2, }, DoBlock( CodeBlock { start: 32, code: [ Variable { names: [ ( "c", false, ), ], values: [], line: 160, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 161, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 160, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 161, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 161, }, ], [ Ident { expr: [ Symbol( "c", ), ], line: 161, }, ], [ Ident { expr: [ Symbol( "d", ), ], line: 161, }, ], ], ), ), ], end: 22, }, line: 161, column: 20, }, ], ], line: 162, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "i", ), ], line: 162, }, Operator( ( ">", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 27, code: [], end: 28, }, next: None, line: 162, column: 6, }, DoBlock( CodeBlock { start: 29, code: [ Variable { names: [ ( "d", false, ), ], values: [], line: 164, column: 2, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "t", ), ], line: 165, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 164, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 13, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 165, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 165, }, ], [ Ident { expr: [ Symbol( "c", ), ], line: 165, }, ], [ Ident { expr: [ Symbol( "d", ), ], line: 165, }, ], ], ), ), ], end: 22, }, line: 165, column: 20, }, ], ], line: 165, column: 20, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 165, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 166, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 167, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [], line: 167, column: 2, }, ], end: 59, }, ), ], end: 92, }, ), ], end: 99, }, ), Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 171, }, ], ], ), ), ], end: 499, }, line: 172, column: 1, }, Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "foo", ), Call( [], ), ], line: 174, }, ], ], line: 174, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 175, }, Operator( ( "==", true, ), ), Symbol( "6", ), ], ], ), ], line: 174, }, ForLoop { iter: "i", start: [ Symbol( "2", ), ], end: [ Symbol( "6", ), ], step: None, code: CodeBlock { start: 519, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 179, }, ], [ Symbol( "1", ), ], ], ), ], line: 179, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 179, }, ], ), Symbol( "]", ), ], line: 179, }, ], [ Symbol( "1", ), ], ], ), ], line: 179, }, ], ], ), ], line: 179, }, ], end: 546, }, line: 180, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "2", ), ], end: [ Symbol( "6", ), ], step: None, code: CodeBlock { start: 553, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 185, }, ], [ Symbol( "2", ), ], ], ), ], line: 185, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 185, }, ], ), Symbol( "]", ), ], line: 185, }, ], [ Symbol( "2", ), ], ], ), ], line: 185, }, ], ], ), ], line: 185, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 186, }, ], [ Symbol( "3", ), ], ], ), ], line: 186, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 186, }, ], ), Symbol( "]", ), ], line: 186, }, ], [ Symbol( "3", ), ], ], ), ], line: 186, }, ], ], ), ], line: 185, }, ], end: 606, }, line: 187, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "3", ), ], end: [ Symbol( "5", ), ], step: Some( [ Symbol( "2", ), ], ), code: CodeBlock { start: 615, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 191, }, ], ), Symbol( "]", ), ], line: 191, }, ], [ Symbol( "2", ), ], ], ), ], line: 191, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 191, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 191, }, ], [ Symbol( "2", ), ], ], ), ], line: 191, }, ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 192, }, ], ), Symbol( "]", ), ], line: 192, }, ], [ Symbol( "3", ), ], ], ), ], line: 192, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 192, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 192, }, ], [ Symbol( "3", ), ], ], ), ], line: 192, }, ], ], ), ], line: 191, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 194, }, ], ), Symbol( "]", ), ], line: 194, }, ], [ Symbol( "2", ), ], ], ), ], line: 194, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 194, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 194, }, ], [ Symbol( "2", ), ], ], ), ], line: 194, }, ], ], ), ], line: 192, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 195, }, ], ), Symbol( "]", ), ], line: 195, }, ], [ Symbol( "3", ), ], ], ), ], line: 195, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 195, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 195, }, ], [ Symbol( "3", ), ], ], ), ], line: 195, }, ], ], ), ], line: 194, }, ], end: 728, }, line: 196, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "2", ), ], end: [ Symbol( "6", ), ], step: Some( [ Symbol( "2", ), ], ), code: CodeBlock { start: 737, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 200, }, ], [ Symbol( "4", ), ], ], ), ], line: 200, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 200, }, ], ), Symbol( "]", ), ], line: 200, }, ], [ Symbol( "4", ), ], ], ), ], line: 200, }, ], ], ), ], line: 200, }, ], end: 764, }, line: 201, column: 1, }, ForLoop { iter: "i", start: [ Symbol( "3", ), ], end: [ Symbol( "5", ), ], step: Some( [ Symbol( "2", ), ], ), code: CodeBlock { start: 773, code: [ ForLoop { iter: "j", start: [ Symbol( "1", ), ], end: [ Symbol( "6", ), ], step: None, code: CodeBlock { start: 7, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 206, }, ], ), Symbol( "]", ), ], line: 206, }, ], [ Symbol( "4", ), ], ], ), ], line: 206, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "upvalueid", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "j", ), ], line: 206, }, ], ), Symbol( "]", ), ], line: 206, }, ], [ Symbol( "4", ), ], ], ), ], line: 206, }, ], ), Ident { expr: [], line: 206, }, Operator( ( "==", true, ), ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 207, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "j", ), ], line: 207, }, ], ), Ident { expr: [], line: 207, }, ], ], ), ], line: 206, }, ], end: 42, }, line: 208, column: 1, }, ], end: 816, }, line: 209, column: 1, }, Function { local: true, name: [ Symbol( "testG", ), ], args: [ "a", ], body: CodeBlock { start: 822, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 215, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], body: CodeBlock { start: 5, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"should never be here!\"", ), ], ], ), ], line: 216, }, ], end: 10, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 217, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 14, code: [], end: 15, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 218, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], body: CodeBlock { start: 19, code: [], end: 20, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 219, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], body: CodeBlock { start: 24, code: [ Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"should never be here!\"", ), ], ], ), ], line: 221, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 221, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 222, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 222, column: 5, }, ], end: 34, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 34, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 224, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 224, }, Operator( ( "*", true, ), ), Symbol( "2", ), ], ], line: 224, column: 6, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"should never be here!\"", ), ], ], ), ], line: 224, }, Ident { expr: [ Symbol( "error", ), Call( [ [ Symbol( "\"should never be here!\"", ), ], ], ), ], line: 225, }, ], end: 49, }, next: None, line: 228, column: 1, }, ), line: 228, column: 1, }, ), line: 228, column: 1, }, ), line: 228, column: 1, }, ), line: 228, column: 1, }, DoBlock( CodeBlock { start: 50, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 229, }, ], ], ), ), ], end: 53, }, ), DoBlock( CodeBlock { start: 54, code: [ Return( Some( [ [ Symbol( "\"2\"", ), ], ], ), ), ], end: 57, }, ), DoBlock( CodeBlock { start: 58, code: [ Return( Some( [ [ Symbol( "\"3\"", ), ], ], ), ), ], end: 61, }, ), Return( Some( [ [ Symbol( "\"1\"", ), ], ], ), ), ], end: 886, }, line: 233, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "testG", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 235, }, Operator( ( "==", true, ), ), Symbol( "\"1\"", ), ], ], ), ], line: 233, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "testG", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 236, }, Operator( ( "==", true, ), ), Symbol( "\"2\"", ), ], ], ), ], line: 235, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "testG", ), Call( [ [ Symbol( "3", ), ], ], ), ], line: 237, }, Operator( ( "==", true, ), ), Symbol( "\"3\"", ), ], ], ), ], line: 236, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "testG", ), Call( [ [ Symbol( "4", ), ], ], ), ], line: 238, }, Operator( ( "==", true, ), ), Symbol( "5", ), ], ], ), ], line: 237, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "testG", ), Call( [ [ Symbol( "5", ), ], ], ), ], line: 239, }, Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 238, }, DoBlock( CodeBlock { start: 932, code: [ Variable { names: [ ( "X", false, ), ], values: [], line: 243, column: 2, }, DoBlock( CodeBlock { start: 3, code: [ Variable { names: [ ( "a", true, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 249, column: 10, }, ], [ Table { data: [ ( Some( [ Symbol( "__close", ), ], ), [ Lambda { args: [], body: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 249, }, ], values: [ [ Symbol( "true", ), ], ], line: 249, column: 3, }, ], end: 21, }, line: 249, column: 21, }, ], ), ], line: 249, column: 22, }, ], ], ), ], line: 249, }, ], ], line: 249, column: 23, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "X", ), ], line: 250, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 249, }, IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 251, }, ], body: CodeBlock { start: 32, code: [], end: 33, }, next: None, line: 251, column: 4, }, ], end: 37, }, ), Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "X", ), ], line: 254, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 252, }, ], end: 976, }, ), Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 255, }, ]