--- source: src/main.rs expression: parsed input_file: test-data/lua5.1-tests/events.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'testing metatables'", ), ], ], ), ], line: 1, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 1, }, ], values: [ [ Symbol( "20", ), ], ], line: 3, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "B", ), ], line: 3, }, ], values: [ [ Symbol( "30", ), ], ], line: 3, column: 7, }, Ident { expr: [ Symbol( "setfenv", ), Call( [ [ Symbol( "1", ), ], [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 5, column: 8, }, ], [ Table { data: [ ( Some( [ Symbol( "__index", ), ], ), [ Ident { expr: [ Symbol( "_G", ), ], line: 5, }, ], ), ], line: 5, column: 14, }, ], ], ), ], line: 5, }, ], ], ), ], line: 3, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 5, }, Alter { names: [ Ident { expr: [ Symbol( "X", ), ], line: 7, }, ], values: [ [ Ident { expr: [ Symbol( "X", ), ], line: 9, }, Operator( ( "+", true, ), ), Symbol( "10", ), ], ], line: 9, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "X", ), ], line: 10, }, Operator( ( "==", true, ), ), Symbol( "30", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "X", ), ], line: 10, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 9, }, Alter { names: [ Ident { expr: [ Symbol( "B", ), ], line: 10, }, ], values: [ [ Symbol( "false", ), ], ], line: 11, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "B", ), ], line: 12, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 11, }, Alter { names: [ Ident { expr: [ Symbol( "B", ), ], line: 12, }, ], values: [ [ Symbol( "nil", ), ], ], line: 13, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "B", ), ], line: 14, }, Operator( ( "==", true, ), ), Symbol( "30", ), ], ], ), ], line: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Table { data: [], line: 16, column: 5, }, ], ], ), ], line: 16, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "4", ), ], ], ), ], line: 17, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 16, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 18, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 17, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 18, }, ], values: [ [ Table { data: [], line: 19, column: 4, }, ], ], line: 19, column: 5, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 19, }, ], [ Table { data: [ ( Some( [ Symbol( "__metatable", ), ], ), [ Symbol( "\"xuxu\"", ), ], ), ( Some( [ Symbol( "__tostring", ), ], ), [ Lambda { args: [ "x", ], body: CodeBlock { start: 111, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), Symbol( ".", ), Symbol( "name", ), ], line: 20, }, ], ], ), ), ], end: 116, }, line: 20, column: 11, }, ], ), ], line: 20, column: 12, }, ], ], ), ], line: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 21, }, ], ], ), ], line: 21, }, Operator( ( "==", true, ), ), Symbol( "\"xuxu\"", ), ], ], ), ], line: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 22, }, ], ], ), ], line: 22, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 21, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "pcall", ), Call( [ [ Ident { expr: [ Symbol( "setmetatable", ), ], line: 24, }, ], [ Ident { expr: [ Symbol( "a", ), ], line: 24, }, ], [ Table { data: [], line: 24, column: 10, }, ], ], ), ], line: 24, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 22, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "name", ), ], line: 24, }, ], values: [ [ Symbol( "\"gororoba\"", ), ], ], line: 25, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "tostring", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 26, }, ], ], ), ], line: 26, }, Operator( ( "==", true, ), ), Symbol( "\"gororoba\"", ), ], ], ), ], line: 25, }, Variable { names: [ ( "a", false, ), ( "t", false, ), ], values: [ [ Table { data: [ ( None, [ Symbol( "10", ), ], ), ( None, [ Symbol( "20", ), ], ), ( None, [ Symbol( "30", ), ], ), ( Some( [ Symbol( "x", ), ], ), [ Symbol( "\"10\"", ), ], ), ( Some( [ Symbol( "y", ), ], ), [ Symbol( "\"20\"", ), ], ), ], line: 28, column: 20, }, ], [ Table { data: [], line: 28, column: 23, }, ], ], line: 28, column: 23, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 29, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 29, }, ], ], ), ], line: 29, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 29, }, ], ], ), ], line: 28, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 30, }, ], ], ), ], line: 30, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 30, }, ], ], ), ], line: 29, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 31, }, ], [ Symbol( "nil", ), ], ], ), ], line: 31, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 31, }, ], ], ), ], line: 30, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 32, }, ], ], ), ], line: 32, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 31, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 33, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 33, }, ], ], ), ], line: 33, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 33, }, ], ], ), ], line: 32, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "t", "i", "e", ], body: CodeBlock { start: 247, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "e", ), ], line: 37, }, ], ], ), ], line: 37, }, Variable { names: [ ( "p", false, ), ], values: [ [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 38, }, ], [ Symbol( "\"parent\"", ), ], ], ), ], line: 38, }, ], ], line: 39, column: 0, }, Return( Some( [ [ Expr( [ Ident { expr: [ Symbol( "p", ), ], line: 39, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "p", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 39, }, ], ), Symbol( "]", ), ], line: 39, }, Operator( ( "+", true, ), ), Symbol( "3", ), ], ), Ident { expr: [], line: 39, }, ], [ Symbol( "\"dummy return\"", ), ], ], ), ), ], end: 275, }, line: 40, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__index", ), ], line: 40, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), ], line: 42, }, ], ], line: 42, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "parent", ), ], line: 42, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "z", ), ], ), [ Symbol( "25", ), ], ), ( Some( [ Symbol( "x", ), ], ), [ Symbol( "12", ), ], ), ( Some( [ Symbol( "4", ), ], ), [ Symbol( "24", ), ], ), ], line: 44, column: 19, }, ], ], line: 44, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 45, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "z", ), ], line: 45, }, Operator( ( "==", true, ), ), Symbol( "28", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "4", ), ], ), Symbol( "]", ), ], line: 45, }, Operator( ( "==", true, ), ), Symbol( "27", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 45, }, Operator( ( "==", true, ), ), Symbol( "\"10\"", ), ], ], ), ], line: 44, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 45, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 47, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 49, column: 6, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 49, }, ], ], ), ], line: 49, }, ], ], line: 50, column: 0, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "t", "i", "v", ], body: CodeBlock { start: 348, code: [ Ident { expr: [ Symbol( "rawset", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 50, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 50, }, ], [ Ident { expr: [ Symbol( "v", ), ], line: 50, }, Operator( ( "-", true, ), ), Symbol( "3", ), ], ], ), ], line: 50, }, ], end: 359, }, line: 50, column: 20, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__newindex", ), ], line: 50, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), ], line: 51, }, ], ], line: 51, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 51, }, ], values: [ [ Symbol( "30", ), ], ], line: 52, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 52, }, ], values: [ [ Symbol( "\"101\"", ), ], ], line: 52, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "5", ), ], ), Symbol( "]", ), ], line: 52, }, ], values: [ [ Symbol( "200", ), ], ], line: 52, column: 19, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 53, }, Operator( ( "==", true, ), ), Symbol( "27", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 53, }, Operator( ( "==", true, ), ), Symbol( "98", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "5", ), ], ), Symbol( "]", ), ], line: 53, }, Operator( ( "==", true, ), ), Symbol( "197", ), ], ], ), ], line: 52, }, Variable { names: [ ( "c", false, ), ], values: [ [ Table { data: [], line: 56, column: 5, }, ], ], line: 56, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 56, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 57, column: 6, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 57, }, ], ], ), ], line: 57, }, ], ], line: 57, column: 9, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__newindex", ), ], line: 57, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), ], line: 58, }, ], ], line: 58, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 58, }, ], values: [ [ Symbol( "10", ), ], ], line: 59, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 59, }, ], values: [ [ Symbol( "20", ), ], ], line: 59, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 59, }, ], values: [ [ Symbol( "90", ), ], ], line: 59, column: 20, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 60, }, Operator( ( "==", true, ), ), Symbol( "10", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 60, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 60, }, Operator( ( "==", true, ), ), Symbol( "90", ), ], ], ), ], line: 59, }, DoBlock( CodeBlock { start: 468, code: [ Variable { names: [ ( "a", false, ), ], values: [], line: 64, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 64, }, ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 65, column: 6, }, ], [ Table { data: [ ( Some( [ Symbol( "__index", ), ], ), [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 65, column: 14, }, ], [ Table { data: [ ( Some( [ Symbol( "__index", ), ], ), [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 66, column: 7, }, ], [ Table { data: [ ( Some( [ Symbol( "__index", ), ], ), [ Lambda { args: [ "_", "n", ], body: CodeBlock { start: 35, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 67, }, Operator( ( "-", true, ), ), Symbol( "3", ), ], ), Symbol( "]", ), ], line: 67, }, Operator( ( "+", true, ), ), Symbol( "4", ), ], [ Symbol( "\"lixo\"", ), ], ], ), ), ], end: 47, }, line: 67, column: 21, }, ], ), ], line: 67, column: 22, }, ], ], ), ], line: 66, }, ], ), ], line: 67, column: 24, }, ], ], ), ], line: 65, }, ], ), ], line: 67, column: 26, }, ], ], ), ], line: 65, }, ], ], line: 67, column: 27, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 67, }, ], values: [ [ Symbol( "20", ), ], ], line: 69, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "0", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 66, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 70, }, Operator( ( "*", true, ), ), Symbol( "3", ), ], ), Symbol( "]", ), ], line: 70, }, Operator( ( "==", true, ), ), Symbol( "20", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 70, }, Operator( ( "*", true, ), ), Symbol( "4", ), ], ], ), ], line: 70, }, ], end: 82, }, line: 71, column: 1, }, ], end: 551, }, ), DoBlock( CodeBlock { start: 552, code: [ Variable { names: [ ( "foi", false, ), ], values: [], line: 76, column: 2, }, Variable { names: [ ( "a", false, ), ], values: [ [ Table { data: [], line: 77, column: 5, }, ], ], line: 78, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 78, }, ], ), Symbol( "]", ), ], line: 78, }, ], values: [ [ Symbol( "0", ), ], ], line: 78, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "'a'", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 78, }, ], ), Symbol( "]", ), ], line: 78, }, ], values: [ [ Symbol( "0", ), ], ], line: 78, column: 16, }, ], end: 31, }, line: 78, column: 24, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 79, }, ], [ Table { data: [ ( Some( [ Symbol( "__newindex", ), ], ), [ Lambda { args: [ "t", "k", "v", ], body: CodeBlock { start: 46, code: [ Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 79, }, ], values: [ [ Symbol( "true", ), ], ], line: 79, column: 4, }, Ident { expr: [ Symbol( "rawset", ), Call( [ [ Ident { expr: [ Symbol( "t", ), ], line: 79, }, ], [ Ident { expr: [ Symbol( "k", ), ], line: 79, }, ], [ Ident { expr: [ Symbol( "v", ), ], line: 79, }, ], ], ), ], line: 79, }, ], end: 59, }, line: 79, column: 28, }, ], ), ], line: 79, column: 29, }, ], ], ), ], line: 78, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 79, }, ], values: [ [ Symbol( "false", ), ], ], line: 80, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 80, }, ], values: [ [ Symbol( "0", ), ], ], line: 80, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "foi", ), ], line: 80, }, ], ], ), ], line: 80, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 80, }, ], values: [ [ Symbol( "false", ), ], ], line: 81, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "'a1'", ), ], ), Symbol( "]", ), ], line: 81, }, ], values: [ [ Symbol( "0", ), ], ], line: 81, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "foi", ), ], line: 81, }, ], ], ), ], line: 81, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 81, }, ], values: [ [ Symbol( "false", ), ], ], line: 82, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "'a11'", ), ], ), Symbol( "]", ), ], line: 82, }, ], values: [ [ Symbol( "0", ), ], ], line: 82, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foi", ), ], line: 82, }, ], ], ), ], line: 82, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 82, }, ], values: [ [ Symbol( "false", ), ], ], line: 83, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "11", ), ], ), Symbol( "]", ), ], line: 83, }, ], values: [ [ Symbol( "0", ), ], ], line: 83, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foi", ), ], line: 83, }, ], ], ), ], line: 83, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 83, }, ], values: [ [ Symbol( "false", ), ], ], line: 84, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 84, }, ], values: [ [ Symbol( "nil", ), ], ], line: 84, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "foi", ), ], line: 84, }, ], ], ), ], line: 84, }, Alter { names: [ Ident { expr: [ Symbol( "foi", ), ], line: 84, }, ], values: [ [ Symbol( "false", ), ], ], line: 85, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 85, }, ], values: [ [ Symbol( "nil", ), ], ], line: 85, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "foi", ), ], line: 85, }, ], ], ), ], line: 85, }, ], end: 707, }, ), Function { local: false, name: [ Symbol( "f", ), ], args: [ "t", "...", ], body: CodeBlock { start: 714, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "t", ), ], line: 89, }, ], [ Table { data: [ ( None, [ Symbol( "...", ), ], ), ], line: 89, column: 6, }, ], ], ), ), ], end: 721, }, line: 89, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__call", ), ], line: 89, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), ], line: 90, }, ], ], line: 92, column: 0, }, DoBlock( CodeBlock { start: 727, code: [ Variable { names: [ ( "x", false, ), ( "y", false, ), ], values: [ [ Ident { expr: [ Symbol( "a", ), Call( [ [ Ident { expr: [ Symbol( "unpack", ), Call( [ [ Table { data: [ ( None, [ Symbol( "'a'", ), ], ), ( None, [ Symbol( "1", ), ], ), ], line: 93, column: 13, }, ], ], ), ], line: 93, }, ], ], ), ], line: 93, }, ], ], line: 93, column: 14, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 94, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 94, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 94, }, Operator( ( "==", true, ), ), Symbol( "'a'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 94, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 94, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 93, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 94, }, Ident { expr: [ Symbol( "y", ), ], line: 95, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Call( [], ), ], line: 95, }, ], ], line: 95, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 96, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 96, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "y", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 96, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 95, }, ], end: 789, }, ), Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 100, column: 7, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 100, }, ], ], ), ], line: 100, }, ], ], line: 100, column: 10, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 101, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 101, }, ], ], ), ], line: 100, }, Function { local: false, name: [ Symbol( "f", ), ], args: [ "op", ], body: CodeBlock { start: 810, code: [ Return( Some( [ [ Lambda { args: [ "...", ], body: CodeBlock { start: 5, code: [ Alter { names: [ Ident { expr: [ Symbol( "cap", ), ], line: 104, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "0", ), ], ), [ Ident { expr: [ Symbol( "op", ), ], line: 104, }, ], ), ( None, [ Symbol( "...", ), ], ), ], line: 104, column: 11, }, ], ], line: 104, column: 12, }, Return( Some( [ [ Expr( [ Symbol( "...", ), ], ), Ident { expr: [], line: 104, }, ], ], ), ), ], end: 22, }, line: 104, column: 22, }, ], ], ), ), ], end: 833, }, line: 105, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__add", ), ], line: 105, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"add\"", ), ], ], ), ], line: 106, }, ], ], line: 106, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__sub", ), ], line: 106, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"sub\"", ), ], ], ), ], line: 107, }, ], ], line: 107, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__mul", ), ], line: 107, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"mul\"", ), ], ], ), ], line: 108, }, ], ], line: 108, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__div", ), ], line: 108, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"div\"", ), ], ], ), ], line: 109, }, ], ], line: 109, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__mod", ), ], line: 109, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"mod\"", ), ], ], ), ], line: 110, }, ], ], line: 110, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__unm", ), ], line: 110, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"unm\"", ), ], ], ), ], line: 111, }, ], ], line: 111, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__pow", ), ], line: 111, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), Call( [ [ Symbol( "\"pow\"", ), ], ], ), ], line: 112, }, ], ], line: 112, column: 8, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 114, }, Operator( ( "+", true, ), ), Symbol( "5", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 114, }, ], ], ), ], line: 112, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 115, }, Operator( ( "==", true, ), ), Symbol( "\"add\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 115, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 115, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 115, }, Operator( ( "==", true, ), ), Symbol( "5", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 115, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 114, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 116, }, Operator( ( "+", true, ), ), Symbol( "'5'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 116, }, ], ], ), ], line: 115, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 117, }, Operator( ( "==", true, ), ), Symbol( "\"add\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 117, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 117, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 117, }, Operator( ( "==", true, ), ), Symbol( "'5'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 117, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 116, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "5", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 118, }, Operator( ( "==", true, ), ), Symbol( "5", ), ], ], ), ], line: 117, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 119, }, Operator( ( "==", true, ), ), Symbol( "\"add\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 119, }, Operator( ( "==", true, ), ), Symbol( "5", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 119, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 119, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 119, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 118, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "'5'", ), Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 120, }, Operator( ( "==", true, ), ), Symbol( "'5'", ), ], ], ), ], line: 119, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 121, }, Operator( ( "==", true, ), ), Symbol( "\"add\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 121, }, Operator( ( "==", true, ), ), Symbol( "'5'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 121, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 121, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 121, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 120, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 121, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), ], line: 122, }, Operator( ( "-", true, ), ), Symbol( "3", ), ], ], line: 122, column: 6, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 122, }, ], ], ), ], line: 122, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 122, }, ], ], ), ], line: 122, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "5", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 123, }, Operator( ( "==", true, ), ), Symbol( "5", ), ], ], ), ], line: 122, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 124, }, Operator( ( "==", true, ), ), Symbol( "\"sub\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 124, }, Operator( ( "==", true, ), ), Symbol( "5", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 124, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 124, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 124, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 123, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "'5'", ), Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 125, }, Operator( ( "==", true, ), ), Symbol( "'5'", ), ], ], ), ], line: 124, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 126, }, Operator( ( "==", true, ), ), Symbol( "\"sub\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 126, }, Operator( ( "==", true, ), ), Symbol( "'5'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 126, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 126, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 126, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 125, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 127, }, Operator( ( "*", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 127, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 127, }, ], ], ), ], line: 126, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 128, }, Operator( ( "==", true, ), ), Symbol( "\"mul\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 128, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 128, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 128, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 128, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 128, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 127, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 129, }, Operator( ( "/", true, ), ), Symbol( "0", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 129, }, ], ], ), ], line: 128, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 130, }, Operator( ( "==", true, ), ), Symbol( "\"div\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 130, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 130, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 130, }, Operator( ( "==", true, ), ), Symbol( "0", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 130, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 129, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 131, }, Operator( ( "%", true, ), ), Symbol( "2", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 131, }, ], ], ), ], line: 130, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 132, }, Operator( ( "==", true, ), ), Symbol( "\"mod\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 132, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 132, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 132, }, Operator( ( "==", true, ), ), Symbol( "2", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 132, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 131, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "-", false, ), ), Ident { expr: [ Symbol( "a", ), ], line: 133, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 133, }, ], ], ), ], line: 132, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 134, }, Operator( ( "==", true, ), ), Symbol( "\"unm\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 134, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 134, }, ], ], ), ], line: 133, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 135, }, Operator( ( "^", true, ), ), Symbol( "4", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 135, }, ], ], ), ], line: 134, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 136, }, Operator( ( "==", true, ), ), Symbol( "\"pow\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 136, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 136, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 136, }, Operator( ( "==", true, ), ), Symbol( "4", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 136, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 135, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 137, }, Operator( ( "^", true, ), ), Symbol( "'4'", ), Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 137, }, ], ], ), ], line: 136, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "\"pow\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 138, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 138, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "'4'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 138, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 137, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "4", ), Operator( ( "^", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 139, }, Operator( ( "==", true, ), ), Symbol( "4", ), ], ], ), ], line: 138, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "\"pow\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "4", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 140, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 140, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 140, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 139, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "'4'", ), Operator( ( "^", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 141, }, Operator( ( "==", true, ), ), Symbol( "'4'", ), ], ], ), ], line: 140, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "0", ), ], ), Symbol( "]", ), ], line: 142, }, Operator( ( "==", true, ), ), Symbol( "\"pow\"", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 142, }, Operator( ( "==", true, ), ), Symbol( "'4'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "2", ), ], ), Symbol( "]", ), ], line: 142, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "a", ), ], line: 142, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "cap", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 142, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 141, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), ], line: 142, }, ], values: [ [ Table { data: [], line: 145, column: 4, }, ], ], line: 145, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 145, }, ], values: [ [ Lambda { args: [ "a", "b", "c", ], body: CodeBlock { start: 1437, code: [ Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 147, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 148, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 147, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 149, }, ], ], ), ], line: 149, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 17, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 149, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 149, }, ], ], line: 149, column: 5, }, ], end: 23, }, next: None, line: 149, column: 14, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 150, }, ], ], ), ], line: 150, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 31, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 150, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), Symbol( ".", ), Symbol( "x", ), ], line: 150, }, ], ], line: 150, column: 5, }, ], end: 37, }, next: None, line: 150, column: 14, }, Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 151, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 151, }, ], [ Symbol( "\"dummy\"", ), ], ], ), ), ], end: 1481, }, line: 152, column: 1, }, ], ], line: 154, column: 0, }, Function { local: false, name: [ Symbol( "Op", ), ], args: [ "x", ], body: CodeBlock { start: 1486, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "x", ), ], ), [ Ident { expr: [ Symbol( "x", ), ], line: 154, }, ], ), ], line: 154, column: 8, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 154, }, ], ], ), ], line: 154, }, ], ], ), ), ], end: 1498, }, line: 154, column: 17, }, Function { local: true, name: [ Symbol( "test", ), ], args: [], body: CodeBlock { start: 1503, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 157, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 157, }, ], ), Ident { expr: [], line: 157, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 157, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 157, }, ], ), Ident { expr: [], line: 157, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 157, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 157, }, ], ), Ident { expr: [], line: 157, }, ], ], ), ], line: 157, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 158, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 158, }, ], ), Ident { expr: [], line: 158, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 158, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 158, }, ], ), Ident { expr: [], line: 158, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 158, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 158, }, ], ), Ident { expr: [], line: 158, }, ], ], ), ], line: 157, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 159, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 159, }, ], ), Ident { expr: [], line: 159, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 159, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 159, }, ], ), Ident { expr: [], line: 159, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 159, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 159, }, ], ), Ident { expr: [], line: 159, }, ], ], ), ], line: 158, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 160, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 160, }, ], ), Ident { expr: [], line: 160, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 160, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 160, }, ], ), Ident { expr: [], line: 160, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 160, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 160, }, ], ), Ident { expr: [], line: 160, }, ], ], ), ], line: 159, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 161, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 161, }, ], ), Ident { expr: [], line: 161, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 161, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 161, }, ], ), Ident { expr: [], line: 161, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 161, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 161, }, ], ), Ident { expr: [], line: 161, }, ], ], ), ], line: 160, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 162, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 162, }, ], ), Ident { expr: [], line: 162, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 162, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 162, }, ], ), Ident { expr: [], line: 162, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 162, }, Operator( ( ">", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 162, }, ], ), Ident { expr: [], line: 162, }, ], ], ), ], line: 161, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 163, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 163, }, ], ), Ident { expr: [], line: 163, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 163, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 163, }, ], ), Ident { expr: [], line: 163, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "2", ), ], ], ), ], line: 163, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "1", ), ], ], ), ], line: 163, }, ], ), Ident { expr: [], line: 163, }, ], ], ), ], line: 162, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 164, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 164, }, ], ), Ident { expr: [], line: 164, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 164, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 164, }, ], ), Ident { expr: [], line: 164, }, Operator( ( "and", true, ), ), Expr( [ Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'b'", ), ], ], ), ], line: 164, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Op", ), Call( [ [ Symbol( "'a'", ), ], ], ), ], line: 164, }, ], ), Ident { expr: [], line: 164, }, ], ], ), ], line: 163, }, ], end: 1820, }, line: 165, column: 1, }, Ident { expr: [ Symbol( "test", ), Call( [], ), ], line: 165, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__le", ), ], line: 167, }, ], values: [ [ Lambda { args: [ "a", "b", "c", ], body: CodeBlock { start: 1835, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 170, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 170, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 171, }, ], ], ), ], line: 171, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 171, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 171, }, ], ], line: 171, column: 5, }, ], end: 20, }, next: None, line: 171, column: 14, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 172, }, ], ], ), ], line: 172, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 28, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 172, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), Symbol( ".", ), Symbol( "x", ), ], line: 172, }, ], ], line: 172, column: 5, }, ], end: 34, }, next: None, line: 172, column: 14, }, Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 173, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 173, }, ], [ Symbol( "\"dummy\"", ), ], ], ), ), ], end: 1876, }, line: 174, column: 1, }, ], ], line: 174, column: 1, }, Ident { expr: [ Symbol( "test", ), Call( [], ), ], line: 174, }, Function { local: true, name: [ Symbol( "Set", ), ], args: [ "x", ], body: CodeBlock { start: 1885, code: [ Variable { names: [ ( "y", false, ), ], values: [ [ Table { data: [], line: 182, column: 5, }, ], ], line: 183, column: 0, }, ForFuncLoop { iters: [ "_", "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 183, }, ], ], ), ], line: 183, }, ], stop: None, initial: None, code: CodeBlock { start: 15, code: [ Alter { names: [ Ident { expr: [ Symbol( "y", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 183, }, ], ), Symbol( "]", ), ], line: 183, }, ], values: [ [ Symbol( "1", ), ], ], line: 183, column: 6, }, ], end: 22, }, line: 183, column: 17, }, Return( Some( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "y", ), ], line: 184, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 184, }, ], ], ), ], line: 184, }, ], ], ), ), ], end: 1915, }, line: 185, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 185, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 1925, code: [ ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 188, }, ], ], ), ], line: 188, }, ], stop: None, initial: None, code: CodeBlock { start: 8, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 189, }, ], ), Symbol( "]", ), ], line: 189, }, ], body: CodeBlock { start: 7, code: [ Return( Some( [ [ Symbol( "false", ), ], ], ), ), ], end: 10, }, next: None, line: 189, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 190, }, ], ), Symbol( "]", ), ], line: 189, }, ], values: [ [ Symbol( "nil", ), ], ], line: 190, column: 6, }, ], end: 25, }, line: 191, column: 1, }, Return( Some( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 192, }, ], ], ), ], line: 192, }, Operator( ( "~=", true, ), ), Symbol( "nil", ), ], ], ), ), ], end: 1958, }, line: 193, column: 1, }, ], ], line: 193, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__le", ), ], line: 193, }, ], values: [ [ Symbol( "nil", ), ], ], line: 195, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 197, column: 10, }, ], ], ), ], line: 197, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 197, column: 21, }, ], ], ), ], line: 197, }, ], ], ), ], line: 195, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 198, column: 14, }, ], ], ), ], line: 198, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 198, column: 25, }, ], ], ), ], line: 198, }, ], ), Ident { expr: [], line: 198, }, ], ], ), ], line: 197, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 199, column: 13, }, ], ], ), ], line: 199, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 199, column: 24, }, ], ], ), ], line: 199, }, ], ), Ident { expr: [], line: 199, }, ], ], ), ], line: 198, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 200, column: 13, }, ], ], ), ], line: 200, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "2", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "4", ), ], ), ], line: 200, column: 24, }, ], ], ), ], line: 200, }, ], ), Ident { expr: [], line: 200, }, ], ], ), ], line: 199, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 201, column: 9, }, ], ], ), ], line: 201, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 201, column: 16, }, ], ], ), ], line: 201, }, ], ), Ident { expr: [], line: 201, }, ], ], ), ], line: 200, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__le", ), ], line: 201, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 2092, code: [ ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 204, }, ], ], ), ], line: 204, }, ], stop: None, initial: None, code: CodeBlock { start: 8, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 205, }, ], ), Symbol( "]", ), ], line: 205, }, ], body: CodeBlock { start: 7, code: [ Return( Some( [ [ Symbol( "false", ), ], ], ), ), ], end: 10, }, next: None, line: 205, column: 10, }, ], end: 19, }, line: 206, column: 1, }, Return( Some( [ [ Symbol( "true", ), ], ], ), ), ], end: 2114, }, line: 208, column: 1, }, ], ], line: 208, column: 1, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 210, column: 10, }, ], ], ), ], line: 210, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 210, column: 17, }, ], ], ), ], line: 210, }, ], ), Ident { expr: [], line: 210, }, ], ], ), ], line: 208, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 211, column: 10, }, ], ], ), ], line: 211, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 211, column: 17, }, ], ], ), ], line: 211, }, ], ), Ident { expr: [], line: 211, }, ], ], ), ], line: 210, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ], line: 212, column: 10, }, ], ], ), ], line: 212, }, Operator( ( ">=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 212, column: 17, }, ], ], ), ], line: 212, }, ], ), Ident { expr: [], line: 212, }, ], ], ), ], line: 211, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__eq", ), ], line: 212, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 2181, code: [ ForFuncLoop { iters: [ "k", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 215, }, ], ], ), ], line: 215, }, ], stop: None, initial: None, code: CodeBlock { start: 8, code: [ IfStatement { condition: [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 216, }, ], ), Symbol( "]", ), ], line: 216, }, ], body: CodeBlock { start: 7, code: [ Return( Some( [ [ Symbol( "false", ), ], ], ), ), ], end: 10, }, next: None, line: 216, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "b", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 217, }, ], ), Symbol( "]", ), ], line: 216, }, ], values: [ [ Symbol( "nil", ), ], ], line: 217, column: 6, }, ], end: 25, }, line: 218, column: 1, }, Return( Some( [ [ Ident { expr: [ Symbol( "next", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 219, }, ], ], ), ], line: 219, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ), ], end: 2214, }, line: 220, column: 1, }, ], ], line: 222, column: 0, }, Variable { names: [ ( "s", false, ), ], values: [ [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 222, column: 11, }, ], ], ), ], line: 222, }, ], ], line: 222, column: 11, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 223, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ( None, [ Symbol( "1", ), ], ), ], line: 223, column: 12, }, ], ], ), ], line: 223, }, ], ], ), ], line: 222, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "rawequal", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 224, }, ], [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ( None, [ Symbol( "1", ), ], ), ], line: 224, column: 15, }, ], ], ), ], line: 224, }, ], ], ), ], line: 224, }, ], ], ), ], line: 223, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "rawequal", ), Call( [ [ Ident { expr: [ Symbol( "s", ), ], line: 225, }, ], [ Ident { expr: [ Symbol( "s", ), ], line: 225, }, ], ], ), ], line: 225, }, ], ], ), ], line: 224, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ( None, [ Symbol( "1", ), ], ), ], line: 226, column: 12, }, ], ], ), ], line: 226, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ( None, [ Symbol( "1", ), ], ), ], line: 226, column: 21, }, ], ], ), ], line: 226, }, ], ], ), ], line: 225, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 227, column: 10, }, ], ], ), ], line: 227, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "6", ), ], ), ], line: 227, column: 21, }, ], ], ), ], line: 227, }, ], ], ), ], line: 226, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 228, column: 10, }, ], ], ), ], line: 228, }, ], ), Symbol( "]", ), ], line: 227, }, ], values: [ [ Symbol( "1", ), ], ], line: 228, column: 13, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "t", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "Set", ), Call( [ [ Table { data: [ ( None, [ Symbol( "1", ), ], ), ( None, [ Symbol( "3", ), ], ), ( None, [ Symbol( "5", ), ], ), ], line: 229, column: 12, }, ], ], ), ], line: 229, }, ], ), Symbol( "]", ), ], line: 229, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 228, }, Alter { names: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "__concat", ), ], line: 229, }, ], values: [ [ Lambda { args: [ "a", "b", "c", ], body: CodeBlock { start: 2349, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 233, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 233, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 234, }, ], ], ), ], line: 234, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 14, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 234, }, ], values: [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "val", ), ], line: 234, }, ], ], line: 234, column: 5, }, ], end: 20, }, next: None, line: 234, column: 14, }, IfStatement { condition: [ Ident { expr: [ Symbol( "type", ), Call( [ [ Ident { expr: [ Symbol( "b", ), ], line: 235, }, ], ], ), ], line: 235, }, Operator( ( "==", true, ), ), Symbol( "'table'", ), ], body: CodeBlock { start: 28, code: [ Alter { names: [ Ident { expr: [ Symbol( "b", ), ], line: 235, }, ], values: [ [ Ident { expr: [ Symbol( "b", ), Symbol( ".", ), Symbol( "val", ), ], line: 235, }, ], ], line: 235, column: 5, }, ], end: 34, }, next: None, line: 235, column: 14, }, IfStatement { condition: [ Ident { expr: [ Symbol( "A", ), ], line: 236, }, ], body: CodeBlock { start: 37, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 236, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 236, }, ], ], ), ), ], end: 42, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 42, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "val", ), ], ), [ Ident { expr: [ Symbol( "a", ), ], line: 238, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 238, }, ], ), ], line: 238, column: 10, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 238, }, ], ], ), ], line: 238, }, ], ], ), ), ], end: 56, }, next: None, line: 239, column: 1, }, ), line: 239, column: 1, }, ], end: 2406, }, line: 240, column: 1, }, ], ], line: 240, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), ], line: 240, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "val", ), ], ), [ Symbol( "\"c\"", ), ], ), ], line: 242, column: 7, }, ], ], line: 242, column: 8, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 242, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 242, }, ], ], ), ], line: 242, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 242, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "val", ), ], ), [ Symbol( "\"d\"", ), ], ), ], line: 243, column: 7, }, ], ], line: 243, column: 8, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "d", ), ], line: 243, }, ], [ Ident { expr: [ Symbol( "t", ), ], line: 243, }, ], ], ), ], line: 243, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 243, }, ], values: [ [ Symbol( "true", ), ], ], line: 245, column: 3, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 246, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 246, }, Operator( ( "==", true, ), ), Symbol( "'cd'", ), ], ], ), ], line: 245, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "0", ), Operator( ( "..", true, ), ), Symbol( "\"a\"", ), Operator( ( "..", true, ), ), Symbol( "\"b\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 247, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 247, }, Operator( ( "..", true, ), ), Symbol( "\"e\"", ), Operator( ( "..", true, ), ), Symbol( "\"f\"", ), Operator( ( "..", true, ), ), Expr( [ Symbol( "5", ), Operator( ( "+", true, ), ), Symbol( "3", ), ], ), Ident { expr: [], line: 247, }, Operator( ( "..", true, ), ), Symbol( "\"g\"", ), Operator( ( "==", true, ), ), Symbol( "\"0abcdef8g\"", ), ], ], ), ], line: 246, }, Alter { names: [ Ident { expr: [ Symbol( "A", ), ], line: 247, }, ], values: [ [ Symbol( "false", ), ], ], line: 249, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 249, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), ], line: 250, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 250, }, ], ], line: 250, column: 5, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "x", ), ], line: 251, }, ], ], ), ], line: 251, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "t", ), ], line: 251, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), Symbol( ".", ), Symbol( "val", ), ], line: 251, }, Operator( ( "==", true, ), ), Symbol( "'cd'", ), ], ], ), ], line: 250, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 251, }, ], values: [ [ Symbol( "0", ), Operator( ( "..", true, ), ), Symbol( "\"a\"", ), Operator( ( "..", true, ), ), Symbol( "\"b\"", ), Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 252, }, Operator( ( "..", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 252, }, Operator( ( "..", true, ), ), Symbol( "\"e\"", ), Operator( ( "..", true, ), ), Symbol( "\"f\"", ), Operator( ( "..", true, ), ), Symbol( "\"g\"", ), ], ], line: 252, column: 17, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "x", ), Symbol( ".", ), Symbol( "val", ), ], line: 253, }, Operator( ( "==", true, ), ), Symbol( "\"0abcdefg\"", ), ], ], ), ], line: 252, }, Variable { names: [ ( "t1", false, ), ( "t2", false, ), ( "c", false, ), ( "d", false, ), ], values: [], line: 257, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "t1", ), ], line: 257, }, ], values: [ [ Table { data: [], line: 258, column: 4, }, ], ], line: 258, column: 5, }, Alter { names: [ Ident { expr: [ Symbol( "c", ), ], line: 258, }, ], values: [ [ Table { data: [], line: 258, column: 9, }, ], ], line: 258, column: 10, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 258, }, ], [ Ident { expr: [ Symbol( "t1", ), ], line: 258, }, ], ], ), ], line: 258, }, Alter { names: [ Ident { expr: [ Symbol( "d", ), ], line: 258, }, ], values: [ [ Table { data: [], line: 259, column: 4, }, ], ], line: 259, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "t1", ), Symbol( ".", ), Symbol( "__eq", ), ], line: 259, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 2554, code: [ Return( Some( [ [ Symbol( "true", ), ], ], ), ), ], end: 2557, }, line: 260, column: 10, }, ], ], line: 260, column: 10, }, Alter { names: [ Ident { expr: [ Symbol( "t1", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 260, }, ], values: [ [ Lambda { args: [], body: CodeBlock { start: 2564, code: [ Return( Some( [ [ Symbol( "true", ), ], ], ), ), ], end: 2567, }, line: 261, column: 10, }, ], ], line: 261, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 262, }, Operator( ( "~=", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 262, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "pcall", ), Call( [ [ Lambda { args: [], body: CodeBlock { start: 2579, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "c", ), ], line: 262, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 262, }, ], ], ), ), ], end: 2584, }, line: 262, column: 17, }, ], ], ), ], line: 262, }, ], ], ), ], line: 261, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "d", ), ], line: 263, }, ], [ Ident { expr: [ Symbol( "t1", ), ], line: 263, }, ], ], ), ], line: 262, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 264, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 264, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 264, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 264, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "d", ), ], line: 264, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 264, }, ], ), Ident { expr: [], line: 264, }, ], ], ), ], line: 263, }, Alter { names: [ Ident { expr: [ Symbol( "t2", ), ], line: 264, }, ], values: [ [ Table { data: [], line: 265, column: 4, }, ], ], line: 265, column: 4, }, Alter { names: [ Ident { expr: [ Symbol( "t2", ), Symbol( ".", ), Symbol( "__eq", ), ], line: 265, }, ], values: [ [ Ident { expr: [ Symbol( "t1", ), Symbol( ".", ), Symbol( "__eq", ), ], line: 266, }, ], ], line: 266, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "t2", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 266, }, ], values: [ [ Ident { expr: [ Symbol( "t1", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 267, }, ], ], line: 267, column: 7, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "d", ), ], line: 268, }, ], [ Ident { expr: [ Symbol( "t2", ), ], line: 268, }, ], ], ), ], line: 267, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "c", ), ], line: 269, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 269, }, Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 269, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "d", ), ], line: 269, }, Operator( ( "and", true, ), ), Operator( ( "not", false, ), ), Expr( [ Ident { expr: [ Symbol( "d", ), ], line: 269, }, Operator( ( "<=", true, ), ), Ident { expr: [ Symbol( "c", ), ], line: 269, }, ], ), Ident { expr: [], line: 269, }, ], ], ), ], line: 268, }, Variable { names: [ ( "i", false, ), ], values: [], line: 274, column: 2, }, Variable { names: [ ( "tt", false, ), ], values: [ [ Table { data: [ ( Some( [ Symbol( "__call", ), ], ), [ Lambda { args: [ "t", "...", ], body: CodeBlock { start: 2664, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 277, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 277, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 278, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "f", ), ], line: 278, }, ], body: CodeBlock { start: 10, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "t", ), Symbol( ".", ), Symbol( "f", ), Call( [ [ Symbol( "...", ), ], ], ), ], line: 278, }, ], ], ), ), ], end: 18, }, next: Some( IfStatement { condition: [], body: CodeBlock { start: 18, code: [ Return( Some( [ [ Table { data: [ ( None, [ Symbol( "...", ), ], ), ], line: 279, column: 4, }, ], ], ), ), ], end: 23, }, next: None, line: 280, column: 1, }, ), line: 280, column: 1, }, ], end: 2688, }, line: 281, column: 1, }, ], ), ], line: 282, column: 1, }, ], ], line: 284, column: 0, }, Variable { names: [ ( "a", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 284, column: 7, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 284, }, ], ], ), ], line: 284, }, ], ], line: 285, column: 0, }, Variable { names: [ ( "b", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "f", ), ], ), [ Ident { expr: [ Symbol( "a", ), ], line: 285, }, ], ), ], line: 285, column: 10, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 285, }, ], ], ), ], line: 285, }, ], ], line: 286, column: 0, }, Variable { names: [ ( "c", false, ), ], values: [ [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [ ( Some( [ Symbol( "f", ), ], ), [ Ident { expr: [ Symbol( "b", ), ], line: 286, }, ], ), ], line: 286, column: 10, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 286, }, ], ], ), ], line: 286, }, ], ], line: 286, column: 13, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 286, }, ], values: [ [ Symbol( "0", ), ], ], line: 288, column: 3, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 288, }, ], values: [ [ Ident { expr: [ Symbol( "c", ), Call( [ [ Symbol( "3", ), ], [ Symbol( "4", ), ], [ Symbol( "5", ), ], ], ), ], line: 289, }, ], ], line: 289, column: 10, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "i", ), ], line: 290, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), Symbol( "[", ), Expr( [ Symbol( "1", ), ], ), Symbol( "]", ), ], line: 290, }, Operator( ( "==", true, ), ), Symbol( "3", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "x", ), Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 290, }, Operator( ( "==", true, ), ), Symbol( "5", ), ], ], ), ], line: 289, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), Symbol( ".", ), Symbol( "X", ), ], line: 293, }, Operator( ( "==", true, ), ), Symbol( "20", ), ], ], ), ], line: 290, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 294, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getfenv", ), Call( [ [ Symbol( "0", ), ], ], ), ], line: 294, }, ], ], ), ], line: 293, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 294, }, Variable { names: [ ( "_g", false, ), ], values: [ [ Ident { expr: [ Symbol( "_G", ), ], line: 298, }, ], ], line: 298, column: 4, }, Ident { expr: [ Symbol( "setfenv", ), Call( [ [ Symbol( "1", ), ], [ Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Table { data: [], line: 299, column: 8, }, ], [ Table { data: [ ( Some( [ Symbol( "__index", ), ], ), [ Lambda { args: [ "_", "k", ], body: CodeBlock { start: 2799, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "_g", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 299, }, ], ), Symbol( "]", ), ], line: 299, }, ], ], ), ), ], end: 2805, }, line: 299, column: 24, }, ], ), ], line: 299, column: 25, }, ], ], ), ], line: 299, }, ], ], ), ], line: 298, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [], ), ], line: 302, }, ], ], ), ], line: 302, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 299, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "false", ), ], ], ), ], line: 303, }, ], ], ), ], line: 303, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 302, }, Variable { names: [ ( "u", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 305, }, ], ], line: 305, column: 7, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 307, }, ], ], ), Symbol( ".", ), Symbol( "__newindex", ), ], line: 305, }, ], values: [ [ Lambda { args: [ "u", "k", "v", ], body: CodeBlock { start: 2853, code: [ Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 308, }, ], ], ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 308, }, ], ), Symbol( "]", ), ], line: 308, }, ], values: [ [ Ident { expr: [ Symbol( "v", ), ], line: 308, }, ], ], line: 308, column: 9, }, ], end: 2863, }, line: 309, column: 1, }, ], ], line: 309, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 311, }, ], ], ), Symbol( ".", ), Symbol( "__index", ), ], line: 309, }, ], values: [ [ Lambda { args: [ "u", "k", ], body: CodeBlock { start: 2876, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 312, }, ], ], ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "k", ), ], line: 312, }, ], ), Symbol( "]", ), ], line: 312, }, ], ], ), ), ], end: 2885, }, line: 313, column: 1, }, ], ], line: 315, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 2892, code: [ Alter { names: [ Ident { expr: [ Symbol( "u", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 315, }, ], ), Symbol( "]", ), ], line: 315, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 315, }, ], ], line: 315, column: 6, }, ], end: 2899, }, line: 315, column: 14, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 2906, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "u", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 316, }, ], ), Symbol( "]", ), ], line: 316, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 316, }, ], ], ), ], line: 316, }, ], end: 2916, }, line: 316, column: 17, }, Variable { names: [ ( "k", false, ), ], values: [ [ Ident { expr: [ Symbol( "newproxy", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 318, }, ], ], ), ], line: 318, }, ], ], line: 318, column: 7, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "k", ), ], line: 319, }, ], ], ), ], line: 319, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Ident { expr: [ Symbol( "u", ), ], line: 319, }, ], ], ), ], line: 319, }, ], ], ), ], line: 318, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 319, }, ], values: [ [ Table { data: [], line: 322, column: 4, }, ], ], line: 322, column: 4, }, Ident { expr: [ Symbol( "rawset", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 323, }, ], [ Symbol( "\"x\"", ), ], [ Symbol( "1", ), ], [ Symbol( "2", ), ], [ Symbol( "3", ), ], ], ), ], line: 322, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "x", ), ], line: 324, }, Operator( ( "==", true, ), ), Symbol( "1", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 324, }, ], [ Symbol( "\"x\"", ), ], [ Symbol( "3", ), ], ], ), ], line: 324, }, Operator( ( "==", true, ), ), Symbol( "1", ), ], ], ), ], line: 323, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'+'", ), ], ], ), ], line: 324, }, Alter { names: [ Ident { expr: [ Symbol( "mt", ), ], line: 326, }, ], values: [ [ Table { data: [], line: 329, column: 4, }, ], ], line: 329, column: 4, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "10", ), ], [ Ident { expr: [ Symbol( "mt", ), ], line: 330, }, ], ], ), ], line: 329, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Operator( ( "-", false, ), ), Symbol( "2", ), ], ], ), ], line: 331, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "mt", ), ], line: 331, }, ], ], ), ], line: 330, }, Alter { names: [ Ident { expr: [ Symbol( "mt", ), Symbol( ".", ), Symbol( "__index", ), ], line: 331, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 3004, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 332, }, Operator( ( "+", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 332, }, ], ], ), ), ], end: 3009, }, line: 332, column: 15, }, ], ], line: 332, column: 15, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Symbol( "10", ), ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "3", ), ], ), Symbol( "]", ), ], line: 333, }, Operator( ( "==", true, ), ), Symbol( "13", ), ], ], ), ], line: 332, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Symbol( "10", ), ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "\"3\"", ), ], ), Symbol( "]", ), ], line: 334, }, Operator( ( "==", true, ), ), Symbol( "13", ), ], ], ), ], line: 333, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "23", ), ], [ Symbol( "nil", ), ], ], ), ], line: 334, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Operator( ( "-", false, ), ), Symbol( "2", ), ], ], ), ], line: 336, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 335, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "true", ), ], [ Ident { expr: [ Symbol( "mt", ), ], line: 338, }, ], ], ), ], line: 336, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "false", ), ], ], ), ], line: 339, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "mt", ), ], line: 339, }, ], ], ), ], line: 338, }, Alter { names: [ Ident { expr: [ Symbol( "mt", ), Symbol( ".", ), Symbol( "__index", ), ], line: 339, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 3076, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), ], line: 340, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "b", ), ], line: 340, }, ], ], ), ), ], end: 3081, }, line: 340, column: 15, }, ], ], line: 340, column: 15, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Symbol( "true", ), ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "false", ), ], ), Symbol( "]", ), ], line: 341, }, Operator( ( "==", true, ), ), Symbol( "true", ), ], ], ), ], line: 340, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Expr( [ Symbol( "false", ), ], ), Ident { expr: [ Symbol( "[", ), Expr( [ Symbol( "false", ), ], ), Symbol( "]", ), ], line: 342, }, Operator( ( "==", true, ), ), Symbol( "false", ), ], ], ), ], line: 341, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "false", ), ], [ Symbol( "nil", ), ], ], ), ], line: 342, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "true", ), ], ], ), ], line: 344, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 343, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "nil", ), ], [ Ident { expr: [ Symbol( "mt", ), ], line: 346, }, ], ], ), ], line: 344, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 347, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "mt", ), ], line: 347, }, ], ], ), ], line: 346, }, Alter { names: [ Ident { expr: [ Symbol( "mt", ), Symbol( ".", ), Symbol( "__add", ), ], line: 347, }, ], values: [ [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 3147, code: [ Return( Some( [ [ Expr( [ Ident { expr: [ Symbol( "a", ), ], line: 348, }, Operator( ( "or", true, ), ), Symbol( "0", ), ], ), Ident { expr: [], line: 348, }, Operator( ( "+", true, ), ), Expr( [ Ident { expr: [ Symbol( "b", ), ], line: 348, }, Operator( ( "or", true, ), ), Symbol( "0", ), ], ), Ident { expr: [], line: 348, }, ], ], ), ), ], end: 3160, }, line: 348, column: 23, }, ], ], line: 348, column: 23, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "10", ), Operator( ( "+", true, ), ), Symbol( "nil", ), Operator( ( "==", true, ), ), Symbol( "10", ), ], ], ), ], line: 348, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "nil", ), Operator( ( "+", true, ), ), Symbol( "23", ), Operator( ( "==", true, ), ), Symbol( "23", ), ], ], ), ], line: 349, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Symbol( "nil", ), Operator( ( "+", true, ), ), Symbol( "nil", ), Operator( ( "==", true, ), ), Symbol( "0", ), ], ], ), ], line: 350, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "nil", ), ], [ Symbol( "nil", ), ], ], ), ], line: 351, }, Ident { expr: [ Symbol( "assert", ), Call( [ [ Ident { expr: [ Symbol( "getmetatable", ), Call( [ [ Symbol( "nil", ), ], ], ), ], line: 353, }, Operator( ( "==", true, ), ), Symbol( "nil", ), ], ], ), ], line: 352, }, Ident { expr: [ Symbol( "debug", ), Symbol( ".", ), Symbol( "setmetatable", ), Call( [ [ Symbol( "nil", ), ], [ Table { data: [], line: 355, column: 8, }, ], ], ), ], line: 353, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "'OK'", ), ], ], ), ], line: 355, }, Return( Some( [ [ Symbol( "12", ), ], ], ), ), ]