--- source: src/main.rs expression: parsed input_file: test-data/lua5.2-tests/code.lua --- [ IfStatement { condition: [ Ident { expr: [ Symbol( "T", ), ], line: 1, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 5, code: [ Expr( [ Ident { expr: [ Symbol( "Message", ), ], line: 2, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "print", ), ], line: 2, }, ], ), Ident { expr: [ Call( [ [ Symbol( "'\\a\\n >>> testC not active: skipping opcode tests <<<\\n\\a'", ), ], ], ), ], line: 2, }, Return( None, ), ], end: 15, }, next: None, line: 4, column: 1, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing code generation and optimizations\"", ), ], ], ), ], line: 4, }, DoBlock( CodeBlock { start: 18, code: [ Function { local: true, name: [ Symbol( "f", ), ], args: [ "a", ], body: CodeBlock { start: 6, code: [ ForFuncLoop { iters: [ "k", "v", "w", ], expr: [ Ident { expr: [ Symbol( "a", ), ], line: 11, }, ], stop: None, initial: None, code: CodeBlock { start: 9, code: [], end: 10, }, line: 11, column: 10, }, ], end: 17, }, line: 12, column: 1, }, ], end: 36, }, ), Function { local: false, name: [ Symbol( "check", ), ], args: [ "f", "...", ], body: CodeBlock { start: 43, code: [ Variable { names: [ ( "arg", false, ), ], values: [ [ Table { data: [ ( None, [ Symbol( "...", ), ], ), ], line: 17, column: 6, }, ], ], line: 18, column: 0, }, Variable { names: [ ( "c", false, ), ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "listcode", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 18, }, ], ], ), ], line: 18, }, ], ], line: 19, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "arg", ), ], line: 19, }, ], step: None, code: CodeBlock { start: 23, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "find", ), Call( [ [ Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 21, }, ], ), Symbol( "]", ), ], line: 21, }, ], [ Symbol( "'- '", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "arg", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 21, }, ], ), Symbol( "]", ), ], line: 21, }, Operator( ( "..", true, ), ), Symbol( "' *%d'", ), ], ], ), ], line: 21, }, ], ], ), ], line: 21, }, ], end: 45, }, line: 22, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "arg", ), ], line: 23, }, Operator( ( "+", true, ), ), Symbol( "2", ), ], ), Symbol( "]", ), ], line: 23, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 22, }, ], end: 101, }, line: 24, column: 1, }, Function { local: false, name: [ Symbol( "checkequal", ), ], args: [ "a", "b", ], body: CodeBlock { start: 108, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 27, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "listcode", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 27, }, ], ], ), ], line: 27, }, ], ], line: 27, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 27, }, ], values: [ [ Ident { expr: [ Symbol( "T", ), Symbol( ".", ), Symbol( "listcode", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 28, }, ], ], ), ], line: 28, }, ], ], line: 29, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Operator( ( "#", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 29, }, ], step: None, code: CodeBlock { start: 24, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 30, }, ], ), Symbol( "]", ), ], line: 30, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 30, }, ], ), Symbol( "]", ), ], line: 30, }, ], [ Symbol( "'%b()'", ), ], [ Symbol( "''", ), ], ], ), ], line: 30, }, ], ], line: 30, column: 18, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 31, }, ], ), Symbol( "]", ), ], line: 30, }, ], values: [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "gsub", ), Call( [ [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 31, }, ], ), Symbol( "]", ), ], line: 31, }, ], [ Symbol( "'%b()'", ), ], [ Symbol( "''", ), ], ], ), ], line: 31, }, ], ], line: 31, column: 18, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 32, }, ], ), Symbol( "]", ), ], line: 32, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 32, }, ], ), Symbol( "]", ), ], line: 32, }, ], ], ), ], line: 31, }, ], end: 73, }, line: 33, column: 1, }, ], end: 182, }, line: 34, column: 1, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 187, code: [ Expr( [ Lambda { args: [], body: CodeBlock { start: 4, code: [], end: 5, }, line: 38, column: 5, }, ], ), Ident { expr: [ Call( [ [ Table { data: [ ( None, [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 38, }, ], ), ], line: 38, column: 11, }, ], ], ), ], line: 38, }, ], end: 199, }, line: 39, column: 1, }, ], [ Symbol( "'CLOSURE'", ), ], [ Symbol( "'NEWTABLE'", ), ], [ Symbol( "'GETTABUP'", ), ], [ Symbol( "'CALL'", ), ], [ Symbol( "'SETLIST'", ), ], [ Symbol( "'CALL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 34, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 219, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ], values: [], line: 44, column: 6, }, Variable { names: [ ( "d", false, ), ], values: [], line: 45, column: 3, }, Variable { names: [ ( "e", false, ), ], values: [], line: 45, column: 6, }, Variable { names: [ ( "f", false, ), ( "g", false, ), ( "h", false, ), ], values: [], line: 46, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 46, }, ], values: [ [ Symbol( "nil", ), ], ], line: 47, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 47, }, ], values: [ [ Symbol( "nil", ), ], ], line: 47, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 47, }, ], values: [ [ Symbol( "nil", ), ], ], line: 47, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 47, }, ], values: [ [ Symbol( "nil", ), ], ], line: 47, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), ], line: 47, }, ], values: [ [ Symbol( "nil", ), ], ], line: 47, column: 20, }, ], end: 259, }, line: 48, column: 1, }, ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 39, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 269, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [ [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], ], line: 51, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 51, }, ], values: [ [ Symbol( "nil", ), ], ], line: 52, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), ], line: 52, }, ], values: [ [ Symbol( "nil", ), ], ], line: 52, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 52, }, ], values: [ [ Symbol( "nil", ), ], ], line: 52, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 52, }, ], values: [ [ Symbol( "nil", ), ], ], line: 52, column: 15, }, ], end: 301, }, line: 53, column: 1, }, ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 48, }, DoBlock( CodeBlock { start: 315, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [ [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], [ Symbol( "1", ), ], ], line: 56, column: 16, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 56, }, ], values: [ [ Symbol( "nil", ), ], ], line: 57, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), ], line: 57, }, ], values: [ [ Symbol( "nil", ), ], ], line: 57, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 57, }, ], values: [ [ Symbol( "nil", ), ], ], line: 57, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 57, }, ], values: [ [ Symbol( "nil", ), ], ], line: 57, column: 15, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 58, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 58, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 58, }, Operator( ( "==", true, ), ), Symbol( "nil", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 58, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 57, }, ], end: 365, }, ), Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [ "a", "b", "c", ], body: CodeBlock { start: 375, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 63, }, ], ], ), ), ], end: 378, }, line: 63, column: 13, }, ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 59, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 386, code: [ WhileLoop { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 3, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ], line: 67, column: 5, }, ], end: 9, }, line: 67, column: 9, }, ], end: 396, }, line: 67, column: 15, }, ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 63, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 408, code: [ WhileLoop { condition: [ Symbol( "1", ), ], body: CodeBlock { start: 3, code: [ Variable { names: [ ( "a", false, ), ], values: [ [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ], line: 70, column: 5, }, ], end: 9, }, line: 70, column: 9, }, ], end: 418, }, line: 70, column: 15, }, ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 68, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 430, code: [ RepeatLoop { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 1, code: [ Variable { names: [ ( "x", false, ), ], values: [ [ Symbol( "1", ), ], ], line: 73, column: 4, }, ], end: 6, }, line: 73, column: 7, }, ], end: 438, }, line: 73, column: 13, }, ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 71, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [ "a", "b", "c", "d", ], body: CodeBlock { start: 455, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 78, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 78, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 78, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 78, }, ], ], ), ), ], end: 464, }, line: 78, column: 21, }, ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'CONCAT'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 74, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 482, code: [ Return( Some( [ [ Operator( ( "not", false, ), ), Operator( ( "not", false, ), ), Symbol( "nil", ), ], ], ), ), ], end: 487, }, line: 82, column: 10, }, ], [ Symbol( "'LOADBOOL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 79, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 497, code: [ Return( Some( [ [ Operator( ( "not", false, ), ), Operator( ( "not", false, ), ), Symbol( "false", ), ], ], ), ), ], end: 502, }, line: 83, column: 10, }, ], [ Symbol( "'LOADBOOL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 82, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 512, code: [ Return( Some( [ [ Operator( ( "not", false, ), ), Operator( ( "not", false, ), ), Symbol( "true", ), ], ], ), ), ], end: 517, }, line: 84, column: 10, }, ], [ Symbol( "'LOADBOOL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 83, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 527, code: [ Return( Some( [ [ Operator( ( "not", false, ), ), Operator( ( "not", false, ), ), Symbol( "1", ), ], ], ), ), ], end: 532, }, line: 85, column: 10, }, ], [ Symbol( "'LOADBOOL'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 84, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 542, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ( "d", false, ), ], values: [], line: 89, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 89, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), ], line: 90, }, Operator( ( "*", true, ), ), Symbol( "2", ), ], ], line: 90, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 90, }, Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "b", ), ], line: 91, }, ], ), Symbol( "]", ), ], line: 91, }, ], values: [ [ Operator( ( "-", false, ), ), Expr( [ Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 91, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 91, }, Operator( ( "/", true, ), ), Operator( ( "-", false, ), ), Symbol( "20.5", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "b", ), ], line: 91, }, ], ), Symbol( "]", ), ], line: 91, }, ], ), Ident { expr: [], line: 91, }, Operator( ( "^", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 91, }, ], ), Ident { expr: [], line: 91, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 91, }, ], ], line: 91, column: 32, }, ], end: 588, }, line: 92, column: 1, }, ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'MUL'", ), ], [ Symbol( "'DIV'", ), ], [ Symbol( "'ADD'", ), ], [ Symbol( "'GETTABLE'", ), ], [ Symbol( "'SUB'", ), ], [ Symbol( "'GETTABLE'", ), ], [ Symbol( "'POW'", ), ], [ Symbol( "'UNM'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 85, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 618, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ], values: [], line: 101, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 101, }, ], values: [ [ Symbol( "0", ), ], ], line: 102, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 102, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), ], line: 103, }, ], ], line: 103, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "b", ), ], line: 104, }, ], ), Symbol( "]", ), ], line: 103, }, ], values: [ [ Symbol( "'y'", ), ], ], line: 104, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 104, }, ], values: [ [ Symbol( "1", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 105, }, ], ], line: 105, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 105, }, ], values: [ [ Symbol( "1", ), Operator( ( "/", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 106, }, ], ], line: 106, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 106, }, ], values: [ [ Symbol( "5", ), Operator( ( "+", true, ), ), Symbol( "4", ), ], ], line: 107, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "true", ), ], ), Symbol( "]", ), ], line: 107, }, ], values: [ [ Symbol( "false", ), ], ], line: 108, column: 6, }, ], end: 660, }, line: 109, column: 1, }, ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'SUB'", ), ], [ Symbol( "'DIV'", ), ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 96, }, Function { local: true, name: [ Symbol( "f", ), ], args: [], body: CodeBlock { start: 684, code: [ Return( Some( [ [ Operator( ( "-", false, ), ), Expr( [ Expr( [ Symbol( "2", ), Operator( ( "^", true, ), ), Symbol( "8", ), Operator( ( "+", true, ), ), Operator( ( "-", false, ), ), Expr( [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ), Ident { expr: [], line: 115, }, ], ), Ident { expr: [], line: 115, }, Operator( ( "%", true, ), ), Symbol( "8", ), ], ), Ident { expr: [], line: 115, }, Operator( ( "/", true, ), ), Symbol( "2", ), Operator( ( "*", true, ), ), Symbol( "4", ), Operator( ( "-", true, ), ), Symbol( "3", ), ], ], ), ), ], end: 708, }, line: 115, column: 29, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "f", ), ], line: 117, }, ], [ Symbol( "'LOADK'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 115, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "f", ), Call( [], ), ], line: 118, }, Operator( ( "==", true, ), ), Operator( ( "-", false, ), ), Symbol( "5", ), ], ], ), ], line: 117, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 730, code: [ Return( Some( [ [ Operator( ( "-", false, ), ), Symbol( "nil", ), ], ], ), ), ], end: 734, }, line: 122, column: 9, }, ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'UNM'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 118, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 746, code: [ Variable { names: [ ( "a", false, ), ( "b", false, ), ( "c", false, ), ], values: [], line: 127, column: 6, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "c", ), ], line: 128, }, ], ), Symbol( "]", ), ], line: 127, }, Ident { expr: [ Symbol( "a", ), ], line: 128, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), ], line: 128, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 128, }, ], ], line: 128, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 129, }, ], ), Symbol( "]", ), ], line: 128, }, Ident { expr: [ Symbol( "a", ), ], line: 129, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), ], line: 129, }, ], [ Ident { expr: [ Symbol( "b", ), ], line: 129, }, ], ], line: 129, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 129, }, Ident { expr: [ Symbol( "b", ), ], line: 130, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), ], line: 130, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 130, }, ], ], line: 130, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 130, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 131, }, ], ], line: 131, column: 3, }, ], end: 783, }, line: 132, column: 1, }, ], [ Symbol( "'LOADNIL'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'SETTABLE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'MOVE'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 123, }, Ident { expr: [ Symbol( "checkequal", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 813, code: [ IfStatement { condition: [ Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 143, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ), Ident { expr: [], line: 143, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 143, }, ], values: [ [ Symbol( "1", ), ], ], line: 143, column: 3, }, ], end: 11, }, next: None, line: 143, column: 11, }, IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 144, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 144, }, ], values: [ [ Symbol( "1", ), ], ], line: 144, column: 3, }, ], end: 21, }, next: None, line: 144, column: 10, }, ], end: 835, }, line: 145, column: 1, }, ], [ Lambda { args: [], body: CodeBlock { start: 839, code: [ IfStatement { condition: [ Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 147, }, Operator( ( "==", true, ), ), Symbol( "9", ), ], ), Ident { expr: [], line: 147, }, ], body: CodeBlock { start: 7, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 147, }, ], values: [ [ Symbol( "1", ), ], ], line: 147, column: 3, }, ], end: 11, }, next: None, line: 147, column: 11, }, IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 148, }, Operator( ( "~=", true, ), ), Symbol( "9", ), ], body: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 148, }, ], values: [ [ Symbol( "1", ), ], ], line: 148, column: 3, }, ], end: 21, }, next: None, line: 148, column: 10, }, ], end: 861, }, line: 149, column: 1, }, ], ], ), ], line: 138, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 867, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 151, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 151, }, ], values: [ [ Symbol( "1", ), ], ], line: 151, column: 3, }, ], end: 9, }, next: None, line: 151, column: 9, }, ], end: 877, }, line: 151, column: 15, }, ], [ Symbol( "'GETTABUP'", ), ], [ Symbol( "'EQ'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'SETTABUP'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 149, }, Ident { expr: [ Symbol( "checkequal", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 893, code: [ Variable { names: [ ( "a", false, ), ], values: [], line: 156, column: 3, }, IfStatement { condition: [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 156, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 156, }, ], ), Ident { expr: [], line: 156, }, ], body: CodeBlock { start: 11, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 156, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 156, }, ], ], line: 156, column: 3, }, ], end: 15, }, next: None, line: 156, column: 15, }, ], end: 909, }, line: 157, column: 1, }, ], [ Lambda { args: [], body: CodeBlock { start: 913, code: [ Variable { names: [ ( "a", false, ), ], values: [], line: 159, column: 3, }, IfStatement { condition: [ Expr( [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 159, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "b", ), ], line: 159, }, ], ), Ident { expr: [], line: 159, }, ], body: CodeBlock { start: 12, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 159, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 159, }, ], ], line: 159, column: 3, }, ], end: 16, }, next: None, line: 159, column: 16, }, ], end: 930, }, line: 160, column: 1, }, ], ], ), ], line: 152, }, Ident { expr: [ Symbol( "checkequal", ), Call( [ [ Lambda { args: [ "l", ], body: CodeBlock { start: 937, code: [ Variable { names: [ ( "a", false, ), ], values: [], line: 163, column: 3, }, Return( Some( [ [ Symbol( "0", ), Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 163, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 163, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "l", ), ], line: 163, }, ], ], ), ), ], end: 949, }, line: 164, column: 1, }, ], [ Lambda { args: [ "l", ], body: CodeBlock { start: 954, code: [ Variable { names: [ ( "a", false, ), ], values: [], line: 166, column: 3, }, Return( Some( [ [ Operator( ( "not", false, ), ), Expr( [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 166, }, Operator( ( ">=", true, ), ), Symbol( "0", ), ], ), Ident { expr: [], line: 166, }, Operator( ( "or", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 166, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "l", ), ], line: 166, }, ], ), Ident { expr: [], line: 166, }, ], ), Ident { expr: [], line: 166, }, ], ], ), ), ], end: 975, }, line: 167, column: 1, }, ], ], ), ], line: 160, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Lambda { args: [ "a", ], body: CodeBlock { start: 982, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 172, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], body: CodeBlock { start: 5, code: [], end: 6, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 173, }, Operator( ( "==", true, ), ), Symbol( "2", ), ], body: CodeBlock { start: 10, code: [], end: 11, }, next: Some( IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 174, }, Operator( ( "==", true, ), ), Symbol( "3", ), ], body: CodeBlock { start: 15, code: [], end: 16, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 16, code: [ IfStatement { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 176, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], body: CodeBlock { start: 5, code: [], end: 6, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 6, code: [], end: 7, }, next: None, line: 178, column: 1, }, ), line: 178, column: 1, }, ], end: 24, }, next: None, line: 179, column: 1, }, ), line: 179, column: 1, }, ), line: 179, column: 1, }, ), line: 179, column: 1, }, ], end: 1007, }, line: 180, column: 1, }, ], [ Symbol( "'EQ'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'EQ'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'EQ'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'EQ'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'JMP'", ), ], [ Symbol( "'RETURN'", ), ], ], ), ], line: 167, }, Ident { expr: [ Symbol( "checkequal", ), Call( [ [ Lambda { args: [ "a", ], body: CodeBlock { start: 1034, code: [ WhileLoop { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 183, }, Operator( ( "<", true, ), ), Symbol( "10", ), ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 183, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 183, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 183, column: 5, }, ], end: 11, }, line: 183, column: 11, }, ], end: 1046, }, line: 183, column: 16, }, ], [ Lambda { args: [ "a", ], body: CodeBlock { start: 1051, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 185, }, Operator( ( "<", true, ), ), Symbol( "10", ), ], ), Ident { expr: [], line: 185, }, ], body: CodeBlock { start: 8, code: [], end: 9, }, next: None, line: 185, column: 9, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 186, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 186, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 186, column: 7, }, ], end: 1068, }, line: 187, column: 1, }, ], ], ), ], line: 180, }, Ident { expr: [ Symbol( "checkequal", ), Call( [ [ Lambda { args: [ "a", ], body: CodeBlock { start: 1075, code: [ WhileLoop { condition: [ Ident { expr: [ Symbol( "a", ), ], line: 191, }, Operator( ( "<", true, ), ), Symbol( "10", ), ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 191, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 191, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 191, column: 5, }, ], end: 11, }, line: 191, column: 11, }, ], end: 1087, }, line: 191, column: 16, }, ], [ Lambda { args: [ "a", ], body: CodeBlock { start: 1092, code: [ WhileLoop { condition: [ Symbol( "true", ), ], body: CodeBlock { start: 3, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 194, }, Operator( ( "<", true, ), ), Symbol( "10", ), ], ), Ident { expr: [], line: 194, }, ], body: CodeBlock { start: 8, code: [ Break, ], end: 10, }, next: None, line: 194, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 195, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), ], line: 195, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 195, column: 7, }, ], end: 21, }, line: 196, column: 1, }, ], end: 1114, }, line: 197, column: 1, }, ], ], ), ], line: 188, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 198, }, ]