--- source: src/main.rs expression: parsed input_file: test-data/lua5.1-tests/sort.lua --- [ Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"testing sort\"", ), ], ], ), ], line: 1, }, Function { local: false, name: [ Symbol( "check", ), ], args: [ "a", "f", ], body: CodeBlock { start: 9, code: [ Alter { names: [ Ident { expr: [ Symbol( "f", ), ], line: 5, }, ], values: [ [ Ident { expr: [ Symbol( "f", ), ], line: 5, }, Operator( ( "or", true, ), ), Lambda { args: [ "x", "y", ], body: CodeBlock { start: 10, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 5, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 5, }, ], ], ), ), ], end: 15, }, line: 5, column: 15, }, ], ], line: 5, column: 16, }, ForLoop { iter: "n", start: [ Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "getn", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 6, }, ], ], ), ], line: 6, }, ], end: [ Symbol( "2", ), ], step: Some( [ Operator( ( "-", false, ), ), Symbol( "1", ), ], ), code: CodeBlock { start: 31, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "f", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 7, }, ], ), Symbol( "]", ), ], line: 7, }, ], [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "n", ), ], line: 7, }, Operator( ( "-", true, ), ), Symbol( "1", ), ], ), Symbol( "]", ), ], line: 7, }, ], ], ), ], line: 7, }, ], ], ), ], line: 7, }, ], end: 50, }, line: 8, column: 1, }, ], end: 60, }, line: 9, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 9, }, ], values: [ [ Table { data: [ ( None, [ Symbol( "\"Jan\"", ), ], ), ( None, [ Symbol( "\"Feb\"", ), ], ), ( None, [ Symbol( "\"Mar\"", ), ], ), ( None, [ Symbol( "\"Apr\"", ), ], ), ( None, [ Symbol( "\"May\"", ), ], ), ( None, [ Symbol( "\"Jun\"", ), ], ), ( None, [ Symbol( "\"Jul\"", ), ], ), ( None, [ Symbol( "\"Aug\"", ), ], ), ( None, [ Symbol( "\"Sep\"", ), ], ), ( None, [ Symbol( "\"Oct\"", ), ], ), ( None, [ Symbol( "\"Nov\"", ), ], ), ( None, [ Symbol( "\"Dec\"", ), ], ), ], line: 12, column: 6, }, ], ], line: 12, column: 6, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 14, }, ], ], ), ], line: 12, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 15, }, ], ], ), ], line: 14, }, Alter { names: [ Ident { expr: [ Symbol( "limit", ), ], line: 15, }, ], values: [ [ Symbol( "30000", ), ], ], line: 18, column: 0, }, IfStatement { condition: [ Ident { expr: [ Symbol( "rawget", ), Call( [ [ Ident { expr: [ Symbol( "_G", ), ], line: 18, }, ], [ Symbol( "\"_soft\"", ), ], ], ), ], line: 18, }, ], body: CodeBlock { start: 108, code: [ Alter { names: [ Ident { expr: [ Symbol( "limit", ), ], line: 18, }, ], values: [ [ Symbol( "5000", ), ], ], line: 18, column: 3, }, ], end: 112, }, next: None, line: 18, column: 12, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 18, }, ], values: [ [ Table { data: [], line: 20, column: 4, }, ], ], line: 21, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 21, }, ], step: None, code: CodeBlock { start: 123, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 22, }, ], ), Symbol( "]", ), ], line: 22, }, ], values: [ [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "random", ), Call( [], ), ], line: 22, }, ], ], line: 22, column: 10, }, ], end: 134, }, line: 23, column: 1, }, Variable { names: [ ( "x", false, ), ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 25, }, ], ], line: 25, column: 8, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 26, }, ], ], ), ], line: 25, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"Sorting %d elements in %.2f sec.\"", ), ], [ Ident { expr: [ Symbol( "limit", ), ], line: 27, }, ], [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 27, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 27, }, ], ], ), ], line: 27, }, ], ], ), ], line: 26, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 28, }, ], ], ), ], line: 27, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 28, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 30, }, ], ], line: 30, column: 7, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 31, }, ], ], ), ], line: 30, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"Re-sorting %d elements in %.2f sec.\"", ), ], [ Ident { expr: [ Symbol( "limit", ), ], line: 32, }, ], [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 32, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 32, }, ], ], ), ], line: 32, }, ], ], ), ], line: 31, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 33, }, ], ], ), ], line: 32, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 33, }, ], values: [ [ Table { data: [], line: 35, column: 4, }, ], ], line: 36, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 36, }, ], step: None, code: CodeBlock { start: 218, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 37, }, ], ), Symbol( "]", ), ], line: 37, }, ], values: [ [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "random", ), Call( [], ), ], line: 37, }, ], ], line: 37, column: 10, }, ], end: 229, }, line: 38, column: 1, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 38, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 40, }, ], ], line: 40, column: 8, }, Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 40, }, ], values: [ [ Symbol( "0", ), ], ], line: 41, column: 3, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 42, }, ], [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 252, code: [ Alter { names: [ Ident { expr: [ Symbol( "i", ), ], line: 42, }, ], values: [ [ Ident { expr: [ Symbol( "i", ), ], line: 42, }, Operator( ( "+", true, ), ), Symbol( "1", ), ], ], line: 42, column: 6, }, Return( Some( [ [ Ident { expr: [ Symbol( "y", ), ], line: 42, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 42, }, ], ], ), ), ], end: 263, }, line: 42, column: 23, }, ], ], ), ], line: 41, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"Invert-sorting other %d elements in %.2f sec., with %i comparisons\"", ), ], [ Ident { expr: [ Symbol( "limit", ), ], line: 43, }, ], [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 44, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 44, }, ], [ Ident { expr: [ Symbol( "i", ), ], line: 44, }, ], ], ), ], line: 43, }, ], ], ), ], line: 42, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 45, }, ], [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 295, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "y", ), ], line: 45, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 45, }, ], ], ), ), ], end: 300, }, line: 45, column: 15, }, ], ], ), ], line: 44, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Table { data: [], line: 48, column: 5, }, ], ], ), ], line: 45, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Ident { expr: [ Symbol( "limit", ), ], line: 50, }, ], step: None, code: CodeBlock { start: 313, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 50, }, ], ), Symbol( "]", ), ], line: 50, }, ], values: [ [ Symbol( "false", ), ], ], line: 50, column: 6, }, ], end: 320, }, line: 50, column: 14, }, Alter { names: [ Ident { expr: [ Symbol( "x", ), ], line: 50, }, ], values: [ [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 51, }, ], ], line: 51, column: 8, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 52, }, ], [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 340, code: [ Return( Some( [ [ Symbol( "nil", ), ], ], ), ), ], end: 343, }, line: 52, column: 15, }, ], ], ), ], line: 51, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"Sorting %d equal elements in %.2f sec.\"", ), ], [ Ident { expr: [ Symbol( "limit", ), ], line: 53, }, ], [ Ident { expr: [ Symbol( "os", ), Symbol( ".", ), Symbol( "clock", ), Call( [], ), ], line: 53, }, Operator( ( "-", true, ), ), Ident { expr: [ Symbol( "x", ), ], line: 53, }, ], ], ), ], line: 53, }, ], ], ), ], line: 52, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 54, }, ], [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 373, code: [ Return( Some( [ [ Symbol( "nil", ), ], ], ), ), ], end: 376, }, line: 54, column: 13, }, ], ], ), ], line: 53, }, ForFuncLoop { iters: [ "i", "v", ], expr: [ Ident { expr: [ Symbol( "pairs", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 55, }, ], ], ), ], line: 55, }, ], stop: None, initial: None, code: CodeBlock { start: 387, code: [ Ident { expr: [ Symbol( "assert", ), Call( [ [ Operator( ( "not", false, ), ), Ident { expr: [ Symbol( "v", ), ], line: 55, }, Operator( ( "or", true, ), ), Ident { expr: [ Symbol( "i", ), ], line: 55, }, Operator( ( "==", true, ), ), Symbol( "'n'", ), Operator( ( "and", true, ), ), Ident { expr: [ Symbol( "v", ), ], line: 55, }, Operator( ( "==", true, ), ), Ident { expr: [ Symbol( "limit", ), ], line: 55, }, ], ], ), ], line: 55, }, ], end: 401, }, line: 55, column: 24, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 55, }, ], values: [ [ Table { data: [ ( None, [ Symbol( "\"�lo\"", ), ], ), ( None, [ Symbol( "\"\\0first :-)\"", ), ], ), ( None, [ Symbol( "\"alo\"", ), ], ), ( None, [ Symbol( "\"then this one\"", ), ], ), ( None, [ Symbol( "\"45\"", ), ], ), ( None, [ Symbol( "\"and a new\"", ), ], ), ], line: 57, column: 15, }, ], ], line: 57, column: 15, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 58, }, ], ], ), ], line: 57, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 59, }, ], ], ), ], line: 58, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 61, }, ], [ Lambda { args: [ "x", "y", ], body: CodeBlock { start: 438, code: [ Ident { expr: [ Symbol( "loadstring", ), Call( [ [ Ident { expr: [ Symbol( "string", ), Symbol( ".", ), Symbol( "format", ), Call( [ [ Symbol( "\"a[%q] = ''\"", ), ], [ Ident { expr: [ Symbol( "x", ), ], line: 62, }, ], ], ), ], line: 62, }, ], ], ), Call( [], ), ], line: 62, }, Ident { expr: [ Symbol( "collectgarbage", ), Call( [], ), ], line: 62, }, Return( Some( [ [ Ident { expr: [ Symbol( "x", ), ], line: 64, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "y", ), ], line: 64, }, ], ], ), ), ], end: 459, }, line: 65, column: 1, }, ], ], ), ], line: 59, }, Alter { names: [ Ident { expr: [ Symbol( "tt", ), ], line: 65, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "__lt", ), ], ), [ Lambda { args: [ "a", "b", ], body: CodeBlock { start: 471, code: [ Return( Some( [ [ Ident { expr: [ Symbol( "a", ), Symbol( ".", ), Symbol( "val", ), ], line: 68, }, Operator( ( "<", true, ), ), Ident { expr: [ Symbol( "b", ), Symbol( ".", ), Symbol( "val", ), ], line: 68, }, ], ], ), ), ], end: 480, }, line: 68, column: 20, }, ], ), ], line: 68, column: 21, }, ], ], line: 68, column: 21, }, Alter { names: [ Ident { expr: [ Symbol( "a", ), ], line: 68, }, ], values: [ [ Table { data: [], line: 69, column: 4, }, ], ], line: 70, column: 0, }, ForLoop { iter: "i", start: [ Symbol( "1", ), ], end: [ Symbol( "10", ), ], step: None, code: CodeBlock { start: 492, code: [ Alter { names: [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 70, }, ], ), Symbol( "]", ), ], line: 70, }, ], values: [ [ Table { data: [ ( Some( [ Symbol( "val", ), ], ), [ Ident { expr: [ Symbol( "math", ), Symbol( ".", ), Symbol( "random", ), Call( [ [ Symbol( "100", ), ], ], ), ], line: 70, }, ], ), ], line: 70, column: 15, }, ], ], line: 70, column: 16, }, Ident { expr: [ Symbol( "setmetatable", ), Call( [ [ Ident { expr: [ Symbol( "a", ), Symbol( "[", ), Expr( [ Ident { expr: [ Symbol( "i", ), ], line: 70, }, ], ), Symbol( "]", ), ], line: 70, }, ], [ Ident { expr: [ Symbol( "tt", ), ], line: 70, }, ], ], ), ], line: 70, }, ], end: 519, }, line: 70, column: 34, }, Ident { expr: [ Symbol( "table", ), Symbol( ".", ), Symbol( "sort", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 71, }, ], ], ), ], line: 70, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 72, }, ], [ Ident { expr: [ Symbol( "tt", ), Symbol( ".", ), Symbol( "__lt", ), ], line: 72, }, ], ], ), ], line: 71, }, Ident { expr: [ Symbol( "check", ), Call( [ [ Ident { expr: [ Symbol( "a", ), ], line: 73, }, ], ], ), ], line: 72, }, Ident { expr: [ Symbol( "print", ), Call( [ [ Symbol( "\"OK\"", ), ], ], ), ], line: 73, }, ]