From b6103e1ef49df279aac81b548dfd6982bdc6acde Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Nov 2024 10:22:08 +0100 Subject: [PATCH 1/2] Rust: Add CFG test for early return in `async` block Also made the test comply with `cargo check`. --- .../controlflow-unstable/Cfg.expected | 53 + .../controlflow-unstable/Cfg.qlref | 1 + .../options.yml | 0 .../controlflow-unstable/test.rs | 22 + .../library-tests/controlflow/Cfg.expected | 2060 +++++++++-------- .../ql/test/library-tests/controlflow/test.rs | 103 +- 6 files changed, 1176 insertions(+), 1063 deletions(-) create mode 100644 rust/ql/test/library-tests/controlflow-unstable/Cfg.expected create mode 100644 rust/ql/test/library-tests/controlflow-unstable/Cfg.qlref rename rust/ql/test/library-tests/{controlflow => controlflow-unstable}/options.yml (100%) create mode 100644 rust/ql/test/library-tests/controlflow-unstable/test.rs diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected new file mode 100644 index 000000000000..05851289a35f --- /dev/null +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.expected @@ -0,0 +1,53 @@ +edges +| test.rs:5:5:11:5 | enter test_and_if_let | test.rs:5:24:5:24 | a | | +| test.rs:5:5:11:5 | exit test_and_if_let (normal) | test.rs:5:5:11:5 | exit test_and_if_let | | +| test.rs:5:24:5:24 | a | test.rs:5:24:5:30 | Param | match | +| test.rs:5:24:5:30 | Param | test.rs:5:33:5:33 | b | | +| test.rs:5:33:5:33 | b | test.rs:5:33:5:47 | Param | match | +| test.rs:5:33:5:47 | Param | test.rs:5:50:5:50 | c | | +| test.rs:5:50:5:50 | c | test.rs:5:50:5:56 | Param | match | +| test.rs:5:50:5:56 | Param | test.rs:6:12:6:12 | a | | +| test.rs:5:67:11:5 | BlockExpr | test.rs:5:5:11:5 | exit test_and_if_let (normal) | | +| test.rs:6:9:10:9 | IfExpr | test.rs:5:67:11:5 | BlockExpr | | +| test.rs:6:12:6:12 | a | test.rs:6:12:6:31 | [boolean(false)] ... && ... | false | +| test.rs:6:12:6:12 | a | test.rs:6:17:6:31 | LetExpr | true | +| test.rs:6:12:6:31 | [boolean(false)] ... && ... | test.rs:9:13:9:17 | false | false | +| test.rs:6:12:6:31 | [boolean(true)] ... && ... | test.rs:7:13:7:13 | d | true | +| test.rs:6:17:6:31 | LetExpr | test.rs:6:31:6:31 | b | | +| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:12:6:31 | [boolean(false)] ... && ... | no-match | +| test.rs:6:21:6:27 | TupleStructPat | test.rs:6:26:6:26 | d | match | +| test.rs:6:26:6:26 | d | test.rs:6:12:6:31 | [boolean(true)] ... && ... | match | +| test.rs:6:31:6:31 | b | test.rs:6:21:6:27 | TupleStructPat | | +| test.rs:6:33:8:9 | BlockExpr | test.rs:6:9:10:9 | IfExpr | | +| test.rs:7:13:7:13 | d | test.rs:6:33:8:9 | BlockExpr | | +| test.rs:8:16:10:9 | BlockExpr | test.rs:6:9:10:9 | IfExpr | | +| test.rs:9:13:9:17 | false | test.rs:8:16:10:9 | BlockExpr | | +| test.rs:13:5:21:5 | enter test_and_if_let2 | test.rs:13:25:13:25 | a | | +| test.rs:13:5:21:5 | exit test_and_if_let2 (normal) | test.rs:13:5:21:5 | exit test_and_if_let2 | | +| test.rs:13:25:13:25 | a | test.rs:13:25:13:31 | Param | match | +| test.rs:13:25:13:31 | Param | test.rs:13:34:13:34 | b | | +| test.rs:13:34:13:34 | b | test.rs:13:34:13:39 | Param | match | +| test.rs:13:34:13:39 | Param | test.rs:13:42:13:42 | c | | +| test.rs:13:42:13:42 | c | test.rs:13:42:13:48 | Param | match | +| test.rs:13:42:13:48 | Param | test.rs:14:12:14:12 | a | | +| test.rs:13:59:21:5 | BlockExpr | test.rs:13:5:21:5 | exit test_and_if_let2 (normal) | | +| test.rs:14:9:20:9 | IfExpr | test.rs:13:59:21:5 | BlockExpr | | +| test.rs:14:12:14:12 | a | test.rs:14:12:14:25 | [boolean(false)] ... && ... | false | +| test.rs:14:12:14:12 | a | test.rs:14:17:14:25 | LetExpr | true | +| test.rs:14:12:14:25 | [boolean(false)] ... && ... | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | +| test.rs:14:12:14:25 | [boolean(true)] ... && ... | test.rs:15:16:15:16 | c | true | +| test.rs:14:12:15:16 | [boolean(false)] ... && ... | test.rs:19:13:19:17 | false | false | +| test.rs:14:12:15:16 | [boolean(true)] ... && ... | test.rs:17:13:17:13 | d | true | +| test.rs:14:17:14:25 | LetExpr | test.rs:14:25:14:25 | b | | +| test.rs:14:21:14:21 | d | test.rs:14:12:14:25 | [boolean(true)] ... && ... | match | +| test.rs:14:25:14:25 | b | test.rs:14:21:14:21 | d | | +| test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(false)] ... && ... | false | +| test.rs:15:16:15:16 | c | test.rs:14:12:15:16 | [boolean(true)] ... && ... | true | +| test.rs:16:9:18:9 | BlockExpr | test.rs:14:9:20:9 | IfExpr | | +| test.rs:17:13:17:13 | d | test.rs:17:17:17:17 | 0 | | +| test.rs:17:13:17:17 | ... > ... | test.rs:16:9:18:9 | BlockExpr | | +| test.rs:17:17:17:17 | 0 | test.rs:17:13:17:17 | ... > ... | | +| test.rs:18:16:20:9 | BlockExpr | test.rs:14:9:20:9 | IfExpr | | +| test.rs:19:13:19:17 | false | test.rs:18:16:20:9 | BlockExpr | | +breakTarget +continueTarget diff --git a/rust/ql/test/library-tests/controlflow-unstable/Cfg.qlref b/rust/ql/test/library-tests/controlflow-unstable/Cfg.qlref new file mode 100644 index 000000000000..ba4ee4b414f1 --- /dev/null +++ b/rust/ql/test/library-tests/controlflow-unstable/Cfg.qlref @@ -0,0 +1 @@ +query: utils/Cfg.ql \ No newline at end of file diff --git a/rust/ql/test/library-tests/controlflow/options.yml b/rust/ql/test/library-tests/controlflow-unstable/options.yml similarity index 100% rename from rust/ql/test/library-tests/controlflow/options.yml rename to rust/ql/test/library-tests/controlflow-unstable/options.yml diff --git a/rust/ql/test/library-tests/controlflow-unstable/test.rs b/rust/ql/test/library-tests/controlflow-unstable/test.rs new file mode 100644 index 000000000000..738d696bebe6 --- /dev/null +++ b/rust/ql/test/library-tests/controlflow-unstable/test.rs @@ -0,0 +1,22 @@ +// TODO: Move these tests into `controlflow` when they become stable features + +mod if_expression { + + fn test_and_if_let(a: bool, b: Option, c: bool) -> bool { + if a && let Some(d) = b { + d + } else { + false + } + } + + fn test_and_if_let2(a: bool, b: i64, c: bool) -> bool { + if a && let d = b + && c + { + d > 0 + } else { + false + } + } +} diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 9539787a4e89..9b112133edd9 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -1,17 +1,16 @@ edges -| test.rs:5:5:8:5 | enter function_call | test.rs:6:9:6:45 | ExprStmt | | +| test.rs:5:5:8:5 | enter function_call | test.rs:6:9:6:64 | ExprStmt | | | test.rs:5:5:8:5 | exit function_call (normal) | test.rs:5:5:8:5 | exit function_call | | | test.rs:5:24:8:5 | BlockExpr | test.rs:5:5:8:5 | exit function_call (normal) | | -| test.rs:6:9:6:25 | test_and_operator | test.rs:6:27:6:30 | true | | -| test.rs:6:9:6:44 | CallExpr | test.rs:7:9:7:28 | ExprStmt | | -| test.rs:6:9:6:45 | ExprStmt | test.rs:6:9:6:25 | test_and_operator | | -| test.rs:6:27:6:30 | true | test.rs:6:33:6:37 | false | | -| test.rs:6:33:6:37 | false | test.rs:6:40:6:43 | true | | -| test.rs:6:40:6:43 | true | test.rs:6:9:6:44 | CallExpr | | -| test.rs:7:9:7:23 | foo::<...> | test.rs:7:25:7:26 | 42 | | -| test.rs:7:9:7:27 | CallExpr | test.rs:5:24:8:5 | BlockExpr | | -| test.rs:7:9:7:28 | ExprStmt | test.rs:7:9:7:23 | foo::<...> | | -| test.rs:7:25:7:26 | 42 | test.rs:7:9:7:27 | CallExpr | | +| test.rs:6:9:6:44 | logical_operators::test_and_operator | test.rs:6:46:6:49 | true | | +| test.rs:6:9:6:63 | CallExpr | test.rs:7:9:7:22 | ExprStmt | | +| test.rs:6:9:6:64 | ExprStmt | test.rs:6:9:6:44 | logical_operators::test_and_operator | | +| test.rs:6:46:6:49 | true | test.rs:6:52:6:56 | false | | +| test.rs:6:52:6:56 | false | test.rs:6:59:6:62 | true | | +| test.rs:6:59:6:62 | true | test.rs:6:9:6:63 | CallExpr | | +| test.rs:7:9:7:19 | method_call | test.rs:7:9:7:21 | CallExpr | | +| test.rs:7:9:7:21 | CallExpr | test.rs:5:24:8:5 | BlockExpr | | +| test.rs:7:9:7:22 | ExprStmt | test.rs:7:9:7:19 | method_call | | | test.rs:10:5:13:5 | enter method_call | test.rs:11:9:11:37 | LetStmt | | | test.rs:10:5:13:5 | exit method_call (normal) | test.rs:10:5:13:5 | exit method_call | | | test.rs:10:22:13:5 | BlockExpr | test.rs:10:5:13:5 | exit method_call (normal) | | @@ -24,1021 +23,1046 @@ edges | test.rs:12:9:12:28 | ExprStmt | test.rs:12:9:12:11 | map | | | test.rs:12:20:12:21 | 37 | test.rs:12:24:12:26 | "a" | | | test.rs:12:24:12:26 | "a" | test.rs:12:9:12:27 | ... .insert(...) | | -| test.rs:18:5:34:5 | enter test_break_and_continue | test.rs:18:32:18:32 | n | | -| test.rs:18:5:34:5 | exit test_break_and_continue (normal) | test.rs:18:5:34:5 | exit test_break_and_continue | | -| test.rs:18:32:18:32 | n | test.rs:18:32:18:37 | Param | match | -| test.rs:18:32:18:37 | Param | test.rs:19:9:19:22 | LetStmt | | -| test.rs:19:9:19:22 | LetStmt | test.rs:19:21:19:21 | n | | -| test.rs:19:13:19:17 | i | test.rs:20:9:32:9 | ExprStmt | match | -| test.rs:19:21:19:21 | n | test.rs:19:13:19:17 | i | | -| test.rs:20:9:32:9 | ExprStmt | test.rs:21:13:21:24 | ExprStmt | | -| test.rs:20:9:32:9 | LoopExpr | test.rs:33:9:33:20 | ExprStmt | | -| test.rs:20:14:32:9 | BlockExpr | test.rs:21:13:21:24 | ExprStmt | | -| test.rs:21:13:21:13 | i | test.rs:21:17:21:20 | next | | -| test.rs:21:13:21:23 | ... = ... | test.rs:22:13:24:13 | ExprStmt | | -| test.rs:21:13:21:24 | ExprStmt | test.rs:21:13:21:13 | i | | -| test.rs:21:17:21:20 | next | test.rs:21:22:21:22 | i | | -| test.rs:21:17:21:23 | CallExpr | test.rs:21:13:21:23 | ... = ... | | -| test.rs:21:22:21:22 | i | test.rs:21:17:21:23 | CallExpr | | -| test.rs:22:13:24:13 | ExprStmt | test.rs:22:16:22:16 | i | | -| test.rs:22:13:24:13 | IfExpr | test.rs:25:13:27:13 | ExprStmt | | -| test.rs:22:16:22:16 | i | test.rs:22:20:22:24 | 10000 | | -| test.rs:22:16:22:24 | ... > ... | test.rs:22:13:24:13 | IfExpr | false | -| test.rs:22:16:22:24 | ... > ... | test.rs:23:17:23:29 | ExprStmt | true | -| test.rs:22:20:22:24 | 10000 | test.rs:22:16:22:24 | ... > ... | | -| test.rs:23:17:23:28 | ReturnExpr | test.rs:18:5:34:5 | exit test_break_and_continue (normal) | return | -| test.rs:23:17:23:29 | ExprStmt | test.rs:23:24:23:28 | false | | -| test.rs:23:24:23:28 | false | test.rs:23:17:23:28 | ReturnExpr | | -| test.rs:25:13:27:13 | ExprStmt | test.rs:25:16:25:16 | i | | -| test.rs:25:13:27:13 | IfExpr | test.rs:28:13:30:13 | ExprStmt | | -| test.rs:25:16:25:16 | i | test.rs:25:21:25:21 | 1 | | -| test.rs:25:16:25:21 | ... == ... | test.rs:25:13:27:13 | IfExpr | false | -| test.rs:25:16:25:21 | ... == ... | test.rs:26:17:26:22 | ExprStmt | true | -| test.rs:25:21:25:21 | 1 | test.rs:25:16:25:21 | ... == ... | | -| test.rs:26:17:26:21 | BreakExpr | test.rs:20:9:32:9 | LoopExpr | break | -| test.rs:26:17:26:22 | ExprStmt | test.rs:26:17:26:21 | BreakExpr | | -| test.rs:28:13:30:13 | ExprStmt | test.rs:28:16:28:16 | i | | -| test.rs:28:13:30:13 | IfExpr | test.rs:31:13:31:13 | i | | -| test.rs:28:16:28:16 | i | test.rs:28:20:28:20 | 2 | | -| test.rs:28:16:28:20 | ... % ... | test.rs:28:25:28:25 | 0 | | -| test.rs:28:16:28:25 | ... != ... | test.rs:28:13:30:13 | IfExpr | false | -| test.rs:28:16:28:25 | ... != ... | test.rs:29:17:29:25 | ExprStmt | true | -| test.rs:28:20:28:20 | 2 | test.rs:28:16:28:20 | ... % ... | | -| test.rs:28:25:28:25 | 0 | test.rs:28:16:28:25 | ... != ... | | -| test.rs:29:17:29:24 | ContinueExpr | test.rs:21:13:21:24 | ExprStmt | continue | -| test.rs:29:17:29:25 | ExprStmt | test.rs:29:17:29:24 | ContinueExpr | | -| test.rs:31:13:31:13 | i | test.rs:31:17:31:17 | i | | -| test.rs:31:13:31:21 | ... = ... | test.rs:20:14:32:9 | BlockExpr | | -| test.rs:31:17:31:17 | i | test.rs:31:21:31:21 | 2 | | -| test.rs:31:17:31:21 | ... / ... | test.rs:31:13:31:21 | ... = ... | | -| test.rs:31:21:31:21 | 2 | test.rs:31:17:31:21 | ... / ... | | -| test.rs:33:9:33:19 | ReturnExpr | test.rs:18:5:34:5 | exit test_break_and_continue (normal) | return | -| test.rs:33:9:33:20 | ExprStmt | test.rs:33:16:33:19 | true | | -| test.rs:33:16:33:19 | true | test.rs:33:9:33:19 | ReturnExpr | | -| test.rs:36:5:48:5 | enter test_break_with_labels | test.rs:36:31:36:31 | b | | -| test.rs:36:5:48:5 | exit test_break_with_labels (normal) | test.rs:36:5:48:5 | exit test_break_with_labels | | -| test.rs:36:31:36:31 | b | test.rs:36:31:36:37 | Param | match | -| test.rs:36:31:36:37 | Param | test.rs:37:9:46:9 | ExprStmt | | -| test.rs:36:48:48:5 | BlockExpr | test.rs:36:5:48:5 | exit test_break_with_labels (normal) | | -| test.rs:37:9:46:9 | ExprStmt | test.rs:39:17:43:17 | ExprStmt | | -| test.rs:37:9:46:9 | LoopExpr | test.rs:47:9:47:12 | true | | -| test.rs:37:22:46:9 | BlockExpr | test.rs:39:17:43:17 | ExprStmt | | -| test.rs:38:13:45:13 | LoopExpr | test.rs:37:22:46:9 | BlockExpr | | -| test.rs:39:17:43:17 | ExprStmt | test.rs:39:20:39:20 | b | | -| test.rs:39:17:43:17 | IfExpr | test.rs:44:17:44:29 | ExprStmt | | -| test.rs:39:20:39:20 | b | test.rs:40:21:40:26 | ExprStmt | true | -| test.rs:39:20:39:20 | b | test.rs:41:27:41:27 | b | false | -| test.rs:40:21:40:25 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | break | -| test.rs:40:21:40:26 | ExprStmt | test.rs:40:21:40:25 | BreakExpr | | -| test.rs:41:24:43:17 | IfExpr | test.rs:39:17:43:17 | IfExpr | | -| test.rs:41:27:41:27 | b | test.rs:41:24:43:17 | IfExpr | false | -| test.rs:41:27:41:27 | b | test.rs:42:21:42:33 | ExprStmt | true | -| test.rs:42:21:42:32 | BreakExpr | test.rs:37:9:46:9 | LoopExpr | break | -| test.rs:42:21:42:33 | ExprStmt | test.rs:42:21:42:32 | BreakExpr | | -| test.rs:44:17:44:28 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | break | -| test.rs:44:17:44:29 | ExprStmt | test.rs:44:17:44:28 | BreakExpr | | -| test.rs:47:9:47:12 | true | test.rs:36:48:48:5 | BlockExpr | | -| test.rs:50:5:62:5 | enter test_continue_with_labels | test.rs:50:34:50:34 | b | | -| test.rs:50:34:50:34 | b | test.rs:50:34:50:40 | Param | match | -| test.rs:50:34:50:40 | Param | test.rs:52:13:52:14 | ExprStmt | | -| test.rs:52:13:52:13 | 1 | test.rs:54:17:58:17 | ExprStmt | | -| test.rs:52:13:52:14 | ExprStmt | test.rs:52:13:52:13 | 1 | | -| test.rs:54:17:58:17 | ExprStmt | test.rs:54:20:54:20 | b | | -| test.rs:54:17:58:17 | IfExpr | test.rs:59:17:59:32 | ExprStmt | | -| test.rs:54:20:54:20 | b | test.rs:55:21:55:29 | ExprStmt | true | -| test.rs:54:20:54:20 | b | test.rs:56:27:56:27 | b | false | -| test.rs:55:21:55:28 | ContinueExpr | test.rs:54:17:58:17 | ExprStmt | continue | -| test.rs:55:21:55:29 | ExprStmt | test.rs:55:21:55:28 | ContinueExpr | | -| test.rs:56:24:58:17 | IfExpr | test.rs:54:17:58:17 | IfExpr | | -| test.rs:56:27:56:27 | b | test.rs:56:24:58:17 | IfExpr | false | -| test.rs:56:27:56:27 | b | test.rs:57:21:57:36 | ExprStmt | true | -| test.rs:57:21:57:35 | ContinueExpr | test.rs:52:13:52:14 | ExprStmt | continue | -| test.rs:57:21:57:36 | ExprStmt | test.rs:57:21:57:35 | ContinueExpr | | -| test.rs:59:17:59:31 | ContinueExpr | test.rs:54:17:58:17 | ExprStmt | continue | -| test.rs:59:17:59:32 | ExprStmt | test.rs:59:17:59:31 | ContinueExpr | | -| test.rs:64:5:76:5 | enter test_loop_label_shadowing | test.rs:64:34:64:34 | b | | -| test.rs:64:34:64:34 | b | test.rs:64:34:64:40 | Param | match | -| test.rs:64:34:64:40 | Param | test.rs:66:13:66:14 | ExprStmt | | -| test.rs:66:13:66:13 | 1 | test.rs:68:17:72:17 | ExprStmt | | -| test.rs:66:13:66:14 | ExprStmt | test.rs:66:13:66:13 | 1 | | -| test.rs:68:17:72:17 | ExprStmt | test.rs:68:20:68:20 | b | | -| test.rs:68:17:72:17 | IfExpr | test.rs:73:17:73:32 | ExprStmt | | -| test.rs:68:20:68:20 | b | test.rs:69:21:69:29 | ExprStmt | true | -| test.rs:68:20:68:20 | b | test.rs:70:27:70:27 | b | false | -| test.rs:69:21:69:28 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | -| test.rs:69:21:69:29 | ExprStmt | test.rs:69:21:69:28 | ContinueExpr | | -| test.rs:70:24:72:17 | IfExpr | test.rs:68:17:72:17 | IfExpr | | -| test.rs:70:27:70:27 | b | test.rs:70:24:72:17 | IfExpr | false | -| test.rs:70:27:70:27 | b | test.rs:71:21:71:36 | ExprStmt | true | -| test.rs:71:21:71:35 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | -| test.rs:71:21:71:36 | ExprStmt | test.rs:71:21:71:35 | ContinueExpr | | -| test.rs:73:17:73:31 | ContinueExpr | test.rs:68:17:72:17 | ExprStmt | continue | -| test.rs:73:17:73:32 | ExprStmt | test.rs:73:17:73:31 | ContinueExpr | | -| test.rs:78:5:87:5 | enter test_while | test.rs:78:19:78:19 | i | | -| test.rs:78:5:87:5 | exit test_while (normal) | test.rs:78:5:87:5 | exit test_while | | -| test.rs:78:19:78:19 | i | test.rs:78:19:78:24 | Param | match | -| test.rs:78:19:78:24 | Param | test.rs:79:9:79:25 | LetStmt | | -| test.rs:78:27:87:5 | BlockExpr | test.rs:78:5:87:5 | exit test_while (normal) | | -| test.rs:79:9:79:25 | LetStmt | test.rs:79:21:79:24 | true | | -| test.rs:79:13:79:17 | b | test.rs:80:15:80:15 | b | match | -| test.rs:79:21:79:24 | true | test.rs:79:13:79:17 | b | | -| test.rs:80:9:86:9 | WhileExpr | test.rs:78:27:87:5 | BlockExpr | | -| test.rs:80:15:80:15 | b | test.rs:80:9:86:9 | WhileExpr | false | -| test.rs:80:15:80:15 | b | test.rs:81:13:81:14 | ExprStmt | true | -| test.rs:80:17:86:9 | BlockExpr | test.rs:80:15:80:15 | b | | -| test.rs:81:13:81:13 | 1 | test.rs:82:13:84:13 | ExprStmt | | -| test.rs:81:13:81:14 | ExprStmt | test.rs:81:13:81:13 | 1 | | -| test.rs:82:13:84:13 | ExprStmt | test.rs:82:17:82:17 | i | | -| test.rs:82:13:84:13 | IfExpr | test.rs:85:13:85:22 | ExprStmt | | -| test.rs:82:17:82:17 | i | test.rs:82:21:82:21 | 0 | | -| test.rs:82:17:82:21 | ... > ... | test.rs:82:13:84:13 | IfExpr | false | -| test.rs:82:17:82:21 | ... > ... | test.rs:83:17:83:22 | ExprStmt | true | -| test.rs:82:21:82:21 | 0 | test.rs:82:17:82:21 | ... > ... | | -| test.rs:83:17:83:21 | BreakExpr | test.rs:80:9:86:9 | WhileExpr | break | -| test.rs:83:17:83:22 | ExprStmt | test.rs:83:17:83:21 | BreakExpr | | -| test.rs:85:13:85:13 | b | test.rs:85:17:85:21 | false | | -| test.rs:85:13:85:21 | ... = ... | test.rs:80:17:86:9 | BlockExpr | | -| test.rs:85:13:85:22 | ExprStmt | test.rs:85:13:85:13 | b | | -| test.rs:85:17:85:21 | false | test.rs:85:13:85:21 | ... = ... | | -| test.rs:89:5:96:5 | enter test_while_let | test.rs:90:9:90:29 | LetStmt | | -| test.rs:89:5:96:5 | exit test_while_let (normal) | test.rs:89:5:96:5 | exit test_while_let | | -| test.rs:89:25:96:5 | BlockExpr | test.rs:89:5:96:5 | exit test_while_let (normal) | | -| test.rs:90:9:90:29 | LetStmt | test.rs:90:24:90:24 | 1 | | -| test.rs:90:13:90:20 | iter | test.rs:91:15:91:39 | LetExpr | match | -| test.rs:90:24:90:24 | 1 | test.rs:90:27:90:28 | 10 | | -| test.rs:90:24:90:28 | RangeExpr | test.rs:90:13:90:20 | iter | | -| test.rs:90:27:90:28 | 10 | test.rs:90:24:90:28 | RangeExpr | | -| test.rs:91:9:95:9 | WhileExpr | test.rs:89:25:96:5 | BlockExpr | | -| test.rs:91:15:91:39 | LetExpr | test.rs:91:29:91:32 | iter | | -| test.rs:91:19:91:25 | TupleStructPat | test.rs:91:9:95:9 | WhileExpr | no-match | -| test.rs:91:19:91:25 | TupleStructPat | test.rs:91:24:91:24 | x | match | -| test.rs:91:24:91:24 | x | test.rs:92:17:92:17 | i | match | -| test.rs:91:29:91:32 | iter | test.rs:91:29:91:39 | ... .next(...) | | -| test.rs:91:29:91:39 | ... .next(...) | test.rs:91:19:91:25 | TupleStructPat | | -| test.rs:91:41:95:9 | BlockExpr | test.rs:91:15:91:39 | LetExpr | | -| test.rs:92:13:94:13 | IfExpr | test.rs:91:41:95:9 | BlockExpr | | -| test.rs:92:17:92:17 | i | test.rs:92:21:92:21 | 5 | | -| test.rs:92:17:92:21 | ... = ... | test.rs:92:13:94:13 | IfExpr | false | -| test.rs:92:17:92:21 | ... = ... | test.rs:93:17:93:22 | ExprStmt | true | -| test.rs:92:21:92:21 | 5 | test.rs:92:17:92:21 | ... = ... | | -| test.rs:93:17:93:21 | BreakExpr | test.rs:91:9:95:9 | WhileExpr | break | -| test.rs:93:17:93:22 | ExprStmt | test.rs:93:17:93:21 | BreakExpr | | -| test.rs:98:5:105:5 | enter test_for | test.rs:98:17:98:17 | j | | -| test.rs:98:5:105:5 | exit test_for (normal) | test.rs:98:5:105:5 | exit test_for | | -| test.rs:98:17:98:17 | j | test.rs:98:17:98:22 | Param | match | -| test.rs:98:17:98:22 | Param | test.rs:99:18:99:18 | 0 | | -| test.rs:98:25:105:5 | BlockExpr | test.rs:98:5:105:5 | exit test_for (normal) | | -| test.rs:99:9:104:9 | ForExpr | test.rs:98:25:105:5 | BlockExpr | | -| test.rs:99:13:99:13 | i | test.rs:99:9:104:9 | ForExpr | no-match | -| test.rs:99:13:99:13 | i | test.rs:100:13:102:13 | ExprStmt | match | -| test.rs:99:18:99:18 | 0 | test.rs:99:21:99:22 | 10 | | -| test.rs:99:18:99:22 | RangeExpr | test.rs:99:13:99:13 | i | | -| test.rs:99:21:99:22 | 10 | test.rs:99:18:99:22 | RangeExpr | | -| test.rs:99:24:104:9 | BlockExpr | test.rs:99:13:99:13 | i | | -| test.rs:100:13:102:13 | ExprStmt | test.rs:100:17:100:17 | i | | -| test.rs:100:13:102:13 | IfExpr | test.rs:103:13:103:14 | ExprStmt | | -| test.rs:100:17:100:17 | i | test.rs:100:22:100:22 | j | | +| test.rs:18:5:24:5 | enter next | test.rs:18:13:18:13 | n | | +| test.rs:18:5:24:5 | exit next (normal) | test.rs:18:5:24:5 | exit next | | +| test.rs:18:13:18:13 | n | test.rs:18:13:18:18 | Param | match | +| test.rs:18:13:18:18 | Param | test.rs:19:12:19:12 | n | | +| test.rs:18:28:24:5 | BlockExpr | test.rs:18:5:24:5 | exit next (normal) | | +| test.rs:19:9:23:9 | IfExpr | test.rs:18:28:24:5 | BlockExpr | | +| test.rs:19:12:19:12 | n | test.rs:19:16:19:16 | 2 | | +| test.rs:19:12:19:16 | ... % ... | test.rs:19:21:19:21 | 0 | | +| test.rs:19:12:19:21 | ... == ... | test.rs:20:13:20:13 | n | true | +| test.rs:19:12:19:21 | ... == ... | test.rs:22:13:22:13 | 3 | false | +| test.rs:19:16:19:16 | 2 | test.rs:19:12:19:16 | ... % ... | | +| test.rs:19:21:19:21 | 0 | test.rs:19:12:19:21 | ... == ... | | +| test.rs:19:23:21:9 | BlockExpr | test.rs:19:9:23:9 | IfExpr | | +| test.rs:20:13:20:13 | n | test.rs:20:17:20:17 | 2 | | +| test.rs:20:13:20:17 | ... / ... | test.rs:19:23:21:9 | BlockExpr | | +| test.rs:20:17:20:17 | 2 | test.rs:20:13:20:17 | ... / ... | | +| test.rs:21:16:23:9 | BlockExpr | test.rs:19:9:23:9 | IfExpr | | +| test.rs:22:13:22:13 | 3 | test.rs:22:17:22:17 | n | | +| test.rs:22:13:22:17 | ... * ... | test.rs:22:21:22:21 | 1 | | +| test.rs:22:13:22:21 | ... + ... | test.rs:21:16:23:9 | BlockExpr | | +| test.rs:22:17:22:17 | n | test.rs:22:13:22:17 | ... * ... | | +| test.rs:22:21:22:21 | 1 | test.rs:22:13:22:21 | ... + ... | | +| test.rs:26:5:42:5 | enter test_break_and_continue | test.rs:26:32:26:32 | n | | +| test.rs:26:5:42:5 | exit test_break_and_continue (normal) | test.rs:26:5:42:5 | exit test_break_and_continue | | +| test.rs:26:32:26:32 | n | test.rs:26:32:26:37 | Param | match | +| test.rs:26:32:26:37 | Param | test.rs:27:9:27:22 | LetStmt | | +| test.rs:27:9:27:22 | LetStmt | test.rs:27:21:27:21 | n | | +| test.rs:27:13:27:17 | i | test.rs:28:9:40:9 | ExprStmt | match | +| test.rs:27:21:27:21 | n | test.rs:27:13:27:17 | i | | +| test.rs:28:9:40:9 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | | +| test.rs:28:9:40:9 | LoopExpr | test.rs:41:9:41:20 | ExprStmt | | +| test.rs:28:14:40:9 | BlockExpr | test.rs:29:13:29:24 | ExprStmt | | +| test.rs:29:13:29:13 | i | test.rs:29:17:29:20 | next | | +| test.rs:29:13:29:23 | ... = ... | test.rs:30:13:32:13 | ExprStmt | | +| test.rs:29:13:29:24 | ExprStmt | test.rs:29:13:29:13 | i | | +| test.rs:29:17:29:20 | next | test.rs:29:22:29:22 | i | | +| test.rs:29:17:29:23 | CallExpr | test.rs:29:13:29:23 | ... = ... | | +| test.rs:29:22:29:22 | i | test.rs:29:17:29:23 | CallExpr | | +| test.rs:30:13:32:13 | ExprStmt | test.rs:30:16:30:16 | i | | +| test.rs:30:13:32:13 | IfExpr | test.rs:33:13:35:13 | ExprStmt | | +| test.rs:30:16:30:16 | i | test.rs:30:20:30:24 | 10000 | | +| test.rs:30:16:30:24 | ... > ... | test.rs:30:13:32:13 | IfExpr | false | +| test.rs:30:16:30:24 | ... > ... | test.rs:31:17:31:29 | ExprStmt | true | +| test.rs:30:20:30:24 | 10000 | test.rs:30:16:30:24 | ... > ... | | +| test.rs:31:17:31:28 | ReturnExpr | test.rs:26:5:42:5 | exit test_break_and_continue (normal) | return | +| test.rs:31:17:31:29 | ExprStmt | test.rs:31:24:31:28 | false | | +| test.rs:31:24:31:28 | false | test.rs:31:17:31:28 | ReturnExpr | | +| test.rs:33:13:35:13 | ExprStmt | test.rs:33:16:33:16 | i | | +| test.rs:33:13:35:13 | IfExpr | test.rs:36:13:38:13 | ExprStmt | | +| test.rs:33:16:33:16 | i | test.rs:33:21:33:21 | 1 | | +| test.rs:33:16:33:21 | ... == ... | test.rs:33:13:35:13 | IfExpr | false | +| test.rs:33:16:33:21 | ... == ... | test.rs:34:17:34:22 | ExprStmt | true | +| test.rs:33:21:33:21 | 1 | test.rs:33:16:33:21 | ... == ... | | +| test.rs:34:17:34:21 | BreakExpr | test.rs:28:9:40:9 | LoopExpr | break | +| test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:21 | BreakExpr | | +| test.rs:36:13:38:13 | ExprStmt | test.rs:36:16:36:16 | i | | +| test.rs:36:13:38:13 | IfExpr | test.rs:39:13:39:13 | i | | +| test.rs:36:16:36:16 | i | test.rs:36:20:36:20 | 2 | | +| test.rs:36:16:36:20 | ... % ... | test.rs:36:25:36:25 | 0 | | +| test.rs:36:16:36:25 | ... != ... | test.rs:36:13:38:13 | IfExpr | false | +| test.rs:36:16:36:25 | ... != ... | test.rs:37:17:37:25 | ExprStmt | true | +| test.rs:36:20:36:20 | 2 | test.rs:36:16:36:20 | ... % ... | | +| test.rs:36:25:36:25 | 0 | test.rs:36:16:36:25 | ... != ... | | +| test.rs:37:17:37:24 | ContinueExpr | test.rs:29:13:29:24 | ExprStmt | continue | +| test.rs:37:17:37:25 | ExprStmt | test.rs:37:17:37:24 | ContinueExpr | | +| test.rs:39:13:39:13 | i | test.rs:39:17:39:17 | i | | +| test.rs:39:13:39:21 | ... = ... | test.rs:28:14:40:9 | BlockExpr | | +| test.rs:39:17:39:17 | i | test.rs:39:21:39:21 | 2 | | +| test.rs:39:17:39:21 | ... / ... | test.rs:39:13:39:21 | ... = ... | | +| test.rs:39:21:39:21 | 2 | test.rs:39:17:39:21 | ... / ... | | +| test.rs:41:9:41:19 | ReturnExpr | test.rs:26:5:42:5 | exit test_break_and_continue (normal) | return | +| test.rs:41:9:41:20 | ExprStmt | test.rs:41:16:41:19 | true | | +| test.rs:41:16:41:19 | true | test.rs:41:9:41:19 | ReturnExpr | | +| test.rs:44:5:56:5 | enter test_break_with_labels | test.rs:44:31:44:31 | b | | +| test.rs:44:5:56:5 | exit test_break_with_labels (normal) | test.rs:44:5:56:5 | exit test_break_with_labels | | +| test.rs:44:31:44:31 | b | test.rs:44:31:44:37 | Param | match | +| test.rs:44:31:44:37 | Param | test.rs:45:9:54:9 | ExprStmt | | +| test.rs:44:48:56:5 | BlockExpr | test.rs:44:5:56:5 | exit test_break_with_labels (normal) | | +| test.rs:45:9:54:9 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | | +| test.rs:45:9:54:9 | LoopExpr | test.rs:55:9:55:12 | true | | +| test.rs:45:22:54:9 | BlockExpr | test.rs:47:17:51:17 | ExprStmt | | +| test.rs:46:13:53:13 | LoopExpr | test.rs:45:22:54:9 | BlockExpr | | +| test.rs:47:17:51:17 | ExprStmt | test.rs:47:20:47:20 | b | | +| test.rs:47:17:51:17 | IfExpr | test.rs:52:17:52:29 | ExprStmt | | +| test.rs:47:20:47:20 | b | test.rs:48:21:48:26 | ExprStmt | true | +| test.rs:47:20:47:20 | b | test.rs:49:27:49:27 | b | false | +| test.rs:48:21:48:25 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | break | +| test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:25 | BreakExpr | | +| test.rs:49:24:51:17 | IfExpr | test.rs:47:17:51:17 | IfExpr | | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | IfExpr | false | +| test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | true | +| test.rs:50:21:50:32 | BreakExpr | test.rs:45:9:54:9 | LoopExpr | break | +| test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:32 | BreakExpr | | +| test.rs:52:17:52:28 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | break | +| test.rs:52:17:52:29 | ExprStmt | test.rs:52:17:52:28 | BreakExpr | | +| test.rs:55:9:55:12 | true | test.rs:44:48:56:5 | BlockExpr | | +| test.rs:58:5:70:5 | enter test_continue_with_labels | test.rs:58:34:58:34 | b | | +| test.rs:58:34:58:34 | b | test.rs:58:34:58:40 | Param | match | +| test.rs:58:34:58:40 | Param | test.rs:60:13:60:14 | ExprStmt | | +| test.rs:60:13:60:13 | 1 | test.rs:62:17:66:17 | ExprStmt | | +| test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:13 | 1 | | +| test.rs:62:17:66:17 | ExprStmt | test.rs:62:20:62:20 | b | | +| test.rs:62:17:66:17 | IfExpr | test.rs:67:17:67:32 | ExprStmt | | +| test.rs:62:20:62:20 | b | test.rs:63:21:63:29 | ExprStmt | true | +| test.rs:62:20:62:20 | b | test.rs:64:27:64:27 | b | false | +| test.rs:63:21:63:28 | ContinueExpr | test.rs:62:17:66:17 | ExprStmt | continue | +| test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:28 | ContinueExpr | | +| test.rs:64:24:66:17 | IfExpr | test.rs:62:17:66:17 | IfExpr | | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | IfExpr | false | +| test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | true | +| test.rs:65:21:65:35 | ContinueExpr | test.rs:60:13:60:14 | ExprStmt | continue | +| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:35 | ContinueExpr | | +| test.rs:67:17:67:31 | ContinueExpr | test.rs:62:17:66:17 | ExprStmt | continue | +| test.rs:67:17:67:32 | ExprStmt | test.rs:67:17:67:31 | ContinueExpr | | +| test.rs:72:5:84:5 | enter test_loop_label_shadowing | test.rs:72:34:72:34 | b | | +| test.rs:72:34:72:34 | b | test.rs:72:34:72:40 | Param | match | +| test.rs:72:34:72:40 | Param | test.rs:74:13:74:14 | ExprStmt | | +| test.rs:74:13:74:13 | 1 | test.rs:76:17:80:17 | ExprStmt | | +| test.rs:74:13:74:14 | ExprStmt | test.rs:74:13:74:13 | 1 | | +| test.rs:76:17:80:17 | ExprStmt | test.rs:76:20:76:20 | b | | +| test.rs:76:17:80:17 | IfExpr | test.rs:81:17:81:32 | ExprStmt | | +| test.rs:76:20:76:20 | b | test.rs:77:21:77:29 | ExprStmt | true | +| test.rs:76:20:76:20 | b | test.rs:78:27:78:27 | b | false | +| test.rs:77:21:77:28 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:28 | ContinueExpr | | +| test.rs:78:24:80:17 | IfExpr | test.rs:76:17:80:17 | IfExpr | | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | IfExpr | false | +| test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | true | +| test.rs:79:21:79:35 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:35 | ContinueExpr | | +| test.rs:81:17:81:31 | ContinueExpr | test.rs:76:17:80:17 | ExprStmt | continue | +| test.rs:81:17:81:32 | ExprStmt | test.rs:81:17:81:31 | ContinueExpr | | +| test.rs:86:5:95:5 | enter test_while | test.rs:86:19:86:19 | i | | +| test.rs:86:5:95:5 | exit test_while (normal) | test.rs:86:5:95:5 | exit test_while | | +| test.rs:86:19:86:19 | i | test.rs:86:19:86:24 | Param | match | +| test.rs:86:19:86:24 | Param | test.rs:87:9:87:25 | LetStmt | | +| test.rs:86:27:95:5 | BlockExpr | test.rs:86:5:95:5 | exit test_while (normal) | | +| test.rs:87:9:87:25 | LetStmt | test.rs:87:21:87:24 | true | | +| test.rs:87:13:87:17 | b | test.rs:88:15:88:15 | b | match | +| test.rs:87:21:87:24 | true | test.rs:87:13:87:17 | b | | +| test.rs:88:9:94:9 | WhileExpr | test.rs:86:27:95:5 | BlockExpr | | +| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | WhileExpr | false | +| test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | true | +| test.rs:88:17:94:9 | BlockExpr | test.rs:88:15:88:15 | b | | +| test.rs:89:13:89:13 | 1 | test.rs:90:13:92:13 | ExprStmt | | +| test.rs:89:13:89:14 | ExprStmt | test.rs:89:13:89:13 | 1 | | +| test.rs:90:13:92:13 | ExprStmt | test.rs:90:17:90:17 | i | | +| test.rs:90:13:92:13 | IfExpr | test.rs:93:13:93:22 | ExprStmt | | +| test.rs:90:17:90:17 | i | test.rs:90:21:90:21 | 0 | | +| test.rs:90:17:90:21 | ... > ... | test.rs:90:13:92:13 | IfExpr | false | +| test.rs:90:17:90:21 | ... > ... | test.rs:91:17:91:22 | ExprStmt | true | +| test.rs:90:21:90:21 | 0 | test.rs:90:17:90:21 | ... > ... | | +| test.rs:91:17:91:21 | BreakExpr | test.rs:88:9:94:9 | WhileExpr | break | +| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:21 | BreakExpr | | +| test.rs:93:13:93:13 | b | test.rs:93:17:93:21 | false | | +| test.rs:93:13:93:21 | ... = ... | test.rs:88:17:94:9 | BlockExpr | | +| test.rs:93:13:93:22 | ExprStmt | test.rs:93:13:93:13 | b | | +| test.rs:93:17:93:21 | false | test.rs:93:13:93:21 | ... = ... | | +| test.rs:97:5:104:5 | enter test_while_let | test.rs:98:9:98:29 | LetStmt | | +| test.rs:97:5:104:5 | exit test_while_let (normal) | test.rs:97:5:104:5 | exit test_while_let | | +| test.rs:97:25:104:5 | BlockExpr | test.rs:97:5:104:5 | exit test_while_let (normal) | | +| test.rs:98:9:98:29 | LetStmt | test.rs:98:24:98:24 | 1 | | +| test.rs:98:13:98:20 | iter | test.rs:99:15:99:39 | LetExpr | match | +| test.rs:98:24:98:24 | 1 | test.rs:98:27:98:28 | 10 | | +| test.rs:98:24:98:28 | RangeExpr | test.rs:98:13:98:20 | iter | | +| test.rs:98:27:98:28 | 10 | test.rs:98:24:98:28 | RangeExpr | | +| test.rs:99:9:103:9 | WhileExpr | test.rs:97:25:104:5 | BlockExpr | | +| test.rs:99:15:99:39 | LetExpr | test.rs:99:29:99:32 | iter | | +| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:9:103:9 | WhileExpr | no-match | +| test.rs:99:19:99:25 | TupleStructPat | test.rs:99:24:99:24 | x | match | +| test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | +| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | ... .next(...) | | +| test.rs:99:29:99:39 | ... .next(...) | test.rs:99:19:99:25 | TupleStructPat | | +| test.rs:99:41:103:9 | BlockExpr | test.rs:99:15:99:39 | LetExpr | | +| test.rs:100:13:102:13 | IfExpr | test.rs:99:41:103:9 | BlockExpr | | +| test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | | test.rs:100:17:100:22 | ... == ... | test.rs:100:13:102:13 | IfExpr | false | | test.rs:100:17:100:22 | ... == ... | test.rs:101:17:101:22 | ExprStmt | true | -| test.rs:100:22:100:22 | j | test.rs:100:17:100:22 | ... == ... | | -| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:104:9 | ForExpr | break | +| test.rs:100:22:100:22 | 5 | test.rs:100:17:100:22 | ... == ... | | +| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:103:9 | WhileExpr | break | | test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:21 | BreakExpr | | -| test.rs:103:13:103:13 | 1 | test.rs:99:24:104:9 | BlockExpr | | -| test.rs:103:13:103:14 | ExprStmt | test.rs:103:13:103:13 | 1 | | -| test.rs:107:5:111:5 | enter break_with_return | test.rs:109:13:109:27 | ExprStmt | | -| test.rs:107:5:111:5 | exit break_with_return (normal) | test.rs:107:5:111:5 | exit break_with_return | | -| test.rs:109:13:109:27 | ExprStmt | test.rs:109:26:109:26 | 1 | | -| test.rs:109:19:109:26 | ReturnExpr | test.rs:107:5:111:5 | exit break_with_return (normal) | return | -| test.rs:109:26:109:26 | 1 | test.rs:109:19:109:26 | ReturnExpr | | -| test.rs:114:1:117:1 | enter test_nested_function | test.rs:114:25:114:25 | n | | -| test.rs:114:1:117:1 | exit test_nested_function (normal) | test.rs:114:1:117:1 | exit test_nested_function | | -| test.rs:114:25:114:25 | n | test.rs:114:25:114:30 | Param | match | -| test.rs:114:25:114:30 | Param | test.rs:115:5:115:28 | LetStmt | | -| test.rs:114:40:117:1 | BlockExpr | test.rs:114:1:117:1 | exit test_nested_function (normal) | | -| test.rs:115:5:115:28 | LetStmt | test.rs:115:19:115:27 | ClosureExpr | | -| test.rs:115:9:115:15 | add_one | test.rs:116:5:116:11 | add_one | match | -| test.rs:115:19:115:27 | ClosureExpr | test.rs:115:9:115:15 | add_one | | -| test.rs:115:19:115:27 | enter ClosureExpr | test.rs:115:20:115:20 | i | | -| test.rs:115:19:115:27 | exit ClosureExpr (normal) | test.rs:115:19:115:27 | exit ClosureExpr | | -| test.rs:115:20:115:20 | Param | test.rs:115:23:115:23 | i | | -| test.rs:115:20:115:20 | i | test.rs:115:20:115:20 | Param | match | -| test.rs:115:23:115:23 | i | test.rs:115:27:115:27 | 1 | | -| test.rs:115:23:115:27 | ... + ... | test.rs:115:19:115:27 | exit ClosureExpr (normal) | | -| test.rs:115:27:115:27 | 1 | test.rs:115:23:115:27 | ... + ... | | -| test.rs:116:5:116:11 | add_one | test.rs:116:13:116:19 | add_one | | -| test.rs:116:5:116:23 | CallExpr | test.rs:114:40:117:1 | BlockExpr | | -| test.rs:116:13:116:19 | add_one | test.rs:116:21:116:21 | n | | -| test.rs:116:13:116:22 | CallExpr | test.rs:116:5:116:23 | CallExpr | | -| test.rs:116:21:116:21 | n | test.rs:116:13:116:22 | CallExpr | | -| test.rs:121:5:127:5 | enter test_if_else | test.rs:121:21:121:21 | n | | -| test.rs:121:5:127:5 | exit test_if_else (normal) | test.rs:121:5:127:5 | exit test_if_else | | -| test.rs:121:21:121:21 | n | test.rs:121:21:121:26 | Param | match | -| test.rs:121:21:121:26 | Param | test.rs:122:12:122:12 | n | | -| test.rs:121:36:127:5 | BlockExpr | test.rs:121:5:127:5 | exit test_if_else (normal) | | -| test.rs:122:9:126:9 | IfExpr | test.rs:121:36:127:5 | BlockExpr | | -| test.rs:122:12:122:12 | n | test.rs:122:17:122:17 | 0 | | -| test.rs:122:12:122:17 | ... <= ... | test.rs:123:13:123:13 | 0 | true | -| test.rs:122:12:122:17 | ... <= ... | test.rs:125:13:125:13 | n | false | -| test.rs:122:17:122:17 | 0 | test.rs:122:12:122:17 | ... <= ... | | -| test.rs:122:19:124:9 | BlockExpr | test.rs:122:9:126:9 | IfExpr | | -| test.rs:123:13:123:13 | 0 | test.rs:122:19:124:9 | BlockExpr | | -| test.rs:124:16:126:9 | BlockExpr | test.rs:122:9:126:9 | IfExpr | | -| test.rs:125:13:125:13 | n | test.rs:125:17:125:17 | 1 | | -| test.rs:125:13:125:17 | ... - ... | test.rs:124:16:126:9 | BlockExpr | | -| test.rs:125:17:125:17 | 1 | test.rs:125:13:125:17 | ... - ... | | -| test.rs:129:5:135:5 | enter test_if_let_else | test.rs:129:25:129:25 | a | | -| test.rs:129:5:135:5 | exit test_if_let_else (normal) | test.rs:129:5:135:5 | exit test_if_let_else | | -| test.rs:129:25:129:25 | a | test.rs:129:25:129:38 | Param | match | -| test.rs:129:25:129:38 | Param | test.rs:130:12:130:26 | LetExpr | | -| test.rs:129:48:135:5 | BlockExpr | test.rs:129:5:135:5 | exit test_if_let_else (normal) | | -| test.rs:130:9:134:9 | IfExpr | test.rs:129:48:135:5 | BlockExpr | | -| test.rs:130:12:130:26 | LetExpr | test.rs:130:26:130:26 | a | | -| test.rs:130:16:130:22 | TupleStructPat | test.rs:130:21:130:21 | n | match | -| test.rs:130:16:130:22 | TupleStructPat | test.rs:133:13:133:13 | 0 | no-match | -| test.rs:130:21:130:21 | n | test.rs:131:13:131:13 | n | match | -| test.rs:130:26:130:26 | a | test.rs:130:16:130:22 | TupleStructPat | | -| test.rs:130:28:132:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | -| test.rs:131:13:131:13 | n | test.rs:130:28:132:9 | BlockExpr | | +| test.rs:106:5:113:5 | enter test_for | test.rs:106:17:106:17 | j | | +| test.rs:106:5:113:5 | exit test_for (normal) | test.rs:106:5:113:5 | exit test_for | | +| test.rs:106:17:106:17 | j | test.rs:106:17:106:22 | Param | match | +| test.rs:106:17:106:22 | Param | test.rs:107:18:107:18 | 0 | | +| test.rs:106:25:113:5 | BlockExpr | test.rs:106:5:113:5 | exit test_for (normal) | | +| test.rs:107:9:112:9 | ForExpr | test.rs:106:25:113:5 | BlockExpr | | +| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | ForExpr | no-match | +| test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | ExprStmt | match | +| test.rs:107:18:107:18 | 0 | test.rs:107:21:107:22 | 10 | | +| test.rs:107:18:107:22 | RangeExpr | test.rs:107:13:107:13 | i | | +| test.rs:107:21:107:22 | 10 | test.rs:107:18:107:22 | RangeExpr | | +| test.rs:107:24:112:9 | BlockExpr | test.rs:107:13:107:13 | i | | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:17:108:17 | i | | +| test.rs:108:13:110:13 | IfExpr | test.rs:111:13:111:14 | ExprStmt | | +| test.rs:108:17:108:17 | i | test.rs:108:22:108:22 | j | | +| test.rs:108:17:108:22 | ... == ... | test.rs:108:13:110:13 | IfExpr | false | +| test.rs:108:17:108:22 | ... == ... | test.rs:109:17:109:22 | ExprStmt | true | +| test.rs:108:22:108:22 | j | test.rs:108:17:108:22 | ... == ... | | +| test.rs:109:17:109:21 | BreakExpr | test.rs:107:9:112:9 | ForExpr | break | +| test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:21 | BreakExpr | | +| test.rs:111:13:111:13 | 1 | test.rs:107:24:112:9 | BlockExpr | | +| test.rs:111:13:111:14 | ExprStmt | test.rs:111:13:111:13 | 1 | | +| test.rs:115:5:119:5 | enter break_with_return | test.rs:117:13:117:27 | ExprStmt | | +| test.rs:115:5:119:5 | exit break_with_return (normal) | test.rs:115:5:119:5 | exit break_with_return | | +| test.rs:117:13:117:27 | ExprStmt | test.rs:117:26:117:26 | 1 | | +| test.rs:117:19:117:26 | ReturnExpr | test.rs:115:5:119:5 | exit break_with_return (normal) | return | +| test.rs:117:26:117:26 | 1 | test.rs:117:19:117:26 | ReturnExpr | | +| test.rs:122:1:125:1 | enter test_nested_function | test.rs:122:25:122:25 | n | | +| test.rs:122:1:125:1 | exit test_nested_function (normal) | test.rs:122:1:125:1 | exit test_nested_function | | +| test.rs:122:25:122:25 | n | test.rs:122:25:122:30 | Param | match | +| test.rs:122:25:122:30 | Param | test.rs:123:5:123:28 | LetStmt | | +| test.rs:122:40:125:1 | BlockExpr | test.rs:122:1:125:1 | exit test_nested_function (normal) | | +| test.rs:123:5:123:28 | LetStmt | test.rs:123:19:123:27 | ClosureExpr | | +| test.rs:123:9:123:15 | add_one | test.rs:124:5:124:11 | add_one | match | +| test.rs:123:19:123:27 | ClosureExpr | test.rs:123:9:123:15 | add_one | | +| test.rs:123:19:123:27 | enter ClosureExpr | test.rs:123:20:123:20 | i | | +| test.rs:123:19:123:27 | exit ClosureExpr (normal) | test.rs:123:19:123:27 | exit ClosureExpr | | +| test.rs:123:20:123:20 | Param | test.rs:123:23:123:23 | i | | +| test.rs:123:20:123:20 | i | test.rs:123:20:123:20 | Param | match | +| test.rs:123:23:123:23 | i | test.rs:123:27:123:27 | 1 | | +| test.rs:123:23:123:27 | ... + ... | test.rs:123:19:123:27 | exit ClosureExpr (normal) | | +| test.rs:123:27:123:27 | 1 | test.rs:123:23:123:27 | ... + ... | | +| test.rs:124:5:124:11 | add_one | test.rs:124:13:124:19 | add_one | | +| test.rs:124:5:124:23 | CallExpr | test.rs:122:40:125:1 | BlockExpr | | +| test.rs:124:13:124:19 | add_one | test.rs:124:21:124:21 | n | | +| test.rs:124:13:124:22 | CallExpr | test.rs:124:5:124:23 | CallExpr | | +| test.rs:124:21:124:21 | n | test.rs:124:13:124:22 | CallExpr | | +| test.rs:129:5:135:5 | enter test_if_else | test.rs:129:21:129:21 | n | | +| test.rs:129:5:135:5 | exit test_if_else (normal) | test.rs:129:5:135:5 | exit test_if_else | | +| test.rs:129:21:129:21 | n | test.rs:129:21:129:26 | Param | match | +| test.rs:129:21:129:26 | Param | test.rs:130:12:130:12 | n | | +| test.rs:129:36:135:5 | BlockExpr | test.rs:129:5:135:5 | exit test_if_else (normal) | | +| test.rs:130:9:134:9 | IfExpr | test.rs:129:36:135:5 | BlockExpr | | +| test.rs:130:12:130:12 | n | test.rs:130:17:130:17 | 0 | | +| test.rs:130:12:130:17 | ... <= ... | test.rs:131:13:131:13 | 0 | true | +| test.rs:130:12:130:17 | ... <= ... | test.rs:133:13:133:13 | n | false | +| test.rs:130:17:130:17 | 0 | test.rs:130:12:130:17 | ... <= ... | | +| test.rs:130:19:132:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | +| test.rs:131:13:131:13 | 0 | test.rs:130:19:132:9 | BlockExpr | | | test.rs:132:16:134:9 | BlockExpr | test.rs:130:9:134:9 | IfExpr | | -| test.rs:133:13:133:13 | 0 | test.rs:132:16:134:9 | BlockExpr | | -| test.rs:137:5:142:5 | enter test_if_let | test.rs:137:20:137:20 | a | | -| test.rs:137:5:142:5 | exit test_if_let (normal) | test.rs:137:5:142:5 | exit test_if_let | | -| test.rs:137:20:137:20 | a | test.rs:137:20:137:33 | Param | match | -| test.rs:137:20:137:33 | Param | test.rs:138:9:140:9 | ExprStmt | | -| test.rs:137:43:142:5 | BlockExpr | test.rs:137:5:142:5 | exit test_if_let (normal) | | -| test.rs:138:9:140:9 | ExprStmt | test.rs:138:12:138:26 | LetExpr | | -| test.rs:138:9:140:9 | IfExpr | test.rs:141:9:141:9 | 0 | | +| test.rs:133:13:133:13 | n | test.rs:133:17:133:17 | 1 | | +| test.rs:133:13:133:17 | ... - ... | test.rs:132:16:134:9 | BlockExpr | | +| test.rs:133:17:133:17 | 1 | test.rs:133:13:133:17 | ... - ... | | +| test.rs:137:5:143:5 | enter test_if_let_else | test.rs:137:25:137:25 | a | | +| test.rs:137:5:143:5 | exit test_if_let_else (normal) | test.rs:137:5:143:5 | exit test_if_let_else | | +| test.rs:137:25:137:25 | a | test.rs:137:25:137:38 | Param | match | +| test.rs:137:25:137:38 | Param | test.rs:138:12:138:26 | LetExpr | | +| test.rs:137:48:143:5 | BlockExpr | test.rs:137:5:143:5 | exit test_if_let_else (normal) | | +| test.rs:138:9:142:9 | IfExpr | test.rs:137:48:143:5 | BlockExpr | | | test.rs:138:12:138:26 | LetExpr | test.rs:138:26:138:26 | a | | -| test.rs:138:16:138:22 | TupleStructPat | test.rs:138:9:140:9 | IfExpr | no-match | | test.rs:138:16:138:22 | TupleStructPat | test.rs:138:21:138:21 | n | match | +| test.rs:138:16:138:22 | TupleStructPat | test.rs:141:13:141:13 | 0 | no-match | | test.rs:138:21:138:21 | n | test.rs:139:13:139:13 | n | match | | test.rs:138:26:138:26 | a | test.rs:138:16:138:22 | TupleStructPat | | -| test.rs:138:28:140:9 | BlockExpr | test.rs:138:9:140:9 | IfExpr | | +| test.rs:138:28:140:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | | test.rs:139:13:139:13 | n | test.rs:138:28:140:9 | BlockExpr | | -| test.rs:141:9:141:9 | 0 | test.rs:137:43:142:5 | BlockExpr | | -| test.rs:144:5:150:5 | enter test_and_if_let | test.rs:144:24:144:24 | a | | -| test.rs:144:5:150:5 | exit test_and_if_let (normal) | test.rs:144:5:150:5 | exit test_and_if_let | | -| test.rs:144:24:144:24 | a | test.rs:144:24:144:30 | Param | match | -| test.rs:144:24:144:30 | Param | test.rs:144:33:144:33 | b | | -| test.rs:144:33:144:33 | b | test.rs:144:33:144:47 | Param | match | -| test.rs:144:33:144:47 | Param | test.rs:144:50:144:50 | c | | -| test.rs:144:50:144:50 | c | test.rs:144:50:144:56 | Param | match | -| test.rs:144:50:144:56 | Param | test.rs:145:12:145:12 | a | | -| test.rs:144:67:150:5 | BlockExpr | test.rs:144:5:150:5 | exit test_and_if_let (normal) | | -| test.rs:145:9:149:9 | IfExpr | test.rs:144:67:150:5 | BlockExpr | | -| test.rs:145:12:145:12 | a | test.rs:145:12:145:31 | [boolean(false)] ... && ... | false | -| test.rs:145:12:145:12 | a | test.rs:145:17:145:31 | LetExpr | true | -| test.rs:145:12:145:31 | [boolean(false)] ... && ... | test.rs:148:13:148:17 | false | false | -| test.rs:145:12:145:31 | [boolean(true)] ... && ... | test.rs:146:13:146:13 | d | true | -| test.rs:145:17:145:31 | LetExpr | test.rs:145:31:145:31 | b | | -| test.rs:145:21:145:27 | TupleStructPat | test.rs:145:12:145:31 | [boolean(false)] ... && ... | no-match | -| test.rs:145:21:145:27 | TupleStructPat | test.rs:145:26:145:26 | d | match | -| test.rs:145:26:145:26 | d | test.rs:145:12:145:31 | [boolean(true)] ... && ... | match | -| test.rs:145:31:145:31 | b | test.rs:145:21:145:27 | TupleStructPat | | -| test.rs:145:33:147:9 | BlockExpr | test.rs:145:9:149:9 | IfExpr | | -| test.rs:146:13:146:13 | d | test.rs:145:33:147:9 | BlockExpr | | -| test.rs:147:16:149:9 | BlockExpr | test.rs:145:9:149:9 | IfExpr | | -| test.rs:148:13:148:17 | false | test.rs:147:16:149:9 | BlockExpr | | -| test.rs:152:5:160:5 | enter test_and_if_let2 | test.rs:152:25:152:25 | a | | -| test.rs:152:5:160:5 | exit test_and_if_let2 (normal) | test.rs:152:5:160:5 | exit test_and_if_let2 | | -| test.rs:152:25:152:25 | a | test.rs:152:25:152:31 | Param | match | -| test.rs:152:25:152:31 | Param | test.rs:152:34:152:34 | b | | -| test.rs:152:34:152:34 | b | test.rs:152:34:152:39 | Param | match | -| test.rs:152:34:152:39 | Param | test.rs:152:42:152:42 | c | | -| test.rs:152:42:152:42 | c | test.rs:152:42:152:48 | Param | match | -| test.rs:152:42:152:48 | Param | test.rs:153:12:153:12 | a | | -| test.rs:152:59:160:5 | BlockExpr | test.rs:152:5:160:5 | exit test_and_if_let2 (normal) | | -| test.rs:153:9:159:9 | IfExpr | test.rs:152:59:160:5 | BlockExpr | | -| test.rs:153:12:153:12 | a | test.rs:153:12:153:25 | [boolean(false)] ... && ... | false | -| test.rs:153:12:153:12 | a | test.rs:153:17:153:25 | LetExpr | true | -| test.rs:153:12:153:25 | [boolean(false)] ... && ... | test.rs:153:12:154:16 | [boolean(false)] ... && ... | false | -| test.rs:153:12:153:25 | [boolean(true)] ... && ... | test.rs:154:16:154:16 | c | true | -| test.rs:153:12:154:16 | [boolean(false)] ... && ... | test.rs:158:13:158:17 | false | false | -| test.rs:153:12:154:16 | [boolean(true)] ... && ... | test.rs:156:13:156:13 | d | true | -| test.rs:153:17:153:25 | LetExpr | test.rs:153:25:153:25 | b | | -| test.rs:153:21:153:21 | d | test.rs:153:12:153:25 | [boolean(true)] ... && ... | match | -| test.rs:153:25:153:25 | b | test.rs:153:21:153:21 | d | | -| test.rs:154:16:154:16 | c | test.rs:153:12:154:16 | [boolean(false)] ... && ... | false | -| test.rs:154:16:154:16 | c | test.rs:153:12:154:16 | [boolean(true)] ... && ... | true | -| test.rs:155:9:157:9 | BlockExpr | test.rs:153:9:159:9 | IfExpr | | -| test.rs:156:13:156:13 | d | test.rs:156:17:156:17 | 0 | | -| test.rs:156:13:156:17 | ... > ... | test.rs:155:9:157:9 | BlockExpr | | -| test.rs:156:17:156:17 | 0 | test.rs:156:13:156:17 | ... > ... | | -| test.rs:157:16:159:9 | BlockExpr | test.rs:153:9:159:9 | IfExpr | | -| test.rs:158:13:158:17 | false | test.rs:157:16:159:9 | BlockExpr | | -| test.rs:162:5:168:5 | enter test_nested_if | test.rs:162:23:162:23 | a | | -| test.rs:162:5:168:5 | exit test_nested_if (normal) | test.rs:162:5:168:5 | exit test_nested_if | | -| test.rs:162:23:162:23 | a | test.rs:162:23:162:28 | Param | match | -| test.rs:162:23:162:28 | Param | test.rs:163:16:163:16 | a | | -| test.rs:162:38:168:5 | BlockExpr | test.rs:162:5:168:5 | exit test_nested_if (normal) | | -| test.rs:163:9:167:9 | IfExpr | test.rs:162:38:168:5 | BlockExpr | | -| test.rs:163:13:163:48 | [boolean(false)] IfExpr | test.rs:166:13:166:13 | 0 | false | -| test.rs:163:13:163:48 | [boolean(true)] IfExpr | test.rs:164:13:164:13 | 1 | true | -| test.rs:163:16:163:16 | a | test.rs:163:20:163:20 | 0 | | -| test.rs:163:16:163:20 | ... < ... | test.rs:163:24:163:24 | a | true | -| test.rs:163:16:163:20 | ... < ... | test.rs:163:41:163:41 | a | false | -| test.rs:163:20:163:20 | 0 | test.rs:163:16:163:20 | ... < ... | | -| test.rs:163:22:163:32 | [boolean(false)] BlockExpr | test.rs:163:13:163:48 | [boolean(false)] IfExpr | false | -| test.rs:163:22:163:32 | [boolean(true)] BlockExpr | test.rs:163:13:163:48 | [boolean(true)] IfExpr | true | -| test.rs:163:24:163:24 | a | test.rs:163:29:163:30 | 10 | | -| test.rs:163:24:163:30 | ... < ... | test.rs:163:22:163:32 | [boolean(false)] BlockExpr | false | -| test.rs:163:24:163:30 | ... < ... | test.rs:163:22:163:32 | [boolean(true)] BlockExpr | true | -| test.rs:163:28:163:30 | - ... | test.rs:163:24:163:30 | ... < ... | | -| test.rs:163:29:163:30 | 10 | test.rs:163:28:163:30 | - ... | | -| test.rs:163:39:163:48 | [boolean(false)] BlockExpr | test.rs:163:13:163:48 | [boolean(false)] IfExpr | false | -| test.rs:163:39:163:48 | [boolean(true)] BlockExpr | test.rs:163:13:163:48 | [boolean(true)] IfExpr | true | -| test.rs:163:41:163:41 | a | test.rs:163:45:163:46 | 10 | | -| test.rs:163:41:163:46 | ... > ... | test.rs:163:39:163:48 | [boolean(false)] BlockExpr | false | -| test.rs:163:41:163:46 | ... > ... | test.rs:163:39:163:48 | [boolean(true)] BlockExpr | true | -| test.rs:163:45:163:46 | 10 | test.rs:163:41:163:46 | ... > ... | | -| test.rs:163:51:165:9 | BlockExpr | test.rs:163:9:167:9 | IfExpr | | -| test.rs:164:13:164:13 | 1 | test.rs:163:51:165:9 | BlockExpr | | -| test.rs:165:16:167:9 | BlockExpr | test.rs:163:9:167:9 | IfExpr | | -| test.rs:166:13:166:13 | 0 | test.rs:165:16:167:9 | BlockExpr | | -| test.rs:170:5:179:5 | enter test_nested_if_match | test.rs:170:29:170:29 | a | | -| test.rs:170:5:179:5 | exit test_nested_if_match (normal) | test.rs:170:5:179:5 | exit test_nested_if_match | | -| test.rs:170:29:170:29 | a | test.rs:170:29:170:34 | Param | match | -| test.rs:170:29:170:34 | Param | test.rs:171:19:171:19 | a | | -| test.rs:170:44:179:5 | BlockExpr | test.rs:170:5:179:5 | exit test_nested_if_match (normal) | | -| test.rs:171:9:178:9 | IfExpr | test.rs:170:44:179:5 | BlockExpr | | -| test.rs:171:13:174:9 | [boolean(false)] MatchExpr | test.rs:177:13:177:13 | 0 | false | -| test.rs:171:13:174:9 | [boolean(true)] MatchExpr | test.rs:175:13:175:13 | 1 | true | -| test.rs:171:19:171:19 | a | test.rs:172:13:172:13 | 0 | | -| test.rs:172:13:172:13 | 0 | test.rs:172:13:172:13 | LiteralPat | | -| test.rs:172:13:172:13 | LiteralPat | test.rs:172:18:172:21 | true | match | -| test.rs:172:13:172:13 | LiteralPat | test.rs:173:13:173:13 | WildcardPat | no-match | -| test.rs:172:18:172:21 | true | test.rs:171:13:174:9 | [boolean(true)] MatchExpr | true | -| test.rs:173:13:173:13 | WildcardPat | test.rs:173:18:173:22 | false | match | -| test.rs:173:18:173:22 | false | test.rs:171:13:174:9 | [boolean(false)] MatchExpr | false | -| test.rs:174:12:176:9 | BlockExpr | test.rs:171:9:178:9 | IfExpr | | -| test.rs:175:13:175:13 | 1 | test.rs:174:12:176:9 | BlockExpr | | -| test.rs:176:16:178:9 | BlockExpr | test.rs:171:9:178:9 | IfExpr | | -| test.rs:177:13:177:13 | 0 | test.rs:176:16:178:9 | BlockExpr | | -| test.rs:181:5:190:5 | enter test_nested_if_block | test.rs:181:29:181:29 | a | | -| test.rs:181:5:190:5 | exit test_nested_if_block (normal) | test.rs:181:5:190:5 | exit test_nested_if_block | | -| test.rs:181:29:181:29 | a | test.rs:181:29:181:34 | Param | match | -| test.rs:181:29:181:34 | Param | test.rs:183:13:183:15 | ExprStmt | | -| test.rs:181:44:190:5 | BlockExpr | test.rs:181:5:190:5 | exit test_nested_if_block (normal) | | -| test.rs:182:9:189:9 | IfExpr | test.rs:181:44:190:5 | BlockExpr | | -| test.rs:182:12:185:9 | [boolean(false)] BlockExpr | test.rs:188:13:188:13 | 0 | false | -| test.rs:182:12:185:9 | [boolean(true)] BlockExpr | test.rs:186:13:186:13 | 1 | true | -| test.rs:183:13:183:14 | TupleExpr | test.rs:184:13:184:13 | a | | -| test.rs:183:13:183:15 | ExprStmt | test.rs:183:13:183:14 | TupleExpr | | -| test.rs:184:13:184:13 | a | test.rs:184:17:184:17 | 0 | | -| test.rs:184:13:184:17 | ... > ... | test.rs:182:12:185:9 | [boolean(false)] BlockExpr | false | -| test.rs:184:13:184:17 | ... > ... | test.rs:182:12:185:9 | [boolean(true)] BlockExpr | true | -| test.rs:184:17:184:17 | 0 | test.rs:184:13:184:17 | ... > ... | | -| test.rs:185:11:187:9 | BlockExpr | test.rs:182:9:189:9 | IfExpr | | -| test.rs:186:13:186:13 | 1 | test.rs:185:11:187:9 | BlockExpr | | -| test.rs:187:16:189:9 | BlockExpr | test.rs:182:9:189:9 | IfExpr | | -| test.rs:188:13:188:13 | 0 | test.rs:187:16:189:9 | BlockExpr | | -| test.rs:192:5:199:5 | enter test_if_assignment | test.rs:192:27:192:27 | a | | -| test.rs:192:5:199:5 | exit test_if_assignment (normal) | test.rs:192:5:199:5 | exit test_if_assignment | | -| test.rs:192:27:192:27 | a | test.rs:192:27:192:32 | Param | match | -| test.rs:192:27:192:32 | Param | test.rs:193:9:193:26 | LetStmt | | -| test.rs:192:42:199:5 | BlockExpr | test.rs:192:5:199:5 | exit test_if_assignment (normal) | | -| test.rs:193:9:193:26 | LetStmt | test.rs:193:21:193:25 | false | | -| test.rs:193:13:193:17 | x | test.rs:194:12:194:12 | x | match | -| test.rs:193:21:193:25 | false | test.rs:193:13:193:17 | x | | -| test.rs:194:9:198:9 | IfExpr | test.rs:192:42:199:5 | BlockExpr | | -| test.rs:194:12:194:12 | x | test.rs:194:16:194:19 | true | | -| test.rs:194:12:194:19 | ... = ... | test.rs:195:13:195:13 | 1 | true | -| test.rs:194:12:194:19 | ... = ... | test.rs:197:13:197:13 | 0 | false | -| test.rs:194:16:194:19 | true | test.rs:194:12:194:19 | ... = ... | | -| test.rs:194:21:196:9 | BlockExpr | test.rs:194:9:198:9 | IfExpr | | -| test.rs:195:13:195:13 | 1 | test.rs:194:21:196:9 | BlockExpr | | -| test.rs:196:16:198:9 | BlockExpr | test.rs:194:9:198:9 | IfExpr | | -| test.rs:197:13:197:13 | 0 | test.rs:196:16:198:9 | BlockExpr | | -| test.rs:201:5:212:5 | enter test_if_loop1 | test.rs:201:22:201:22 | a | | -| test.rs:201:5:212:5 | exit test_if_loop1 (normal) | test.rs:201:5:212:5 | exit test_if_loop1 | | -| test.rs:201:22:201:22 | a | test.rs:201:22:201:27 | Param | match | -| test.rs:201:22:201:27 | Param | test.rs:203:13:205:14 | ExprStmt | | -| test.rs:201:37:212:5 | BlockExpr | test.rs:201:5:212:5 | exit test_if_loop1 (normal) | | -| test.rs:202:9:211:9 | IfExpr | test.rs:201:37:212:5 | BlockExpr | | -| test.rs:202:13:207:9 | [boolean(false)] LoopExpr | test.rs:210:13:210:13 | 0 | false | -| test.rs:202:13:207:9 | [boolean(true)] LoopExpr | test.rs:208:13:208:13 | 1 | true | -| test.rs:202:18:207:9 | BlockExpr | test.rs:203:13:205:14 | ExprStmt | | -| test.rs:203:13:205:13 | IfExpr | test.rs:206:13:206:19 | ExprStmt | | -| test.rs:203:13:205:14 | ExprStmt | test.rs:203:16:203:16 | a | | -| test.rs:203:16:203:16 | a | test.rs:203:20:203:20 | 0 | | -| test.rs:203:16:203:20 | ... > ... | test.rs:203:13:205:13 | IfExpr | false | -| test.rs:203:16:203:20 | ... > ... | test.rs:204:17:204:29 | ExprStmt | true | -| test.rs:203:20:203:20 | 0 | test.rs:203:16:203:20 | ... > ... | | -| test.rs:204:17:204:28 | [boolean(false)] BreakExpr | test.rs:202:13:207:9 | [boolean(false)] LoopExpr | break | -| test.rs:204:17:204:28 | [boolean(true)] BreakExpr | test.rs:202:13:207:9 | [boolean(true)] LoopExpr | break | -| test.rs:204:17:204:29 | ExprStmt | test.rs:204:23:204:23 | a | | -| test.rs:204:23:204:23 | a | test.rs:204:27:204:28 | 10 | | -| test.rs:204:23:204:28 | ... > ... | test.rs:204:17:204:28 | [boolean(false)] BreakExpr | false | -| test.rs:204:23:204:28 | ... > ... | test.rs:204:17:204:28 | [boolean(true)] BreakExpr | true | -| test.rs:204:27:204:28 | 10 | test.rs:204:23:204:28 | ... > ... | | -| test.rs:206:13:206:13 | a | test.rs:206:17:206:18 | 10 | | -| test.rs:206:13:206:18 | ... < ... | test.rs:202:18:207:9 | BlockExpr | | -| test.rs:206:13:206:19 | ExprStmt | test.rs:206:13:206:13 | a | | -| test.rs:206:17:206:18 | 10 | test.rs:206:13:206:18 | ... < ... | | -| test.rs:207:12:209:9 | BlockExpr | test.rs:202:9:211:9 | IfExpr | | -| test.rs:208:13:208:13 | 1 | test.rs:207:12:209:9 | BlockExpr | | -| test.rs:209:16:211:9 | BlockExpr | test.rs:202:9:211:9 | IfExpr | | -| test.rs:210:13:210:13 | 0 | test.rs:209:16:211:9 | BlockExpr | | -| test.rs:214:5:225:5 | enter test_if_loop2 | test.rs:214:22:214:22 | a | | -| test.rs:214:5:225:5 | exit test_if_loop2 (normal) | test.rs:214:5:225:5 | exit test_if_loop2 | | -| test.rs:214:22:214:22 | a | test.rs:214:22:214:27 | Param | match | -| test.rs:214:22:214:27 | Param | test.rs:216:13:218:14 | ExprStmt | | -| test.rs:214:37:225:5 | BlockExpr | test.rs:214:5:225:5 | exit test_if_loop2 (normal) | | -| test.rs:215:9:224:9 | IfExpr | test.rs:214:37:225:5 | BlockExpr | | -| test.rs:215:13:220:9 | [boolean(false)] LoopExpr | test.rs:223:13:223:13 | 0 | false | -| test.rs:215:13:220:9 | [boolean(true)] LoopExpr | test.rs:221:13:221:13 | 1 | true | -| test.rs:215:26:220:9 | BlockExpr | test.rs:216:13:218:14 | ExprStmt | | -| test.rs:216:13:218:13 | IfExpr | test.rs:219:13:219:19 | ExprStmt | | -| test.rs:216:13:218:14 | ExprStmt | test.rs:216:16:216:16 | a | | -| test.rs:216:16:216:16 | a | test.rs:216:20:216:20 | 0 | | -| test.rs:216:16:216:20 | ... > ... | test.rs:216:13:218:13 | IfExpr | false | -| test.rs:216:16:216:20 | ... > ... | test.rs:217:17:217:36 | ExprStmt | true | -| test.rs:216:20:216:20 | 0 | test.rs:216:16:216:20 | ... > ... | | -| test.rs:217:17:217:35 | [boolean(false)] BreakExpr | test.rs:215:13:220:9 | [boolean(false)] LoopExpr | break | -| test.rs:217:17:217:35 | [boolean(true)] BreakExpr | test.rs:215:13:220:9 | [boolean(true)] LoopExpr | break | -| test.rs:217:17:217:36 | ExprStmt | test.rs:217:30:217:30 | a | | -| test.rs:217:30:217:30 | a | test.rs:217:34:217:35 | 10 | | -| test.rs:217:30:217:35 | ... > ... | test.rs:217:17:217:35 | [boolean(false)] BreakExpr | false | -| test.rs:217:30:217:35 | ... > ... | test.rs:217:17:217:35 | [boolean(true)] BreakExpr | true | -| test.rs:217:34:217:35 | 10 | test.rs:217:30:217:35 | ... > ... | | -| test.rs:219:13:219:13 | a | test.rs:219:17:219:18 | 10 | | -| test.rs:219:13:219:18 | ... < ... | test.rs:215:26:220:9 | BlockExpr | | -| test.rs:219:13:219:19 | ExprStmt | test.rs:219:13:219:13 | a | | -| test.rs:219:17:219:18 | 10 | test.rs:219:13:219:18 | ... < ... | | -| test.rs:220:12:222:9 | BlockExpr | test.rs:215:9:224:9 | IfExpr | | -| test.rs:221:13:221:13 | 1 | test.rs:220:12:222:9 | BlockExpr | | -| test.rs:222:16:224:9 | BlockExpr | test.rs:215:9:224:9 | IfExpr | | -| test.rs:223:13:223:13 | 0 | test.rs:222:16:224:9 | BlockExpr | | -| test.rs:227:5:235:5 | enter test_labelled_block | test.rs:227:28:227:28 | a | | -| test.rs:227:5:235:5 | exit test_labelled_block (normal) | test.rs:227:5:235:5 | exit test_labelled_block | | -| test.rs:227:28:227:28 | a | test.rs:227:28:227:33 | Param | match | -| test.rs:227:28:227:33 | Param | test.rs:229:13:229:31 | ExprStmt | | -| test.rs:227:43:235:5 | BlockExpr | test.rs:227:5:235:5 | exit test_labelled_block (normal) | | -| test.rs:228:9:234:9 | IfExpr | test.rs:227:43:235:5 | BlockExpr | | -| test.rs:228:13:230:9 | [boolean(false)] BlockExpr | test.rs:233:13:233:13 | 0 | false | -| test.rs:228:13:230:9 | [boolean(true)] BlockExpr | test.rs:231:13:231:13 | 1 | true | -| test.rs:229:13:229:30 | [boolean(false)] BreakExpr | test.rs:228:13:230:9 | [boolean(false)] BlockExpr | break | -| test.rs:229:13:229:30 | [boolean(true)] BreakExpr | test.rs:228:13:230:9 | [boolean(true)] BlockExpr | break | -| test.rs:229:13:229:31 | ExprStmt | test.rs:229:26:229:26 | a | | -| test.rs:229:26:229:26 | a | test.rs:229:30:229:30 | 0 | | -| test.rs:229:26:229:30 | ... > ... | test.rs:229:13:229:30 | [boolean(false)] BreakExpr | false | -| test.rs:229:26:229:30 | ... > ... | test.rs:229:13:229:30 | [boolean(true)] BreakExpr | true | -| test.rs:229:30:229:30 | 0 | test.rs:229:26:229:30 | ... > ... | | -| test.rs:230:12:232:9 | BlockExpr | test.rs:228:9:234:9 | IfExpr | | -| test.rs:231:13:231:13 | 1 | test.rs:230:12:232:9 | BlockExpr | | -| test.rs:232:16:234:9 | BlockExpr | test.rs:228:9:234:9 | IfExpr | | -| test.rs:233:13:233:13 | 0 | test.rs:232:16:234:9 | BlockExpr | | -| test.rs:240:5:243:5 | enter test_and_operator | test.rs:240:26:240:26 | a | | -| test.rs:240:5:243:5 | exit test_and_operator (normal) | test.rs:240:5:243:5 | exit test_and_operator | | -| test.rs:240:26:240:26 | a | test.rs:240:26:240:32 | Param | match | -| test.rs:240:26:240:32 | Param | test.rs:240:35:240:35 | b | | -| test.rs:240:35:240:35 | b | test.rs:240:35:240:41 | Param | match | -| test.rs:240:35:240:41 | Param | test.rs:240:44:240:44 | c | | -| test.rs:240:44:240:44 | c | test.rs:240:44:240:50 | Param | match | -| test.rs:240:44:240:50 | Param | test.rs:241:9:241:28 | LetStmt | | -| test.rs:240:61:243:5 | BlockExpr | test.rs:240:5:243:5 | exit test_and_operator (normal) | | -| test.rs:241:9:241:28 | LetStmt | test.rs:241:17:241:17 | a | | -| test.rs:241:13:241:13 | d | test.rs:242:9:242:9 | d | match | -| test.rs:241:17:241:17 | a | test.rs:241:17:241:22 | [boolean(false)] ... && ... | false | -| test.rs:241:17:241:17 | a | test.rs:241:22:241:22 | b | true | -| test.rs:241:17:241:22 | [boolean(false)] ... && ... | test.rs:241:17:241:27 | ... && ... | false | -| test.rs:241:17:241:22 | [boolean(true)] ... && ... | test.rs:241:27:241:27 | c | true | -| test.rs:241:17:241:27 | ... && ... | test.rs:241:13:241:13 | d | | -| test.rs:241:22:241:22 | b | test.rs:241:17:241:22 | [boolean(false)] ... && ... | false | -| test.rs:241:22:241:22 | b | test.rs:241:17:241:22 | [boolean(true)] ... && ... | true | -| test.rs:241:27:241:27 | c | test.rs:241:17:241:27 | ... && ... | | -| test.rs:242:9:242:9 | d | test.rs:240:61:243:5 | BlockExpr | | -| test.rs:245:5:248:5 | enter test_or_operator | test.rs:245:25:245:25 | a | | -| test.rs:245:5:248:5 | exit test_or_operator (normal) | test.rs:245:5:248:5 | exit test_or_operator | | -| test.rs:245:25:245:25 | a | test.rs:245:25:245:31 | Param | match | -| test.rs:245:25:245:31 | Param | test.rs:245:34:245:34 | b | | -| test.rs:245:34:245:34 | b | test.rs:245:34:245:40 | Param | match | -| test.rs:245:34:245:40 | Param | test.rs:245:43:245:43 | c | | -| test.rs:245:43:245:43 | c | test.rs:245:43:245:49 | Param | match | -| test.rs:245:43:245:49 | Param | test.rs:246:9:246:28 | LetStmt | | -| test.rs:245:60:248:5 | BlockExpr | test.rs:245:5:248:5 | exit test_or_operator (normal) | | -| test.rs:246:9:246:28 | LetStmt | test.rs:246:17:246:17 | a | | -| test.rs:246:13:246:13 | d | test.rs:247:9:247:9 | d | match | -| test.rs:246:17:246:17 | a | test.rs:246:17:246:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:246:17:246:17 | a | test.rs:246:22:246:22 | b | false | -| test.rs:246:17:246:22 | [boolean(false)] ... \|\| ... | test.rs:246:27:246:27 | c | false | -| test.rs:246:17:246:22 | [boolean(true)] ... \|\| ... | test.rs:246:17:246:27 | ... \|\| ... | true | -| test.rs:246:17:246:27 | ... \|\| ... | test.rs:246:13:246:13 | d | | -| test.rs:246:22:246:22 | b | test.rs:246:17:246:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:246:22:246:22 | b | test.rs:246:17:246:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:246:27:246:27 | c | test.rs:246:17:246:27 | ... \|\| ... | | -| test.rs:247:9:247:9 | d | test.rs:245:60:248:5 | BlockExpr | | -| test.rs:250:5:253:5 | enter test_or_operator_2 | test.rs:250:27:250:27 | a | | -| test.rs:250:5:253:5 | exit test_or_operator_2 (normal) | test.rs:250:5:253:5 | exit test_or_operator_2 | | -| test.rs:250:27:250:27 | a | test.rs:250:27:250:33 | Param | match | -| test.rs:250:27:250:33 | Param | test.rs:250:36:250:36 | b | | -| test.rs:250:36:250:36 | b | test.rs:250:36:250:41 | Param | match | -| test.rs:250:36:250:41 | Param | test.rs:250:44:250:44 | c | | -| test.rs:250:44:250:44 | c | test.rs:250:44:250:50 | Param | match | -| test.rs:250:44:250:50 | Param | test.rs:251:9:251:36 | LetStmt | | -| test.rs:250:61:253:5 | BlockExpr | test.rs:250:5:253:5 | exit test_or_operator_2 (normal) | | -| test.rs:251:9:251:36 | LetStmt | test.rs:251:17:251:17 | a | | -| test.rs:251:13:251:13 | d | test.rs:252:9:252:9 | d | match | -| test.rs:251:17:251:17 | a | test.rs:251:17:251:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:251:17:251:17 | a | test.rs:251:23:251:23 | b | false | -| test.rs:251:17:251:30 | [boolean(false)] ... \|\| ... | test.rs:251:35:251:35 | c | false | -| test.rs:251:17:251:30 | [boolean(true)] ... \|\| ... | test.rs:251:17:251:35 | ... \|\| ... | true | -| test.rs:251:17:251:35 | ... \|\| ... | test.rs:251:13:251:13 | d | | -| test.rs:251:23:251:23 | b | test.rs:251:28:251:29 | 28 | | -| test.rs:251:23:251:29 | ... == ... | test.rs:251:17:251:30 | [boolean(false)] ... \|\| ... | false | -| test.rs:251:23:251:29 | ... == ... | test.rs:251:17:251:30 | [boolean(true)] ... \|\| ... | true | -| test.rs:251:28:251:29 | 28 | test.rs:251:23:251:29 | ... == ... | | -| test.rs:251:35:251:35 | c | test.rs:251:17:251:35 | ... \|\| ... | | -| test.rs:252:9:252:9 | d | test.rs:250:61:253:5 | BlockExpr | | -| test.rs:255:5:258:5 | enter test_not_operator | test.rs:255:26:255:26 | a | | -| test.rs:255:5:258:5 | exit test_not_operator (normal) | test.rs:255:5:258:5 | exit test_not_operator | | -| test.rs:255:26:255:26 | a | test.rs:255:26:255:32 | Param | match | -| test.rs:255:26:255:32 | Param | test.rs:256:9:256:19 | LetStmt | | -| test.rs:255:43:258:5 | BlockExpr | test.rs:255:5:258:5 | exit test_not_operator (normal) | | -| test.rs:256:9:256:19 | LetStmt | test.rs:256:18:256:18 | a | | -| test.rs:256:13:256:13 | d | test.rs:257:9:257:9 | d | match | -| test.rs:256:17:256:18 | ! ... | test.rs:256:13:256:13 | d | | -| test.rs:256:18:256:18 | a | test.rs:256:17:256:18 | ! ... | | -| test.rs:257:9:257:9 | d | test.rs:255:43:258:5 | BlockExpr | | -| test.rs:260:5:266:5 | enter test_if_and_operator | test.rs:260:29:260:29 | a | | -| test.rs:260:5:266:5 | exit test_if_and_operator (normal) | test.rs:260:5:266:5 | exit test_if_and_operator | | -| test.rs:260:29:260:29 | a | test.rs:260:29:260:35 | Param | match | -| test.rs:260:29:260:35 | Param | test.rs:260:38:260:38 | b | | -| test.rs:260:38:260:38 | b | test.rs:260:38:260:43 | Param | match | -| test.rs:260:38:260:43 | Param | test.rs:260:46:260:46 | c | | -| test.rs:260:46:260:46 | c | test.rs:260:46:260:52 | Param | match | -| test.rs:260:46:260:52 | Param | test.rs:261:12:261:12 | a | | -| test.rs:260:63:266:5 | BlockExpr | test.rs:260:5:266:5 | exit test_if_and_operator (normal) | | -| test.rs:261:9:265:9 | IfExpr | test.rs:260:63:266:5 | BlockExpr | | -| test.rs:261:12:261:12 | a | test.rs:261:12:261:17 | [boolean(false)] ... && ... | false | -| test.rs:261:12:261:12 | a | test.rs:261:17:261:17 | b | true | -| test.rs:261:12:261:17 | [boolean(false)] ... && ... | test.rs:261:12:261:22 | [boolean(false)] ... && ... | false | -| test.rs:261:12:261:17 | [boolean(true)] ... && ... | test.rs:261:22:261:22 | c | true | -| test.rs:261:12:261:22 | [boolean(false)] ... && ... | test.rs:264:13:264:17 | false | false | -| test.rs:261:12:261:22 | [boolean(true)] ... && ... | test.rs:262:13:262:16 | true | true | -| test.rs:261:17:261:17 | b | test.rs:261:12:261:17 | [boolean(false)] ... && ... | false | -| test.rs:261:17:261:17 | b | test.rs:261:12:261:17 | [boolean(true)] ... && ... | true | -| test.rs:261:22:261:22 | c | test.rs:261:12:261:22 | [boolean(false)] ... && ... | false | -| test.rs:261:22:261:22 | c | test.rs:261:12:261:22 | [boolean(true)] ... && ... | true | -| test.rs:261:24:263:9 | BlockExpr | test.rs:261:9:265:9 | IfExpr | | -| test.rs:262:13:262:16 | true | test.rs:261:24:263:9 | BlockExpr | | -| test.rs:263:16:265:9 | BlockExpr | test.rs:261:9:265:9 | IfExpr | | -| test.rs:264:13:264:17 | false | test.rs:263:16:265:9 | BlockExpr | | -| test.rs:268:5:274:5 | enter test_if_or_operator | test.rs:268:28:268:28 | a | | -| test.rs:268:5:274:5 | exit test_if_or_operator (normal) | test.rs:268:5:274:5 | exit test_if_or_operator | | -| test.rs:268:28:268:28 | a | test.rs:268:28:268:34 | Param | match | -| test.rs:268:28:268:34 | Param | test.rs:268:37:268:37 | b | | -| test.rs:268:37:268:37 | b | test.rs:268:37:268:42 | Param | match | -| test.rs:268:37:268:42 | Param | test.rs:268:45:268:45 | c | | -| test.rs:268:45:268:45 | c | test.rs:268:45:268:51 | Param | match | -| test.rs:268:45:268:51 | Param | test.rs:269:12:269:12 | a | | -| test.rs:268:62:274:5 | BlockExpr | test.rs:268:5:274:5 | exit test_if_or_operator (normal) | | -| test.rs:269:9:273:9 | IfExpr | test.rs:268:62:274:5 | BlockExpr | | -| test.rs:269:12:269:12 | a | test.rs:269:12:269:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:269:12:269:12 | a | test.rs:269:17:269:17 | b | false | -| test.rs:269:12:269:17 | [boolean(false)] ... \|\| ... | test.rs:269:22:269:22 | c | false | -| test.rs:269:12:269:17 | [boolean(true)] ... \|\| ... | test.rs:269:12:269:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:269:12:269:22 | [boolean(false)] ... \|\| ... | test.rs:272:13:272:17 | false | false | -| test.rs:269:12:269:22 | [boolean(true)] ... \|\| ... | test.rs:270:13:270:16 | true | true | -| test.rs:269:17:269:17 | b | test.rs:269:12:269:17 | [boolean(false)] ... \|\| ... | false | -| test.rs:269:17:269:17 | b | test.rs:269:12:269:17 | [boolean(true)] ... \|\| ... | true | -| test.rs:269:22:269:22 | c | test.rs:269:12:269:22 | [boolean(false)] ... \|\| ... | false | -| test.rs:269:22:269:22 | c | test.rs:269:12:269:22 | [boolean(true)] ... \|\| ... | true | -| test.rs:269:24:271:9 | BlockExpr | test.rs:269:9:273:9 | IfExpr | | -| test.rs:270:13:270:16 | true | test.rs:269:24:271:9 | BlockExpr | | -| test.rs:271:16:273:9 | BlockExpr | test.rs:269:9:273:9 | IfExpr | | -| test.rs:272:13:272:17 | false | test.rs:271:16:273:9 | BlockExpr | | -| test.rs:276:5:282:5 | enter test_if_not_operator | test.rs:276:29:276:29 | a | | -| test.rs:276:5:282:5 | exit test_if_not_operator (normal) | test.rs:276:5:282:5 | exit test_if_not_operator | | -| test.rs:276:29:276:29 | a | test.rs:276:29:276:35 | Param | match | -| test.rs:276:29:276:35 | Param | test.rs:277:13:277:13 | a | | -| test.rs:276:46:282:5 | BlockExpr | test.rs:276:5:282:5 | exit test_if_not_operator (normal) | | -| test.rs:277:9:281:9 | IfExpr | test.rs:276:46:282:5 | BlockExpr | | -| test.rs:277:12:277:13 | [boolean(false)] ! ... | test.rs:280:13:280:17 | false | false | -| test.rs:277:12:277:13 | [boolean(true)] ! ... | test.rs:278:13:278:16 | true | true | -| test.rs:277:13:277:13 | a | test.rs:277:12:277:13 | [boolean(false)] ! ... | true | -| test.rs:277:13:277:13 | a | test.rs:277:12:277:13 | [boolean(true)] ! ... | false | -| test.rs:277:15:279:9 | BlockExpr | test.rs:277:9:281:9 | IfExpr | | -| test.rs:278:13:278:16 | true | test.rs:277:15:279:9 | BlockExpr | | -| test.rs:279:16:281:9 | BlockExpr | test.rs:277:9:281:9 | IfExpr | | -| test.rs:280:13:280:17 | false | test.rs:279:16:281:9 | BlockExpr | | -| test.rs:284:5:286:5 | enter test_and_return | test.rs:284:24:284:24 | a | | -| test.rs:284:5:286:5 | exit test_and_return (normal) | test.rs:284:5:286:5 | exit test_and_return | | -| test.rs:284:24:284:24 | a | test.rs:284:24:284:30 | Param | match | -| test.rs:284:24:284:30 | Param | test.rs:285:9:285:20 | ExprStmt | | -| test.rs:284:33:286:5 | BlockExpr | test.rs:284:5:286:5 | exit test_and_return (normal) | | -| test.rs:285:9:285:9 | a | test.rs:285:9:285:19 | ... && ... | false | -| test.rs:285:9:285:9 | a | test.rs:285:14:285:19 | ReturnExpr | true | -| test.rs:285:9:285:19 | ... && ... | test.rs:284:33:286:5 | BlockExpr | | -| test.rs:285:9:285:20 | ExprStmt | test.rs:285:9:285:9 | a | | -| test.rs:285:14:285:19 | ReturnExpr | test.rs:284:5:286:5 | exit test_and_return (normal) | return | -| test.rs:291:5:293:5 | enter test_question_mark_operator_1 | test.rs:291:38:291:38 | s | | -| test.rs:291:5:293:5 | exit test_question_mark_operator_1 (normal) | test.rs:291:5:293:5 | exit test_question_mark_operator_1 | | -| test.rs:291:38:291:38 | s | test.rs:291:38:291:44 | Param | match | -| test.rs:291:38:291:44 | Param | test.rs:292:9:292:11 | str | | -| test.rs:291:62:293:5 | BlockExpr | test.rs:291:5:293:5 | exit test_question_mark_operator_1 (normal) | | -| test.rs:292:9:292:11 | str | test.rs:292:9:292:26 | ... .parse(...) | | -| test.rs:292:9:292:26 | ... .parse(...) | test.rs:292:9:292:27 | TryExpr | | -| test.rs:292:9:292:27 | TryExpr | test.rs:291:5:293:5 | exit test_question_mark_operator_1 (normal) | return | -| test.rs:292:9:292:27 | TryExpr | test.rs:292:31:292:31 | 4 | match | -| test.rs:292:9:292:31 | ... + ... | test.rs:291:62:293:5 | BlockExpr | | -| test.rs:292:31:292:31 | 4 | test.rs:292:9:292:31 | ... + ... | | -| test.rs:295:5:300:5 | enter test_question_mark_operator_2 | test.rs:295:38:295:38 | b | | -| test.rs:295:5:300:5 | exit test_question_mark_operator_2 (normal) | test.rs:295:5:300:5 | exit test_question_mark_operator_2 | | -| test.rs:295:38:295:38 | b | test.rs:295:38:295:52 | Param | match | -| test.rs:295:38:295:52 | Param | test.rs:296:15:296:15 | b | | -| test.rs:295:71:300:5 | BlockExpr | test.rs:295:5:300:5 | exit test_question_mark_operator_2 (normal) | | -| test.rs:296:9:299:9 | MatchExpr | test.rs:295:71:300:5 | BlockExpr | | -| test.rs:296:15:296:15 | b | test.rs:296:15:296:16 | TryExpr | | -| test.rs:296:15:296:16 | TryExpr | test.rs:295:5:300:5 | exit test_question_mark_operator_2 (normal) | return | -| test.rs:296:15:296:16 | TryExpr | test.rs:297:13:297:16 | true | match | -| test.rs:297:13:297:16 | LiteralPat | test.rs:297:21:297:24 | Some | match | -| test.rs:297:13:297:16 | LiteralPat | test.rs:298:13:298:17 | false | no-match | -| test.rs:297:13:297:16 | true | test.rs:297:13:297:16 | LiteralPat | | -| test.rs:297:21:297:24 | Some | test.rs:297:26:297:30 | false | | -| test.rs:297:21:297:31 | CallExpr | test.rs:296:9:299:9 | MatchExpr | | -| test.rs:297:26:297:30 | false | test.rs:297:21:297:31 | CallExpr | | -| test.rs:298:13:298:17 | LiteralPat | test.rs:298:22:298:25 | Some | match | -| test.rs:298:13:298:17 | false | test.rs:298:13:298:17 | LiteralPat | | -| test.rs:298:22:298:25 | Some | test.rs:298:27:298:30 | true | | -| test.rs:298:22:298:31 | CallExpr | test.rs:296:9:299:9 | MatchExpr | | -| test.rs:298:27:298:30 | true | test.rs:298:22:298:31 | CallExpr | | -| test.rs:305:5:311:5 | enter test_match | test.rs:305:19:305:29 | maybe_digit | | -| test.rs:305:5:311:5 | exit test_match (normal) | test.rs:305:5:311:5 | exit test_match | | -| test.rs:305:19:305:29 | maybe_digit | test.rs:305:19:305:42 | Param | match | -| test.rs:305:19:305:42 | Param | test.rs:306:15:306:25 | maybe_digit | | -| test.rs:305:52:311:5 | BlockExpr | test.rs:305:5:311:5 | exit test_match (normal) | | -| test.rs:306:9:310:9 | MatchExpr | test.rs:305:52:311:5 | BlockExpr | | -| test.rs:306:15:306:25 | maybe_digit | test.rs:307:13:307:27 | TupleStructPat | | -| test.rs:307:13:307:27 | TupleStructPat | test.rs:307:26:307:26 | x | match | -| test.rs:307:13:307:27 | TupleStructPat | test.rs:308:13:308:27 | TupleStructPat | no-match | -| test.rs:307:26:307:26 | x | test.rs:307:32:307:32 | x | match | -| test.rs:307:32:307:32 | x | test.rs:307:36:307:37 | 10 | | -| test.rs:307:32:307:37 | ... < ... | test.rs:307:42:307:42 | x | true | -| test.rs:307:32:307:37 | ... < ... | test.rs:308:13:308:27 | TupleStructPat | false | -| test.rs:307:36:307:37 | 10 | test.rs:307:32:307:37 | ... < ... | | -| test.rs:307:42:307:42 | x | test.rs:307:46:307:46 | 5 | | -| test.rs:307:42:307:46 | ... + ... | test.rs:306:9:310:9 | MatchExpr | | -| test.rs:307:46:307:46 | 5 | test.rs:307:42:307:46 | ... + ... | | -| test.rs:308:13:308:27 | TupleStructPat | test.rs:308:26:308:26 | x | match | -| test.rs:308:13:308:27 | TupleStructPat | test.rs:309:13:309:24 | PathPat | no-match | -| test.rs:308:26:308:26 | x | test.rs:308:32:308:32 | x | match | -| test.rs:308:32:308:32 | x | test.rs:306:9:310:9 | MatchExpr | | -| test.rs:309:13:309:24 | PathPat | test.rs:309:29:309:29 | 5 | match | -| test.rs:309:29:309:29 | 5 | test.rs:306:9:310:9 | MatchExpr | | -| test.rs:313:5:322:5 | enter test_match_with_return_in_scrutinee | test.rs:313:44:313:54 | maybe_digit | | -| test.rs:313:5:322:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:313:5:322:5 | exit test_match_with_return_in_scrutinee | | -| test.rs:313:44:313:54 | maybe_digit | test.rs:313:44:313:67 | Param | match | -| test.rs:313:44:313:67 | Param | test.rs:314:19:314:29 | maybe_digit | | -| test.rs:313:77:322:5 | BlockExpr | test.rs:313:5:322:5 | exit test_match_with_return_in_scrutinee (normal) | | -| test.rs:314:9:321:9 | MatchExpr | test.rs:313:77:322:5 | BlockExpr | | -| test.rs:314:16:318:9 | IfExpr | test.rs:319:13:319:27 | TupleStructPat | | -| test.rs:314:19:314:29 | maybe_digit | test.rs:314:34:314:37 | Some | | -| test.rs:314:19:314:40 | ... == ... | test.rs:315:13:315:21 | ExprStmt | true | -| test.rs:314:19:314:40 | ... == ... | test.rs:317:13:317:23 | maybe_digit | false | -| test.rs:314:34:314:37 | Some | test.rs:314:39:314:39 | 3 | | -| test.rs:314:34:314:40 | CallExpr | test.rs:314:19:314:40 | ... == ... | | -| test.rs:314:39:314:39 | 3 | test.rs:314:34:314:40 | CallExpr | | -| test.rs:315:13:315:20 | ReturnExpr | test.rs:313:5:322:5 | exit test_match_with_return_in_scrutinee (normal) | return | -| test.rs:315:13:315:21 | ExprStmt | test.rs:315:20:315:20 | 3 | | -| test.rs:315:20:315:20 | 3 | test.rs:315:13:315:20 | ReturnExpr | | -| test.rs:316:16:318:9 | BlockExpr | test.rs:314:16:318:9 | IfExpr | | -| test.rs:317:13:317:23 | maybe_digit | test.rs:316:16:318:9 | BlockExpr | | -| test.rs:319:13:319:27 | TupleStructPat | test.rs:319:26:319:26 | x | match | -| test.rs:319:13:319:27 | TupleStructPat | test.rs:320:13:320:24 | PathPat | no-match | -| test.rs:319:26:319:26 | x | test.rs:319:32:319:32 | x | match | -| test.rs:319:32:319:32 | x | test.rs:319:36:319:36 | 5 | | -| test.rs:319:32:319:36 | ... + ... | test.rs:314:9:321:9 | MatchExpr | | -| test.rs:319:36:319:36 | 5 | test.rs:319:32:319:36 | ... + ... | | -| test.rs:320:13:320:24 | PathPat | test.rs:320:29:320:29 | 5 | match | -| test.rs:320:29:320:29 | 5 | test.rs:314:9:321:9 | MatchExpr | | -| test.rs:324:5:329:5 | enter test_match_and | test.rs:324:23:324:26 | cond | | -| test.rs:324:5:329:5 | exit test_match_and (normal) | test.rs:324:5:329:5 | exit test_match_and | | -| test.rs:324:23:324:26 | cond | test.rs:324:23:324:32 | Param | match | -| test.rs:324:23:324:32 | Param | test.rs:324:35:324:35 | r | | -| test.rs:324:35:324:35 | r | test.rs:324:35:324:48 | Param | match | -| test.rs:324:35:324:48 | Param | test.rs:325:16:325:16 | r | | -| test.rs:324:59:329:5 | BlockExpr | test.rs:324:5:329:5 | exit test_match_and (normal) | | -| test.rs:325:9:328:18 | ... && ... | test.rs:324:59:329:5 | BlockExpr | | -| test.rs:325:10:328:9 | [boolean(false)] MatchExpr | test.rs:325:9:328:18 | ... && ... | false | -| test.rs:325:10:328:9 | [boolean(true)] MatchExpr | test.rs:328:15:328:18 | cond | true | -| test.rs:325:16:325:16 | r | test.rs:326:13:326:19 | TupleStructPat | | -| test.rs:326:13:326:19 | TupleStructPat | test.rs:326:18:326:18 | a | match | -| test.rs:326:13:326:19 | TupleStructPat | test.rs:327:13:327:13 | WildcardPat | no-match | -| test.rs:326:18:326:18 | a | test.rs:326:24:326:24 | a | match | -| test.rs:326:24:326:24 | a | test.rs:325:10:328:9 | [boolean(false)] MatchExpr | false | -| test.rs:326:24:326:24 | a | test.rs:325:10:328:9 | [boolean(true)] MatchExpr | true | -| test.rs:327:13:327:13 | WildcardPat | test.rs:327:18:327:22 | false | match | -| test.rs:327:18:327:22 | false | test.rs:325:10:328:9 | [boolean(false)] MatchExpr | false | -| test.rs:328:15:328:18 | cond | test.rs:325:9:328:18 | ... && ... | | -| test.rs:331:5:336:5 | enter test_match_with_no_arms | test.rs:331:35:331:35 | r | | -| test.rs:331:5:336:5 | exit test_match_with_no_arms (normal) | test.rs:331:5:336:5 | exit test_match_with_no_arms | | -| test.rs:331:35:331:35 | r | test.rs:331:35:331:58 | Param | match | -| test.rs:331:35:331:58 | Param | test.rs:332:15:332:15 | r | | -| test.rs:331:66:336:5 | BlockExpr | test.rs:331:5:336:5 | exit test_match_with_no_arms (normal) | | -| test.rs:332:9:335:9 | MatchExpr | test.rs:331:66:336:5 | BlockExpr | | -| test.rs:332:15:332:15 | r | test.rs:333:13:333:21 | TupleStructPat | | -| test.rs:333:13:333:21 | TupleStructPat | test.rs:333:16:333:20 | value | match | -| test.rs:333:13:333:21 | TupleStructPat | test.rs:334:13:334:22 | TupleStructPat | no-match | -| test.rs:333:16:333:20 | value | test.rs:333:26:333:30 | value | match | -| test.rs:333:26:333:30 | value | test.rs:332:9:335:9 | MatchExpr | | -| test.rs:334:13:334:22 | TupleStructPat | test.rs:334:17:334:21 | never | match | -| test.rs:334:17:334:21 | never | test.rs:334:33:334:37 | never | match | -| test.rs:334:27:334:40 | MatchExpr | test.rs:332:9:335:9 | MatchExpr | | -| test.rs:334:33:334:37 | never | test.rs:334:27:334:40 | MatchExpr | | -| test.rs:341:5:344:5 | enter test_let_match | test.rs:341:23:341:23 | a | | -| test.rs:341:5:344:5 | exit test_let_match (normal) | test.rs:341:5:344:5 | exit test_let_match | | -| test.rs:341:23:341:23 | a | test.rs:341:23:341:36 | Param | match | -| test.rs:341:23:341:36 | Param | test.rs:342:9:342:49 | LetStmt | | -| test.rs:341:39:344:5 | BlockExpr | test.rs:341:5:344:5 | exit test_let_match (normal) | | -| test.rs:342:9:342:49 | LetStmt | test.rs:342:23:342:23 | a | | -| test.rs:342:13:342:19 | TupleStructPat | test.rs:342:18:342:18 | n | match | -| test.rs:342:13:342:19 | TupleStructPat | test.rs:342:32:342:46 | "Expected some" | no-match | -| test.rs:342:18:342:18 | n | test.rs:343:9:343:9 | n | match | -| test.rs:342:23:342:23 | a | test.rs:342:13:342:19 | TupleStructPat | | -| test.rs:342:32:342:46 | "Expected some" | test.rs:342:30:342:48 | BlockExpr | | -| test.rs:343:9:343:9 | n | test.rs:341:39:344:5 | BlockExpr | | -| test.rs:346:5:352:5 | enter test_let_with_return | test.rs:346:29:346:29 | m | | -| test.rs:346:5:352:5 | exit test_let_with_return (normal) | test.rs:346:5:352:5 | exit test_let_with_return | | -| test.rs:346:29:346:29 | m | test.rs:346:29:346:42 | Param | match | -| test.rs:346:29:346:42 | Param | test.rs:347:9:350:10 | LetStmt | | -| test.rs:346:45:352:5 | BlockExpr | test.rs:346:5:352:5 | exit test_let_with_return (normal) | | -| test.rs:347:9:350:10 | LetStmt | test.rs:347:25:347:25 | m | | -| test.rs:347:13:347:15 | ret | test.rs:351:9:351:12 | true | match | -| test.rs:347:19:350:9 | MatchExpr | test.rs:347:13:347:15 | ret | | -| test.rs:347:25:347:25 | m | test.rs:348:13:348:21 | TupleStructPat | | -| test.rs:348:13:348:21 | TupleStructPat | test.rs:348:18:348:20 | ret | match | -| test.rs:348:13:348:21 | TupleStructPat | test.rs:349:13:349:16 | None | no-match | -| test.rs:348:18:348:20 | ret | test.rs:348:26:348:28 | ret | match | -| test.rs:348:26:348:28 | ret | test.rs:347:19:350:9 | MatchExpr | | -| test.rs:349:13:349:16 | None | test.rs:349:28:349:32 | false | match | -| test.rs:349:21:349:32 | ReturnExpr | test.rs:346:5:352:5 | exit test_let_with_return (normal) | return | -| test.rs:349:28:349:32 | false | test.rs:349:21:349:32 | ReturnExpr | | -| test.rs:351:9:351:12 | true | test.rs:346:45:352:5 | BlockExpr | | -| test.rs:357:5:360:5 | enter empty_tuple_pattern | test.rs:357:28:357:31 | unit | | -| test.rs:357:5:360:5 | exit empty_tuple_pattern (normal) | test.rs:357:5:360:5 | exit empty_tuple_pattern | | -| test.rs:357:28:357:31 | unit | test.rs:357:28:357:35 | Param | match | -| test.rs:357:28:357:35 | Param | test.rs:358:9:358:22 | LetStmt | | -| test.rs:358:9:358:22 | LetStmt | test.rs:358:18:358:21 | unit | | -| test.rs:358:13:358:14 | TuplePat | test.rs:359:9:359:15 | ExprStmt | match | -| test.rs:358:18:358:21 | unit | test.rs:358:13:358:14 | TuplePat | | -| test.rs:359:9:359:14 | ReturnExpr | test.rs:357:5:360:5 | exit empty_tuple_pattern (normal) | return | -| test.rs:359:9:359:15 | ExprStmt | test.rs:359:9:359:14 | ReturnExpr | | -| test.rs:364:5:368:5 | enter empty_struct_pattern | test.rs:364:29:364:30 | st | | -| test.rs:364:5:368:5 | exit empty_struct_pattern (normal) | test.rs:364:5:368:5 | exit empty_struct_pattern | | -| test.rs:364:29:364:30 | st | test.rs:364:29:364:40 | Param | match | -| test.rs:364:29:364:40 | Param | test.rs:365:15:365:16 | st | | -| test.rs:364:50:368:5 | BlockExpr | test.rs:364:5:368:5 | exit empty_struct_pattern (normal) | | -| test.rs:365:9:367:9 | MatchExpr | test.rs:364:50:368:5 | BlockExpr | | -| test.rs:365:15:365:16 | st | test.rs:366:13:366:23 | RecordPat | | -| test.rs:366:13:366:23 | RecordPat | test.rs:366:28:366:28 | 1 | match | -| test.rs:366:28:366:28 | 1 | test.rs:365:9:367:9 | MatchExpr | | -| test.rs:370:5:377:5 | enter range_pattern | test.rs:371:15:371:16 | 42 | | -| test.rs:370:5:377:5 | exit range_pattern (normal) | test.rs:370:5:377:5 | exit range_pattern | | -| test.rs:370:31:377:5 | BlockExpr | test.rs:370:5:377:5 | exit range_pattern (normal) | | -| test.rs:371:9:376:9 | MatchExpr | test.rs:370:31:377:5 | BlockExpr | | -| test.rs:371:15:371:16 | 42 | test.rs:372:13:372:15 | RangePat | | -| test.rs:372:13:372:15 | RangePat | test.rs:372:15:372:15 | 0 | match | -| test.rs:372:13:372:15 | RangePat | test.rs:373:13:373:16 | RangePat | no-match | -| test.rs:372:15:372:15 | 0 | test.rs:372:15:372:15 | LiteralPat | | -| test.rs:372:15:372:15 | LiteralPat | test.rs:372:20:372:20 | 1 | match | -| test.rs:372:15:372:15 | LiteralPat | test.rs:373:13:373:16 | RangePat | no-match | -| test.rs:372:20:372:20 | 1 | test.rs:371:9:376:9 | MatchExpr | | -| test.rs:373:13:373:13 | 1 | test.rs:373:13:373:13 | LiteralPat | | -| test.rs:373:13:373:13 | LiteralPat | test.rs:373:16:373:16 | 2 | match | -| test.rs:373:13:373:13 | LiteralPat | test.rs:374:13:374:15 | RangePat | no-match | -| test.rs:373:13:373:16 | RangePat | test.rs:373:13:373:13 | 1 | match | -| test.rs:373:13:373:16 | RangePat | test.rs:374:13:374:15 | RangePat | no-match | -| test.rs:373:16:373:16 | 2 | test.rs:373:16:373:16 | LiteralPat | | -| test.rs:373:16:373:16 | LiteralPat | test.rs:373:21:373:21 | 2 | match | -| test.rs:373:16:373:16 | LiteralPat | test.rs:374:13:374:15 | RangePat | no-match | -| test.rs:373:21:373:21 | 2 | test.rs:371:9:376:9 | MatchExpr | | -| test.rs:374:13:374:13 | 5 | test.rs:374:13:374:13 | LiteralPat | | -| test.rs:374:13:374:13 | LiteralPat | test.rs:374:20:374:20 | 3 | match | -| test.rs:374:13:374:13 | LiteralPat | test.rs:375:13:375:14 | RestPat | no-match | -| test.rs:374:13:374:15 | RangePat | test.rs:374:13:374:13 | 5 | match | -| test.rs:374:13:374:15 | RangePat | test.rs:375:13:375:14 | RestPat | no-match | -| test.rs:374:20:374:20 | 3 | test.rs:371:9:376:9 | MatchExpr | | -| test.rs:375:13:375:14 | RestPat | test.rs:375:19:375:19 | 4 | match | -| test.rs:375:19:375:19 | 4 | test.rs:371:9:376:9 | MatchExpr | | -| test.rs:381:5:386:5 | enter test_infinite_loop | test.rs:382:9:384:9 | ExprStmt | | -| test.rs:382:9:384:9 | ExprStmt | test.rs:383:13:383:13 | 1 | | -| test.rs:382:14:384:9 | BlockExpr | test.rs:383:13:383:13 | 1 | | -| test.rs:383:13:383:13 | 1 | test.rs:382:14:384:9 | BlockExpr | | -| test.rs:390:5:392:5 | enter say_hello | test.rs:391:9:391:34 | ExprStmt | | -| test.rs:390:5:392:5 | exit say_hello (normal) | test.rs:390:5:392:5 | exit say_hello | | -| test.rs:390:26:392:5 | BlockExpr | test.rs:390:5:392:5 | exit say_hello (normal) | | -| test.rs:391:9:391:33 | $crate::io::_print | test.rs:391:18:391:32 | "hello, world!\\n" | | -| test.rs:391:9:391:33 | MacroExpr | test.rs:390:26:392:5 | BlockExpr | | -| test.rs:391:9:391:34 | ExprStmt | test.rs:391:18:391:32 | MacroStmts | | -| test.rs:391:18:391:32 | "hello, world!\\n" | test.rs:391:18:391:32 | FormatArgsExpr | | -| test.rs:391:18:391:32 | BlockExpr | test.rs:391:9:391:33 | MacroExpr | | -| test.rs:391:18:391:32 | CallExpr | test.rs:391:18:391:32 | BlockExpr | | -| test.rs:391:18:391:32 | ExprStmt | test.rs:391:9:391:33 | $crate::io::_print | | -| test.rs:391:18:391:32 | FormatArgsExpr | test.rs:391:18:391:32 | MacroExpr | | -| test.rs:391:18:391:32 | MacroExpr | test.rs:391:18:391:32 | CallExpr | | -| test.rs:391:18:391:32 | MacroStmts | test.rs:391:18:391:32 | ExprStmt | | -| test.rs:394:5:406:5 | enter async_block | test.rs:395:9:397:10 | LetStmt | | -| test.rs:394:5:406:5 | exit async_block (normal) | test.rs:394:5:406:5 | exit async_block | | -| test.rs:394:28:406:5 | BlockExpr | test.rs:394:5:406:5 | exit async_block (normal) | | -| test.rs:395:9:397:10 | LetStmt | test.rs:395:26:397:9 | BlockExpr | | -| test.rs:395:13:395:22 | say_godbye | test.rs:398:9:400:10 | LetStmt | match | -| test.rs:395:26:397:9 | BlockExpr | test.rs:395:13:395:22 | say_godbye | | -| test.rs:395:26:397:9 | enter BlockExpr | test.rs:396:13:396:42 | ExprStmt | | -| test.rs:395:26:397:9 | exit BlockExpr (normal) | test.rs:395:26:397:9 | exit BlockExpr | | -| test.rs:396:13:396:41 | $crate::io::_print | test.rs:396:22:396:40 | "godbye, everyone!\\n" | | -| test.rs:396:13:396:41 | MacroExpr | test.rs:395:26:397:9 | exit BlockExpr (normal) | | -| test.rs:396:13:396:42 | ExprStmt | test.rs:396:22:396:40 | MacroStmts | | -| test.rs:396:22:396:40 | "godbye, everyone!\\n" | test.rs:396:22:396:40 | FormatArgsExpr | | -| test.rs:396:22:396:40 | BlockExpr | test.rs:396:13:396:41 | MacroExpr | | -| test.rs:396:22:396:40 | CallExpr | test.rs:396:22:396:40 | BlockExpr | | -| test.rs:396:22:396:40 | ExprStmt | test.rs:396:13:396:41 | $crate::io::_print | | -| test.rs:396:22:396:40 | FormatArgsExpr | test.rs:396:22:396:40 | MacroExpr | | -| test.rs:396:22:396:40 | MacroExpr | test.rs:396:22:396:40 | CallExpr | | -| test.rs:396:22:396:40 | MacroStmts | test.rs:396:22:396:40 | ExprStmt | | -| test.rs:398:9:400:10 | LetStmt | test.rs:398:31:400:9 | BlockExpr | | -| test.rs:398:13:398:27 | say_how_are_you | test.rs:401:9:401:28 | LetStmt | match | -| test.rs:398:31:400:9 | BlockExpr | test.rs:398:13:398:27 | say_how_are_you | | -| test.rs:398:31:400:9 | enter BlockExpr | test.rs:399:13:399:37 | ExprStmt | | -| test.rs:398:31:400:9 | exit BlockExpr (normal) | test.rs:398:31:400:9 | exit BlockExpr | | -| test.rs:399:13:399:36 | $crate::io::_print | test.rs:399:22:399:35 | "how are you?\\n" | | -| test.rs:399:13:399:36 | MacroExpr | test.rs:398:31:400:9 | exit BlockExpr (normal) | | -| test.rs:399:13:399:37 | ExprStmt | test.rs:399:22:399:35 | MacroStmts | | -| test.rs:399:22:399:35 | "how are you?\\n" | test.rs:399:22:399:35 | FormatArgsExpr | | -| test.rs:399:22:399:35 | BlockExpr | test.rs:399:13:399:36 | MacroExpr | | -| test.rs:399:22:399:35 | CallExpr | test.rs:399:22:399:35 | BlockExpr | | -| test.rs:399:22:399:35 | ExprStmt | test.rs:399:13:399:36 | $crate::io::_print | | -| test.rs:399:22:399:35 | FormatArgsExpr | test.rs:399:22:399:35 | MacroExpr | | -| test.rs:399:22:399:35 | MacroExpr | test.rs:399:22:399:35 | CallExpr | | -| test.rs:399:22:399:35 | MacroStmts | test.rs:399:22:399:35 | ExprStmt | | -| test.rs:401:9:401:28 | LetStmt | test.rs:401:20:401:27 | BlockExpr | | -| test.rs:401:13:401:16 | noop | test.rs:402:9:402:26 | ExprStmt | match | -| test.rs:401:20:401:27 | BlockExpr | test.rs:401:13:401:16 | noop | | -| test.rs:402:9:402:17 | say_hello | test.rs:402:9:402:19 | CallExpr | | -| test.rs:402:9:402:19 | CallExpr | test.rs:402:9:402:25 | AwaitExpr | | -| test.rs:402:9:402:25 | AwaitExpr | test.rs:403:9:403:30 | ExprStmt | | -| test.rs:402:9:402:26 | ExprStmt | test.rs:402:9:402:17 | say_hello | | -| test.rs:403:9:403:23 | say_how_are_you | test.rs:403:9:403:29 | AwaitExpr | | -| test.rs:403:9:403:29 | AwaitExpr | test.rs:404:9:404:25 | ExprStmt | | -| test.rs:403:9:403:30 | ExprStmt | test.rs:403:9:403:23 | say_how_are_you | | -| test.rs:404:9:404:18 | say_godbye | test.rs:404:9:404:24 | AwaitExpr | | -| test.rs:404:9:404:24 | AwaitExpr | test.rs:405:9:405:19 | ExprStmt | | -| test.rs:404:9:404:25 | ExprStmt | test.rs:404:9:404:18 | say_godbye | | -| test.rs:405:9:405:12 | noop | test.rs:405:9:405:18 | AwaitExpr | | -| test.rs:405:9:405:18 | AwaitExpr | test.rs:394:28:406:5 | BlockExpr | | -| test.rs:405:9:405:19 | ExprStmt | test.rs:405:9:405:12 | noop | | -| test.rs:412:5:414:5 | enter add_two | test.rs:412:22:412:22 | n | | -| test.rs:412:5:414:5 | exit add_two (normal) | test.rs:412:5:414:5 | exit add_two | | -| test.rs:412:22:412:22 | n | test.rs:412:22:412:27 | Param | match | -| test.rs:412:22:412:27 | Param | test.rs:413:9:413:9 | n | | -| test.rs:412:37:414:5 | BlockExpr | test.rs:412:5:414:5 | exit add_two (normal) | | -| test.rs:413:9:413:9 | n | test.rs:413:13:413:13 | 2 | | -| test.rs:413:9:413:13 | ... + ... | test.rs:412:37:414:5 | BlockExpr | | -| test.rs:413:13:413:13 | 2 | test.rs:413:9:413:13 | ... + ... | | -| test.rs:418:5:426:5 | enter const_block_assert | test.rs:421:9:423:9 | ExprStmt | | -| test.rs:418:5:426:5 | exit const_block_assert (normal) | test.rs:418:5:426:5 | exit const_block_assert | | -| test.rs:418:41:426:5 | BlockExpr | test.rs:418:5:426:5 | exit const_block_assert (normal) | | -| test.rs:421:9:423:9 | BlockExpr | test.rs:425:9:425:10 | 42 | | -| test.rs:421:9:423:9 | ExprStmt | test.rs:422:13:422:50 | ExprStmt | | -| test.rs:422:13:422:49 | $crate::panicking::panic_explicit | test.rs:422:13:422:49 | CallExpr | | -| test.rs:422:13:422:49 | BlockExpr | test.rs:422:13:422:49 | MacroExpr | | -| test.rs:422:13:422:49 | BlockExpr | test.rs:422:13:422:49 | exit panic_cold_explicit (normal) | | -| test.rs:422:13:422:49 | BlockExpr | test.rs:422:21:422:48 | IfExpr | | -| test.rs:422:13:422:49 | CallExpr | test.rs:422:13:422:49 | BlockExpr | | -| test.rs:422:13:422:49 | CallExpr | test.rs:422:13:422:49 | BlockExpr | | -| test.rs:422:13:422:49 | ExprStmt | test.rs:422:13:422:49 | MacroStmts | | -| test.rs:422:13:422:49 | ExprStmt | test.rs:422:13:422:49 | panic_cold_explicit | | -| test.rs:422:13:422:49 | MacroExpr | test.rs:421:9:423:9 | BlockExpr | | -| test.rs:422:13:422:49 | MacroExpr | test.rs:422:13:422:49 | BlockExpr | | -| test.rs:422:13:422:49 | MacroStmts | test.rs:422:13:422:49 | panic_cold_explicit | | -| test.rs:422:13:422:49 | enter panic_cold_explicit | test.rs:422:13:422:49 | $crate::panicking::panic_explicit | | -| test.rs:422:13:422:49 | exit panic_cold_explicit (normal) | test.rs:422:13:422:49 | exit panic_cold_explicit | | -| test.rs:422:13:422:49 | panic_cold_explicit | test.rs:422:13:422:49 | CallExpr | | -| test.rs:422:13:422:49 | panic_cold_explicit | test.rs:422:13:422:49 | ExprStmt | | -| test.rs:422:13:422:50 | ExprStmt | test.rs:422:21:422:48 | MacroStmts | | -| test.rs:422:21:422:42 | std::mem::size_of::<...> | test.rs:422:21:422:44 | CallExpr | | -| test.rs:422:21:422:44 | CallExpr | test.rs:422:48:422:48 | 0 | | -| test.rs:422:21:422:48 | ... > ... | test.rs:422:21:422:48 | [boolean(false)] ! ... | true | -| test.rs:422:21:422:48 | ... > ... | test.rs:422:21:422:48 | [boolean(true)] ! ... | false | -| test.rs:422:21:422:48 | BlockExpr | test.rs:422:13:422:49 | MacroExpr | | -| test.rs:422:21:422:48 | IfExpr | test.rs:422:21:422:48 | BlockExpr | | -| test.rs:422:21:422:48 | MacroStmts | test.rs:422:21:422:42 | std::mem::size_of::<...> | | -| test.rs:422:21:422:48 | [boolean(false)] ! ... | test.rs:422:21:422:48 | IfExpr | false | -| test.rs:422:21:422:48 | [boolean(true)] ! ... | test.rs:422:13:422:49 | ExprStmt | true | -| test.rs:422:48:422:48 | 0 | test.rs:422:21:422:48 | ... > ... | | -| test.rs:425:9:425:10 | 42 | test.rs:418:41:426:5 | BlockExpr | | -| test.rs:428:5:437:5 | enter const_block_panic | test.rs:429:9:429:30 | Const | | -| test.rs:428:5:437:5 | exit const_block_panic (normal) | test.rs:428:5:437:5 | exit const_block_panic | | -| test.rs:428:35:437:5 | BlockExpr | test.rs:428:5:437:5 | exit const_block_panic (normal) | | -| test.rs:429:9:429:30 | Const | test.rs:430:9:435:9 | ExprStmt | | -| test.rs:430:9:435:9 | ExprStmt | test.rs:430:12:430:16 | false | | -| test.rs:430:9:435:9 | IfExpr | test.rs:436:9:436:9 | N | | -| test.rs:430:12:430:16 | false | test.rs:430:9:435:9 | IfExpr | false | -| test.rs:433:17:433:24 | $crate::panicking::panic_explicit | test.rs:433:17:433:24 | CallExpr | | -| test.rs:433:17:433:24 | BlockExpr | test.rs:433:17:433:24 | exit panic_cold_explicit (normal) | | -| test.rs:433:17:433:24 | CallExpr | test.rs:433:17:433:24 | BlockExpr | | -| test.rs:433:17:433:24 | enter panic_cold_explicit | test.rs:433:17:433:24 | $crate::panicking::panic_explicit | | -| test.rs:433:17:433:24 | exit panic_cold_explicit (normal) | test.rs:433:17:433:24 | exit panic_cold_explicit | | -| test.rs:436:9:436:9 | N | test.rs:428:35:437:5 | BlockExpr | | -| test.rs:440:1:445:1 | enter dead_code | test.rs:441:5:443:5 | ExprStmt | | -| test.rs:440:1:445:1 | exit dead_code (normal) | test.rs:440:1:445:1 | exit dead_code | | -| test.rs:441:5:443:5 | ExprStmt | test.rs:441:9:441:12 | true | | -| test.rs:441:9:441:12 | true | test.rs:442:9:442:17 | ExprStmt | true | -| test.rs:442:9:442:16 | ReturnExpr | test.rs:440:1:445:1 | exit dead_code (normal) | return | -| test.rs:442:9:442:17 | ExprStmt | test.rs:442:16:442:16 | 0 | | -| test.rs:442:16:442:16 | 0 | test.rs:442:9:442:16 | ReturnExpr | | -| test.rs:447:1:460:1 | enter labelled_block1 | test.rs:448:5:459:6 | LetStmt | | -| test.rs:447:1:460:1 | exit labelled_block1 (normal) | test.rs:447:1:460:1 | exit labelled_block1 | | -| test.rs:447:29:460:1 | BlockExpr | test.rs:447:1:460:1 | exit labelled_block1 (normal) | | -| test.rs:448:5:459:6 | LetStmt | test.rs:449:9:449:19 | ExprStmt | | -| test.rs:448:9:448:14 | result | test.rs:447:29:460:1 | BlockExpr | match | -| test.rs:448:18:459:5 | BlockExpr | test.rs:448:9:448:14 | result | | -| test.rs:449:9:449:16 | do_thing | test.rs:449:9:449:18 | CallExpr | | -| test.rs:449:9:449:18 | CallExpr | test.rs:450:9:452:9 | ExprStmt | | -| test.rs:449:9:449:19 | ExprStmt | test.rs:449:9:449:16 | do_thing | | -| test.rs:450:9:452:9 | ExprStmt | test.rs:450:12:450:28 | condition_not_met | | -| test.rs:450:9:452:9 | IfExpr | test.rs:453:9:453:24 | ExprStmt | | -| test.rs:450:12:450:28 | condition_not_met | test.rs:450:12:450:30 | CallExpr | | -| test.rs:450:12:450:30 | CallExpr | test.rs:450:9:452:9 | IfExpr | false | -| test.rs:450:12:450:30 | CallExpr | test.rs:451:13:451:27 | ExprStmt | true | -| test.rs:451:13:451:26 | BreakExpr | test.rs:448:18:459:5 | BlockExpr | break | -| test.rs:451:13:451:27 | ExprStmt | test.rs:451:26:451:26 | 1 | | -| test.rs:451:26:451:26 | 1 | test.rs:451:13:451:26 | BreakExpr | | -| test.rs:453:9:453:21 | do_next_thing | test.rs:453:9:453:23 | CallExpr | | -| test.rs:453:9:453:23 | CallExpr | test.rs:454:9:456:9 | ExprStmt | | -| test.rs:453:9:453:24 | ExprStmt | test.rs:453:9:453:21 | do_next_thing | | -| test.rs:454:9:456:9 | ExprStmt | test.rs:454:12:454:28 | condition_not_met | | -| test.rs:454:9:456:9 | IfExpr | test.rs:457:9:457:24 | ExprStmt | | -| test.rs:454:12:454:28 | condition_not_met | test.rs:454:12:454:30 | CallExpr | | -| test.rs:454:12:454:30 | CallExpr | test.rs:454:9:456:9 | IfExpr | false | -| test.rs:454:12:454:30 | CallExpr | test.rs:455:13:455:27 | ExprStmt | true | -| test.rs:455:13:455:26 | BreakExpr | test.rs:448:18:459:5 | BlockExpr | break | -| test.rs:455:13:455:27 | ExprStmt | test.rs:455:26:455:26 | 2 | | -| test.rs:455:26:455:26 | 2 | test.rs:455:13:455:26 | BreakExpr | | -| test.rs:457:9:457:21 | do_last_thing | test.rs:457:9:457:23 | CallExpr | | -| test.rs:457:9:457:23 | CallExpr | test.rs:458:9:458:9 | 3 | | -| test.rs:457:9:457:24 | ExprStmt | test.rs:457:9:457:21 | do_last_thing | | -| test.rs:458:9:458:9 | 3 | test.rs:448:18:459:5 | BlockExpr | | -| test.rs:462:1:470:1 | enter labelled_block2 | test.rs:463:5:469:6 | LetStmt | | -| test.rs:462:1:470:1 | exit labelled_block2 (normal) | test.rs:462:1:470:1 | exit labelled_block2 | | -| test.rs:462:29:470:1 | BlockExpr | test.rs:462:1:470:1 | exit labelled_block2 (normal) | | -| test.rs:463:5:469:6 | LetStmt | test.rs:464:9:464:34 | LetStmt | | -| test.rs:463:9:463:14 | result | test.rs:462:29:470:1 | BlockExpr | match | -| test.rs:463:18:469:5 | BlockExpr | test.rs:463:9:463:14 | result | | -| test.rs:464:9:464:34 | LetStmt | test.rs:464:30:464:33 | None | | -| test.rs:464:13:464:13 | x | test.rs:465:9:467:10 | LetStmt | match | -| test.rs:464:30:464:33 | None | test.rs:464:13:464:13 | x | | -| test.rs:465:9:467:10 | LetStmt | test.rs:465:23:465:23 | x | | -| test.rs:465:13:465:19 | TupleStructPat | test.rs:465:18:465:18 | y | match | -| test.rs:465:13:465:19 | TupleStructPat | test.rs:466:13:466:27 | ExprStmt | no-match | -| test.rs:465:18:465:18 | y | test.rs:468:9:468:9 | x | match | -| test.rs:465:23:465:23 | x | test.rs:465:13:465:19 | TupleStructPat | | -| test.rs:466:13:466:26 | BreakExpr | test.rs:463:18:469:5 | BlockExpr | break | -| test.rs:466:13:466:27 | ExprStmt | test.rs:466:26:466:26 | 1 | | -| test.rs:466:26:466:26 | 1 | test.rs:466:13:466:26 | BreakExpr | | -| test.rs:468:9:468:9 | x | test.rs:463:18:469:5 | BlockExpr | | -| test.rs:472:1:478:1 | enter test_nested_function | test.rs:473:5:473:18 | LetStmt | | -| test.rs:472:1:478:1 | exit test_nested_function (normal) | test.rs:472:1:478:1 | exit test_nested_function | | -| test.rs:472:27:478:1 | BlockExpr | test.rs:472:1:478:1 | exit test_nested_function (normal) | | -| test.rs:473:5:473:18 | LetStmt | test.rs:473:17:473:17 | 0 | | -| test.rs:473:9:473:13 | x | test.rs:474:5:476:5 | nested | match | -| test.rs:473:17:473:17 | 0 | test.rs:473:9:473:13 | x | | -| test.rs:474:5:476:5 | enter nested | test.rs:474:15:474:15 | x | | -| test.rs:474:5:476:5 | exit nested (normal) | test.rs:474:5:476:5 | exit nested | | -| test.rs:474:5:476:5 | nested | test.rs:477:5:477:19 | ExprStmt | | -| test.rs:474:15:474:15 | x | test.rs:474:15:474:25 | Param | match | -| test.rs:474:15:474:25 | Param | test.rs:475:9:475:16 | ExprStmt | | -| test.rs:474:28:476:5 | BlockExpr | test.rs:474:5:476:5 | exit nested (normal) | | -| test.rs:475:9:475:10 | * ... | test.rs:475:15:475:15 | 1 | | -| test.rs:475:9:475:15 | ... += ... | test.rs:474:28:476:5 | BlockExpr | | -| test.rs:475:9:475:16 | ExprStmt | test.rs:475:10:475:10 | x | | -| test.rs:475:10:475:10 | x | test.rs:475:9:475:10 | * ... | | -| test.rs:475:15:475:15 | 1 | test.rs:475:9:475:15 | ... += ... | | -| test.rs:477:5:477:10 | nested | test.rs:477:17:477:17 | x | | -| test.rs:477:5:477:18 | CallExpr | test.rs:472:27:478:1 | BlockExpr | | -| test.rs:477:5:477:19 | ExprStmt | test.rs:477:5:477:10 | nested | | -| test.rs:477:12:477:17 | RefExpr | test.rs:477:5:477:18 | CallExpr | | -| test.rs:477:17:477:17 | x | test.rs:477:12:477:17 | RefExpr | | +| test.rs:140:16:142:9 | BlockExpr | test.rs:138:9:142:9 | IfExpr | | +| test.rs:141:13:141:13 | 0 | test.rs:140:16:142:9 | BlockExpr | | +| test.rs:145:5:150:5 | enter test_if_let | test.rs:145:20:145:20 | a | | +| test.rs:145:5:150:5 | exit test_if_let (normal) | test.rs:145:5:150:5 | exit test_if_let | | +| test.rs:145:20:145:20 | a | test.rs:145:20:145:33 | Param | match | +| test.rs:145:20:145:33 | Param | test.rs:146:9:148:9 | ExprStmt | | +| test.rs:145:43:150:5 | BlockExpr | test.rs:145:5:150:5 | exit test_if_let (normal) | | +| test.rs:146:9:148:9 | ExprStmt | test.rs:146:12:146:26 | LetExpr | | +| test.rs:146:9:148:9 | IfExpr | test.rs:149:9:149:9 | 0 | | +| test.rs:146:12:146:26 | LetExpr | test.rs:146:26:146:26 | a | | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:9:148:9 | IfExpr | no-match | +| test.rs:146:16:146:22 | TupleStructPat | test.rs:146:21:146:21 | n | match | +| test.rs:146:21:146:21 | n | test.rs:147:13:147:21 | ExprStmt | match | +| test.rs:146:26:146:26 | a | test.rs:146:16:146:22 | TupleStructPat | | +| test.rs:147:13:147:20 | ReturnExpr | test.rs:145:5:150:5 | exit test_if_let (normal) | return | +| test.rs:147:13:147:21 | ExprStmt | test.rs:147:20:147:20 | n | | +| test.rs:147:20:147:20 | n | test.rs:147:13:147:20 | ReturnExpr | | +| test.rs:149:9:149:9 | 0 | test.rs:145:43:150:5 | BlockExpr | | +| test.rs:152:5:158:5 | enter test_nested_if | test.rs:152:23:152:23 | a | | +| test.rs:152:5:158:5 | exit test_nested_if (normal) | test.rs:152:5:158:5 | exit test_nested_if | | +| test.rs:152:23:152:23 | a | test.rs:152:23:152:28 | Param | match | +| test.rs:152:23:152:28 | Param | test.rs:153:16:153:16 | a | | +| test.rs:152:38:158:5 | BlockExpr | test.rs:152:5:158:5 | exit test_nested_if (normal) | | +| test.rs:153:9:157:9 | IfExpr | test.rs:152:38:158:5 | BlockExpr | | +| test.rs:153:13:153:48 | [boolean(false)] IfExpr | test.rs:156:13:156:13 | 0 | false | +| test.rs:153:13:153:48 | [boolean(true)] IfExpr | test.rs:154:13:154:13 | 1 | true | +| test.rs:153:16:153:16 | a | test.rs:153:20:153:20 | 0 | | +| test.rs:153:16:153:20 | ... < ... | test.rs:153:24:153:24 | a | true | +| test.rs:153:16:153:20 | ... < ... | test.rs:153:41:153:41 | a | false | +| test.rs:153:20:153:20 | 0 | test.rs:153:16:153:20 | ... < ... | | +| test.rs:153:22:153:32 | [boolean(false)] BlockExpr | test.rs:153:13:153:48 | [boolean(false)] IfExpr | false | +| test.rs:153:22:153:32 | [boolean(true)] BlockExpr | test.rs:153:13:153:48 | [boolean(true)] IfExpr | true | +| test.rs:153:24:153:24 | a | test.rs:153:29:153:30 | 10 | | +| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(false)] BlockExpr | false | +| test.rs:153:24:153:30 | ... < ... | test.rs:153:22:153:32 | [boolean(true)] BlockExpr | true | +| test.rs:153:28:153:30 | - ... | test.rs:153:24:153:30 | ... < ... | | +| test.rs:153:29:153:30 | 10 | test.rs:153:28:153:30 | - ... | | +| test.rs:153:39:153:48 | [boolean(false)] BlockExpr | test.rs:153:13:153:48 | [boolean(false)] IfExpr | false | +| test.rs:153:39:153:48 | [boolean(true)] BlockExpr | test.rs:153:13:153:48 | [boolean(true)] IfExpr | true | +| test.rs:153:41:153:41 | a | test.rs:153:45:153:46 | 10 | | +| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(false)] BlockExpr | false | +| test.rs:153:41:153:46 | ... > ... | test.rs:153:39:153:48 | [boolean(true)] BlockExpr | true | +| test.rs:153:45:153:46 | 10 | test.rs:153:41:153:46 | ... > ... | | +| test.rs:153:51:155:9 | BlockExpr | test.rs:153:9:157:9 | IfExpr | | +| test.rs:154:13:154:13 | 1 | test.rs:153:51:155:9 | BlockExpr | | +| test.rs:155:16:157:9 | BlockExpr | test.rs:153:9:157:9 | IfExpr | | +| test.rs:156:13:156:13 | 0 | test.rs:155:16:157:9 | BlockExpr | | +| test.rs:160:5:169:5 | enter test_nested_if_match | test.rs:160:29:160:29 | a | | +| test.rs:160:5:169:5 | exit test_nested_if_match (normal) | test.rs:160:5:169:5 | exit test_nested_if_match | | +| test.rs:160:29:160:29 | a | test.rs:160:29:160:34 | Param | match | +| test.rs:160:29:160:34 | Param | test.rs:161:19:161:19 | a | | +| test.rs:160:44:169:5 | BlockExpr | test.rs:160:5:169:5 | exit test_nested_if_match (normal) | | +| test.rs:161:9:168:9 | IfExpr | test.rs:160:44:169:5 | BlockExpr | | +| test.rs:161:13:164:9 | [boolean(false)] MatchExpr | test.rs:167:13:167:13 | 0 | false | +| test.rs:161:13:164:9 | [boolean(true)] MatchExpr | test.rs:165:13:165:13 | 1 | true | +| test.rs:161:19:161:19 | a | test.rs:162:13:162:13 | 0 | | +| test.rs:162:13:162:13 | 0 | test.rs:162:13:162:13 | LiteralPat | | +| test.rs:162:13:162:13 | LiteralPat | test.rs:162:18:162:21 | true | match | +| test.rs:162:13:162:13 | LiteralPat | test.rs:163:13:163:13 | WildcardPat | no-match | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] MatchExpr | true | +| test.rs:163:13:163:13 | WildcardPat | test.rs:163:18:163:22 | false | match | +| test.rs:163:18:163:22 | false | test.rs:161:13:164:9 | [boolean(false)] MatchExpr | false | +| test.rs:164:12:166:9 | BlockExpr | test.rs:161:9:168:9 | IfExpr | | +| test.rs:165:13:165:13 | 1 | test.rs:164:12:166:9 | BlockExpr | | +| test.rs:166:16:168:9 | BlockExpr | test.rs:161:9:168:9 | IfExpr | | +| test.rs:167:13:167:13 | 0 | test.rs:166:16:168:9 | BlockExpr | | +| test.rs:171:5:180:5 | enter test_nested_if_block | test.rs:171:29:171:29 | a | | +| test.rs:171:5:180:5 | exit test_nested_if_block (normal) | test.rs:171:5:180:5 | exit test_nested_if_block | | +| test.rs:171:29:171:29 | a | test.rs:171:29:171:34 | Param | match | +| test.rs:171:29:171:34 | Param | test.rs:173:13:173:15 | ExprStmt | | +| test.rs:171:44:180:5 | BlockExpr | test.rs:171:5:180:5 | exit test_nested_if_block (normal) | | +| test.rs:172:9:179:9 | IfExpr | test.rs:171:44:180:5 | BlockExpr | | +| test.rs:172:12:175:9 | [boolean(false)] BlockExpr | test.rs:178:13:178:13 | 0 | false | +| test.rs:172:12:175:9 | [boolean(true)] BlockExpr | test.rs:176:13:176:13 | 1 | true | +| test.rs:173:13:173:14 | TupleExpr | test.rs:174:13:174:13 | a | | +| test.rs:173:13:173:15 | ExprStmt | test.rs:173:13:173:14 | TupleExpr | | +| test.rs:174:13:174:13 | a | test.rs:174:17:174:17 | 0 | | +| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(false)] BlockExpr | false | +| test.rs:174:13:174:17 | ... > ... | test.rs:172:12:175:9 | [boolean(true)] BlockExpr | true | +| test.rs:174:17:174:17 | 0 | test.rs:174:13:174:17 | ... > ... | | +| test.rs:175:11:177:9 | BlockExpr | test.rs:172:9:179:9 | IfExpr | | +| test.rs:176:13:176:13 | 1 | test.rs:175:11:177:9 | BlockExpr | | +| test.rs:177:16:179:9 | BlockExpr | test.rs:172:9:179:9 | IfExpr | | +| test.rs:178:13:178:13 | 0 | test.rs:177:16:179:9 | BlockExpr | | +| test.rs:182:5:192:5 | enter test_if_assignment | test.rs:182:27:182:27 | a | | +| test.rs:182:5:192:5 | exit test_if_assignment (normal) | test.rs:182:5:192:5 | exit test_if_assignment | | +| test.rs:182:27:182:27 | a | test.rs:182:27:182:32 | Param | match | +| test.rs:182:27:182:32 | Param | test.rs:183:9:183:26 | LetStmt | | +| test.rs:182:42:192:5 | BlockExpr | test.rs:182:5:192:5 | exit test_if_assignment (normal) | | +| test.rs:183:9:183:26 | LetStmt | test.rs:183:21:183:25 | false | | +| test.rs:183:13:183:17 | x | test.rs:185:13:185:21 | ExprStmt | match | +| test.rs:183:21:183:25 | false | test.rs:183:13:183:17 | x | | +| test.rs:184:9:191:9 | IfExpr | test.rs:182:42:192:5 | BlockExpr | | +| test.rs:184:12:187:9 | [boolean(false)] BlockExpr | test.rs:190:13:190:13 | 0 | false | +| test.rs:184:12:187:9 | [boolean(true)] BlockExpr | test.rs:188:13:188:13 | 1 | true | +| test.rs:185:13:185:13 | x | test.rs:185:17:185:20 | true | | +| test.rs:185:13:185:20 | ... = ... | test.rs:186:13:186:13 | x | | +| test.rs:185:13:185:21 | ExprStmt | test.rs:185:13:185:13 | x | | +| test.rs:185:17:185:20 | true | test.rs:185:13:185:20 | ... = ... | | +| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(false)] BlockExpr | false | +| test.rs:186:13:186:13 | x | test.rs:184:12:187:9 | [boolean(true)] BlockExpr | true | +| test.rs:187:11:189:9 | BlockExpr | test.rs:184:9:191:9 | IfExpr | | +| test.rs:188:13:188:13 | 1 | test.rs:187:11:189:9 | BlockExpr | | +| test.rs:189:16:191:9 | BlockExpr | test.rs:184:9:191:9 | IfExpr | | +| test.rs:190:13:190:13 | 0 | test.rs:189:16:191:9 | BlockExpr | | +| test.rs:194:5:205:5 | enter test_if_loop1 | test.rs:194:22:194:22 | a | | +| test.rs:194:5:205:5 | exit test_if_loop1 (normal) | test.rs:194:5:205:5 | exit test_if_loop1 | | +| test.rs:194:22:194:22 | a | test.rs:194:22:194:27 | Param | match | +| test.rs:194:22:194:27 | Param | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:194:37:205:5 | BlockExpr | test.rs:194:5:205:5 | exit test_if_loop1 (normal) | | +| test.rs:195:9:204:9 | IfExpr | test.rs:194:37:205:5 | BlockExpr | | +| test.rs:195:13:200:9 | [boolean(false)] LoopExpr | test.rs:203:13:203:13 | 0 | false | +| test.rs:195:13:200:9 | [boolean(true)] LoopExpr | test.rs:201:13:201:13 | 1 | true | +| test.rs:195:18:200:9 | BlockExpr | test.rs:196:13:198:14 | ExprStmt | | +| test.rs:196:13:198:13 | IfExpr | test.rs:199:13:199:19 | ExprStmt | | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:16:196:16 | a | | +| test.rs:196:16:196:16 | a | test.rs:196:20:196:20 | 0 | | +| test.rs:196:16:196:20 | ... > ... | test.rs:196:13:198:13 | IfExpr | false | +| test.rs:196:16:196:20 | ... > ... | test.rs:197:17:197:29 | ExprStmt | true | +| test.rs:196:20:196:20 | 0 | test.rs:196:16:196:20 | ... > ... | | +| test.rs:197:17:197:28 | [boolean(false)] BreakExpr | test.rs:195:13:200:9 | [boolean(false)] LoopExpr | break | +| test.rs:197:17:197:28 | [boolean(true)] BreakExpr | test.rs:195:13:200:9 | [boolean(true)] LoopExpr | break | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:23:197:23 | a | | +| test.rs:197:23:197:23 | a | test.rs:197:27:197:28 | 10 | | +| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(false)] BreakExpr | false | +| test.rs:197:23:197:28 | ... > ... | test.rs:197:17:197:28 | [boolean(true)] BreakExpr | true | +| test.rs:197:27:197:28 | 10 | test.rs:197:23:197:28 | ... > ... | | +| test.rs:199:13:199:13 | a | test.rs:199:17:199:18 | 10 | | +| test.rs:199:13:199:18 | ... < ... | test.rs:195:18:200:9 | BlockExpr | | +| test.rs:199:13:199:19 | ExprStmt | test.rs:199:13:199:13 | a | | +| test.rs:199:17:199:18 | 10 | test.rs:199:13:199:18 | ... < ... | | +| test.rs:200:12:202:9 | BlockExpr | test.rs:195:9:204:9 | IfExpr | | +| test.rs:201:13:201:13 | 1 | test.rs:200:12:202:9 | BlockExpr | | +| test.rs:202:16:204:9 | BlockExpr | test.rs:195:9:204:9 | IfExpr | | +| test.rs:203:13:203:13 | 0 | test.rs:202:16:204:9 | BlockExpr | | +| test.rs:207:5:218:5 | enter test_if_loop2 | test.rs:207:22:207:22 | a | | +| test.rs:207:5:218:5 | exit test_if_loop2 (normal) | test.rs:207:5:218:5 | exit test_if_loop2 | | +| test.rs:207:22:207:22 | a | test.rs:207:22:207:27 | Param | match | +| test.rs:207:22:207:27 | Param | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:207:37:218:5 | BlockExpr | test.rs:207:5:218:5 | exit test_if_loop2 (normal) | | +| test.rs:208:9:217:9 | IfExpr | test.rs:207:37:218:5 | BlockExpr | | +| test.rs:208:13:213:9 | [boolean(false)] LoopExpr | test.rs:216:13:216:13 | 0 | false | +| test.rs:208:13:213:9 | [boolean(true)] LoopExpr | test.rs:214:13:214:13 | 1 | true | +| test.rs:208:26:213:9 | BlockExpr | test.rs:209:13:211:14 | ExprStmt | | +| test.rs:209:13:211:13 | IfExpr | test.rs:212:13:212:19 | ExprStmt | | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:16:209:16 | a | | +| test.rs:209:16:209:16 | a | test.rs:209:20:209:20 | 0 | | +| test.rs:209:16:209:20 | ... > ... | test.rs:209:13:211:13 | IfExpr | false | +| test.rs:209:16:209:20 | ... > ... | test.rs:210:17:210:36 | ExprStmt | true | +| test.rs:209:20:209:20 | 0 | test.rs:209:16:209:20 | ... > ... | | +| test.rs:210:17:210:35 | [boolean(false)] BreakExpr | test.rs:208:13:213:9 | [boolean(false)] LoopExpr | break | +| test.rs:210:17:210:35 | [boolean(true)] BreakExpr | test.rs:208:13:213:9 | [boolean(true)] LoopExpr | break | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:30:210:30 | a | | +| test.rs:210:30:210:30 | a | test.rs:210:34:210:35 | 10 | | +| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(false)] BreakExpr | false | +| test.rs:210:30:210:35 | ... > ... | test.rs:210:17:210:35 | [boolean(true)] BreakExpr | true | +| test.rs:210:34:210:35 | 10 | test.rs:210:30:210:35 | ... > ... | | +| test.rs:212:13:212:13 | a | test.rs:212:17:212:18 | 10 | | +| test.rs:212:13:212:18 | ... < ... | test.rs:208:26:213:9 | BlockExpr | | +| test.rs:212:13:212:19 | ExprStmt | test.rs:212:13:212:13 | a | | +| test.rs:212:17:212:18 | 10 | test.rs:212:13:212:18 | ... < ... | | +| test.rs:213:12:215:9 | BlockExpr | test.rs:208:9:217:9 | IfExpr | | +| test.rs:214:13:214:13 | 1 | test.rs:213:12:215:9 | BlockExpr | | +| test.rs:215:16:217:9 | BlockExpr | test.rs:208:9:217:9 | IfExpr | | +| test.rs:216:13:216:13 | 0 | test.rs:215:16:217:9 | BlockExpr | | +| test.rs:220:5:228:5 | enter test_labelled_block | test.rs:220:28:220:28 | a | | +| test.rs:220:5:228:5 | exit test_labelled_block (normal) | test.rs:220:5:228:5 | exit test_labelled_block | | +| test.rs:220:28:220:28 | a | test.rs:220:28:220:33 | Param | match | +| test.rs:220:28:220:33 | Param | test.rs:222:13:222:31 | ExprStmt | | +| test.rs:220:43:228:5 | BlockExpr | test.rs:220:5:228:5 | exit test_labelled_block (normal) | | +| test.rs:221:9:227:9 | IfExpr | test.rs:220:43:228:5 | BlockExpr | | +| test.rs:221:13:223:9 | [boolean(false)] BlockExpr | test.rs:226:13:226:13 | 0 | false | +| test.rs:221:13:223:9 | [boolean(true)] BlockExpr | test.rs:224:13:224:13 | 1 | true | +| test.rs:222:13:222:30 | [boolean(false)] BreakExpr | test.rs:221:13:223:9 | [boolean(false)] BlockExpr | break | +| test.rs:222:13:222:30 | [boolean(true)] BreakExpr | test.rs:221:13:223:9 | [boolean(true)] BlockExpr | break | +| test.rs:222:13:222:31 | ExprStmt | test.rs:222:26:222:26 | a | | +| test.rs:222:26:222:26 | a | test.rs:222:30:222:30 | 0 | | +| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(false)] BreakExpr | false | +| test.rs:222:26:222:30 | ... > ... | test.rs:222:13:222:30 | [boolean(true)] BreakExpr | true | +| test.rs:222:30:222:30 | 0 | test.rs:222:26:222:30 | ... > ... | | +| test.rs:223:12:225:9 | BlockExpr | test.rs:221:9:227:9 | IfExpr | | +| test.rs:224:13:224:13 | 1 | test.rs:223:12:225:9 | BlockExpr | | +| test.rs:225:16:227:9 | BlockExpr | test.rs:221:9:227:9 | IfExpr | | +| test.rs:226:13:226:13 | 0 | test.rs:225:16:227:9 | BlockExpr | | +| test.rs:233:5:236:5 | enter test_and_operator | test.rs:233:30:233:30 | a | | +| test.rs:233:5:236:5 | exit test_and_operator (normal) | test.rs:233:5:236:5 | exit test_and_operator | | +| test.rs:233:30:233:30 | a | test.rs:233:30:233:36 | Param | match | +| test.rs:233:30:233:36 | Param | test.rs:233:39:233:39 | b | | +| test.rs:233:39:233:39 | b | test.rs:233:39:233:45 | Param | match | +| test.rs:233:39:233:45 | Param | test.rs:233:48:233:48 | c | | +| test.rs:233:48:233:48 | c | test.rs:233:48:233:54 | Param | match | +| test.rs:233:48:233:54 | Param | test.rs:234:9:234:28 | LetStmt | | +| test.rs:233:65:236:5 | BlockExpr | test.rs:233:5:236:5 | exit test_and_operator (normal) | | +| test.rs:234:9:234:28 | LetStmt | test.rs:234:17:234:17 | a | | +| test.rs:234:13:234:13 | d | test.rs:235:9:235:9 | d | match | +| test.rs:234:17:234:17 | a | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | +| test.rs:234:17:234:17 | a | test.rs:234:22:234:22 | b | true | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:234:17:234:27 | ... && ... | false | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:27:234:27 | c | true | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:13:234:13 | d | | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(true)] ... && ... | true | +| test.rs:234:27:234:27 | c | test.rs:234:17:234:27 | ... && ... | | +| test.rs:235:9:235:9 | d | test.rs:233:65:236:5 | BlockExpr | | +| test.rs:238:5:241:5 | enter test_or_operator | test.rs:238:25:238:25 | a | | +| test.rs:238:5:241:5 | exit test_or_operator (normal) | test.rs:238:5:241:5 | exit test_or_operator | | +| test.rs:238:25:238:25 | a | test.rs:238:25:238:31 | Param | match | +| test.rs:238:25:238:31 | Param | test.rs:238:34:238:34 | b | | +| test.rs:238:34:238:34 | b | test.rs:238:34:238:40 | Param | match | +| test.rs:238:34:238:40 | Param | test.rs:238:43:238:43 | c | | +| test.rs:238:43:238:43 | c | test.rs:238:43:238:49 | Param | match | +| test.rs:238:43:238:49 | Param | test.rs:239:9:239:28 | LetStmt | | +| test.rs:238:60:241:5 | BlockExpr | test.rs:238:5:241:5 | exit test_or_operator (normal) | | +| test.rs:239:9:239:28 | LetStmt | test.rs:239:17:239:17 | a | | +| test.rs:239:13:239:13 | d | test.rs:240:9:240:9 | d | match | +| test.rs:239:17:239:17 | a | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:239:17:239:17 | a | test.rs:239:22:239:22 | b | false | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:27:239:27 | c | false | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:239:17:239:27 | ... \|\| ... | true | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:13:239:13 | d | | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:239:27:239:27 | c | test.rs:239:17:239:27 | ... \|\| ... | | +| test.rs:240:9:240:9 | d | test.rs:238:60:241:5 | BlockExpr | | +| test.rs:243:5:246:5 | enter test_or_operator_2 | test.rs:243:27:243:27 | a | | +| test.rs:243:5:246:5 | exit test_or_operator_2 (normal) | test.rs:243:5:246:5 | exit test_or_operator_2 | | +| test.rs:243:27:243:27 | a | test.rs:243:27:243:33 | Param | match | +| test.rs:243:27:243:33 | Param | test.rs:243:36:243:36 | b | | +| test.rs:243:36:243:36 | b | test.rs:243:36:243:41 | Param | match | +| test.rs:243:36:243:41 | Param | test.rs:243:44:243:44 | c | | +| test.rs:243:44:243:44 | c | test.rs:243:44:243:50 | Param | match | +| test.rs:243:44:243:50 | Param | test.rs:244:9:244:36 | LetStmt | | +| test.rs:243:61:246:5 | BlockExpr | test.rs:243:5:246:5 | exit test_or_operator_2 (normal) | | +| test.rs:244:9:244:36 | LetStmt | test.rs:244:17:244:17 | a | | +| test.rs:244:13:244:13 | d | test.rs:245:9:245:9 | d | match | +| test.rs:244:17:244:17 | a | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:17:244:17 | a | test.rs:244:23:244:23 | b | false | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:35:244:35 | c | false | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:244:17:244:35 | ... \|\| ... | true | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:13:244:13 | d | | +| test.rs:244:23:244:23 | b | test.rs:244:28:244:29 | 28 | | +| test.rs:244:23:244:29 | ... == ... | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:244:23:244:29 | ... == ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:244:28:244:29 | 28 | test.rs:244:23:244:29 | ... == ... | | +| test.rs:244:35:244:35 | c | test.rs:244:17:244:35 | ... \|\| ... | | +| test.rs:245:9:245:9 | d | test.rs:243:61:246:5 | BlockExpr | | +| test.rs:248:5:251:5 | enter test_not_operator | test.rs:248:26:248:26 | a | | +| test.rs:248:5:251:5 | exit test_not_operator (normal) | test.rs:248:5:251:5 | exit test_not_operator | | +| test.rs:248:26:248:26 | a | test.rs:248:26:248:32 | Param | match | +| test.rs:248:26:248:32 | Param | test.rs:249:9:249:19 | LetStmt | | +| test.rs:248:43:251:5 | BlockExpr | test.rs:248:5:251:5 | exit test_not_operator (normal) | | +| test.rs:249:9:249:19 | LetStmt | test.rs:249:18:249:18 | a | | +| test.rs:249:13:249:13 | d | test.rs:250:9:250:9 | d | match | +| test.rs:249:17:249:18 | ! ... | test.rs:249:13:249:13 | d | | +| test.rs:249:18:249:18 | a | test.rs:249:17:249:18 | ! ... | | +| test.rs:250:9:250:9 | d | test.rs:248:43:251:5 | BlockExpr | | +| test.rs:253:5:259:5 | enter test_if_and_operator | test.rs:253:29:253:29 | a | | +| test.rs:253:5:259:5 | exit test_if_and_operator (normal) | test.rs:253:5:259:5 | exit test_if_and_operator | | +| test.rs:253:29:253:29 | a | test.rs:253:29:253:35 | Param | match | +| test.rs:253:29:253:35 | Param | test.rs:253:38:253:38 | b | | +| test.rs:253:38:253:38 | b | test.rs:253:38:253:44 | Param | match | +| test.rs:253:38:253:44 | Param | test.rs:253:47:253:47 | c | | +| test.rs:253:47:253:47 | c | test.rs:253:47:253:53 | Param | match | +| test.rs:253:47:253:53 | Param | test.rs:254:12:254:12 | a | | +| test.rs:253:64:259:5 | BlockExpr | test.rs:253:5:259:5 | exit test_if_and_operator (normal) | | +| test.rs:254:9:258:9 | IfExpr | test.rs:253:64:259:5 | BlockExpr | | +| test.rs:254:12:254:12 | a | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | +| test.rs:254:12:254:12 | a | test.rs:254:17:254:17 | b | true | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:22:254:22 | c | true | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:257:13:257:17 | false | false | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | true | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:254:24:256:9 | BlockExpr | test.rs:254:9:258:9 | IfExpr | | +| test.rs:255:13:255:16 | true | test.rs:254:24:256:9 | BlockExpr | | +| test.rs:256:16:258:9 | BlockExpr | test.rs:254:9:258:9 | IfExpr | | +| test.rs:257:13:257:17 | false | test.rs:256:16:258:9 | BlockExpr | | +| test.rs:261:5:267:5 | enter test_if_or_operator | test.rs:261:28:261:28 | a | | +| test.rs:261:5:267:5 | exit test_if_or_operator (normal) | test.rs:261:5:267:5 | exit test_if_or_operator | | +| test.rs:261:28:261:28 | a | test.rs:261:28:261:34 | Param | match | +| test.rs:261:28:261:34 | Param | test.rs:261:37:261:37 | b | | +| test.rs:261:37:261:37 | b | test.rs:261:37:261:43 | Param | match | +| test.rs:261:37:261:43 | Param | test.rs:261:46:261:46 | c | | +| test.rs:261:46:261:46 | c | test.rs:261:46:261:52 | Param | match | +| test.rs:261:46:261:52 | Param | test.rs:262:12:262:12 | a | | +| test.rs:261:63:267:5 | BlockExpr | test.rs:261:5:267:5 | exit test_if_or_operator (normal) | | +| test.rs:262:9:266:9 | IfExpr | test.rs:261:63:267:5 | BlockExpr | | +| test.rs:262:12:262:12 | a | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:12:262:12 | a | test.rs:262:17:262:17 | b | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | false | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | false | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:263:13:263:16 | true | true | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:24:264:9 | BlockExpr | test.rs:262:9:266:9 | IfExpr | | +| test.rs:263:13:263:16 | true | test.rs:262:24:264:9 | BlockExpr | | +| test.rs:264:16:266:9 | BlockExpr | test.rs:262:9:266:9 | IfExpr | | +| test.rs:265:13:265:17 | false | test.rs:264:16:266:9 | BlockExpr | | +| test.rs:269:5:275:5 | enter test_if_not_operator | test.rs:269:29:269:29 | a | | +| test.rs:269:5:275:5 | exit test_if_not_operator (normal) | test.rs:269:5:275:5 | exit test_if_not_operator | | +| test.rs:269:29:269:29 | a | test.rs:269:29:269:35 | Param | match | +| test.rs:269:29:269:35 | Param | test.rs:270:13:270:13 | a | | +| test.rs:269:46:275:5 | BlockExpr | test.rs:269:5:275:5 | exit test_if_not_operator (normal) | | +| test.rs:270:9:274:9 | IfExpr | test.rs:269:46:275:5 | BlockExpr | | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | true | +| test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(false)] ! ... | true | +| test.rs:270:13:270:13 | a | test.rs:270:12:270:13 | [boolean(true)] ! ... | false | +| test.rs:270:15:272:9 | BlockExpr | test.rs:270:9:274:9 | IfExpr | | +| test.rs:271:13:271:16 | true | test.rs:270:15:272:9 | BlockExpr | | +| test.rs:272:16:274:9 | BlockExpr | test.rs:270:9:274:9 | IfExpr | | +| test.rs:273:13:273:17 | false | test.rs:272:16:274:9 | BlockExpr | | +| test.rs:277:5:279:5 | enter test_and_return | test.rs:277:24:277:24 | a | | +| test.rs:277:5:279:5 | exit test_and_return (normal) | test.rs:277:5:279:5 | exit test_and_return | | +| test.rs:277:24:277:24 | a | test.rs:277:24:277:30 | Param | match | +| test.rs:277:24:277:30 | Param | test.rs:278:9:278:20 | ExprStmt | | +| test.rs:277:33:279:5 | BlockExpr | test.rs:277:5:279:5 | exit test_and_return (normal) | | +| test.rs:278:9:278:9 | a | test.rs:278:9:278:19 | ... && ... | false | +| test.rs:278:9:278:9 | a | test.rs:278:14:278:19 | ReturnExpr | true | +| test.rs:278:9:278:19 | ... && ... | test.rs:277:33:279:5 | BlockExpr | | +| test.rs:278:9:278:20 | ExprStmt | test.rs:278:9:278:9 | a | | +| test.rs:278:14:278:19 | ReturnExpr | test.rs:277:5:279:5 | exit test_and_return (normal) | return | +| test.rs:285:5:287:5 | enter test_question_mark_operator_1 | test.rs:285:38:285:38 | s | | +| test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | test.rs:285:5:287:5 | exit test_question_mark_operator_1 | | +| test.rs:285:38:285:38 | s | test.rs:285:38:285:44 | Param | match | +| test.rs:285:38:285:44 | Param | test.rs:286:9:286:10 | Ok | | +| test.rs:285:87:287:5 | BlockExpr | test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | | +| test.rs:286:9:286:10 | Ok | test.rs:286:12:286:12 | s | | +| test.rs:286:9:286:33 | CallExpr | test.rs:285:87:287:5 | BlockExpr | | +| test.rs:286:12:286:12 | s | test.rs:286:12:286:27 | ... .parse(...) | | +| test.rs:286:12:286:27 | ... .parse(...) | test.rs:286:12:286:28 | TryExpr | | +| test.rs:286:12:286:28 | TryExpr | test.rs:285:5:287:5 | exit test_question_mark_operator_1 (normal) | return | +| test.rs:286:12:286:28 | TryExpr | test.rs:286:32:286:32 | 4 | match | +| test.rs:286:12:286:32 | ... + ... | test.rs:286:9:286:33 | CallExpr | | +| test.rs:286:32:286:32 | 4 | test.rs:286:12:286:32 | ... + ... | | +| test.rs:289:5:294:5 | enter test_question_mark_operator_2 | test.rs:289:38:289:38 | b | | +| test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | test.rs:289:5:294:5 | exit test_question_mark_operator_2 | | +| test.rs:289:38:289:38 | b | test.rs:289:38:289:52 | Param | match | +| test.rs:289:38:289:52 | Param | test.rs:290:15:290:15 | b | | +| test.rs:289:71:294:5 | BlockExpr | test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | | +| test.rs:290:9:293:9 | MatchExpr | test.rs:289:71:294:5 | BlockExpr | | +| test.rs:290:15:290:15 | b | test.rs:290:15:290:16 | TryExpr | | +| test.rs:290:15:290:16 | TryExpr | test.rs:289:5:294:5 | exit test_question_mark_operator_2 (normal) | return | +| test.rs:290:15:290:16 | TryExpr | test.rs:291:13:291:16 | true | match | +| test.rs:291:13:291:16 | LiteralPat | test.rs:291:21:291:24 | Some | match | +| test.rs:291:13:291:16 | LiteralPat | test.rs:292:13:292:17 | false | no-match | +| test.rs:291:13:291:16 | true | test.rs:291:13:291:16 | LiteralPat | | +| test.rs:291:21:291:24 | Some | test.rs:291:26:291:30 | false | | +| test.rs:291:21:291:31 | CallExpr | test.rs:290:9:293:9 | MatchExpr | | +| test.rs:291:26:291:30 | false | test.rs:291:21:291:31 | CallExpr | | +| test.rs:292:13:292:17 | LiteralPat | test.rs:292:22:292:25 | Some | match | +| test.rs:292:13:292:17 | false | test.rs:292:13:292:17 | LiteralPat | | +| test.rs:292:22:292:25 | Some | test.rs:292:27:292:30 | true | | +| test.rs:292:22:292:31 | CallExpr | test.rs:290:9:293:9 | MatchExpr | | +| test.rs:292:27:292:30 | true | test.rs:292:22:292:31 | CallExpr | | +| test.rs:300:5:306:5 | enter test_match | test.rs:300:19:300:29 | maybe_digit | | +| test.rs:300:5:306:5 | exit test_match (normal) | test.rs:300:5:306:5 | exit test_match | | +| test.rs:300:19:300:29 | maybe_digit | test.rs:300:19:300:42 | Param | match | +| test.rs:300:19:300:42 | Param | test.rs:301:15:301:25 | maybe_digit | | +| test.rs:300:52:306:5 | BlockExpr | test.rs:300:5:306:5 | exit test_match (normal) | | +| test.rs:301:9:305:9 | MatchExpr | test.rs:300:52:306:5 | BlockExpr | | +| test.rs:301:15:301:25 | maybe_digit | test.rs:302:13:302:27 | TupleStructPat | | +| test.rs:302:13:302:27 | TupleStructPat | test.rs:302:26:302:26 | x | match | +| test.rs:302:13:302:27 | TupleStructPat | test.rs:303:13:303:27 | TupleStructPat | no-match | +| test.rs:302:26:302:26 | x | test.rs:302:32:302:32 | x | match | +| test.rs:302:32:302:32 | x | test.rs:302:36:302:37 | 10 | | +| test.rs:302:32:302:37 | ... < ... | test.rs:302:42:302:42 | x | true | +| test.rs:302:32:302:37 | ... < ... | test.rs:303:13:303:27 | TupleStructPat | false | +| test.rs:302:36:302:37 | 10 | test.rs:302:32:302:37 | ... < ... | | +| test.rs:302:42:302:42 | x | test.rs:302:46:302:46 | 5 | | +| test.rs:302:42:302:46 | ... + ... | test.rs:301:9:305:9 | MatchExpr | | +| test.rs:302:46:302:46 | 5 | test.rs:302:42:302:46 | ... + ... | | +| test.rs:303:13:303:27 | TupleStructPat | test.rs:303:26:303:26 | x | match | +| test.rs:303:13:303:27 | TupleStructPat | test.rs:304:13:304:24 | PathPat | no-match | +| test.rs:303:26:303:26 | x | test.rs:303:32:303:32 | x | match | +| test.rs:303:32:303:32 | x | test.rs:301:9:305:9 | MatchExpr | | +| test.rs:304:13:304:24 | PathPat | test.rs:304:29:304:29 | 5 | match | +| test.rs:304:29:304:29 | 5 | test.rs:301:9:305:9 | MatchExpr | | +| test.rs:308:5:317:5 | enter test_match_with_return_in_scrutinee | test.rs:308:44:308:54 | maybe_digit | | +| test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee | | +| test.rs:308:44:308:54 | maybe_digit | test.rs:308:44:308:67 | Param | match | +| test.rs:308:44:308:67 | Param | test.rs:309:19:309:29 | maybe_digit | | +| test.rs:308:77:317:5 | BlockExpr | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | | +| test.rs:309:9:316:9 | MatchExpr | test.rs:308:77:317:5 | BlockExpr | | +| test.rs:309:16:313:9 | IfExpr | test.rs:314:13:314:27 | TupleStructPat | | +| test.rs:309:19:309:29 | maybe_digit | test.rs:309:34:309:37 | Some | | +| test.rs:309:19:309:40 | ... == ... | test.rs:310:13:310:21 | ExprStmt | true | +| test.rs:309:19:309:40 | ... == ... | test.rs:312:13:312:23 | maybe_digit | false | +| test.rs:309:34:309:37 | Some | test.rs:309:39:309:39 | 3 | | +| test.rs:309:34:309:40 | CallExpr | test.rs:309:19:309:40 | ... == ... | | +| test.rs:309:39:309:39 | 3 | test.rs:309:34:309:40 | CallExpr | | +| test.rs:310:13:310:20 | ReturnExpr | test.rs:308:5:317:5 | exit test_match_with_return_in_scrutinee (normal) | return | +| test.rs:310:13:310:21 | ExprStmt | test.rs:310:20:310:20 | 3 | | +| test.rs:310:20:310:20 | 3 | test.rs:310:13:310:20 | ReturnExpr | | +| test.rs:311:16:313:9 | BlockExpr | test.rs:309:16:313:9 | IfExpr | | +| test.rs:312:13:312:23 | maybe_digit | test.rs:311:16:313:9 | BlockExpr | | +| test.rs:314:13:314:27 | TupleStructPat | test.rs:314:26:314:26 | x | match | +| test.rs:314:13:314:27 | TupleStructPat | test.rs:315:13:315:24 | PathPat | no-match | +| test.rs:314:26:314:26 | x | test.rs:314:32:314:32 | x | match | +| test.rs:314:32:314:32 | x | test.rs:314:36:314:36 | 5 | | +| test.rs:314:32:314:36 | ... + ... | test.rs:309:9:316:9 | MatchExpr | | +| test.rs:314:36:314:36 | 5 | test.rs:314:32:314:36 | ... + ... | | +| test.rs:315:13:315:24 | PathPat | test.rs:315:29:315:29 | 5 | match | +| test.rs:315:29:315:29 | 5 | test.rs:309:9:316:9 | MatchExpr | | +| test.rs:319:5:324:5 | enter test_match_and | test.rs:319:23:319:26 | cond | | +| test.rs:319:5:324:5 | exit test_match_and (normal) | test.rs:319:5:324:5 | exit test_match_and | | +| test.rs:319:23:319:26 | cond | test.rs:319:23:319:32 | Param | match | +| test.rs:319:23:319:32 | Param | test.rs:319:35:319:35 | r | | +| test.rs:319:35:319:35 | r | test.rs:319:35:319:49 | Param | match | +| test.rs:319:35:319:49 | Param | test.rs:320:16:320:16 | r | | +| test.rs:319:60:324:5 | BlockExpr | test.rs:319:5:324:5 | exit test_match_and (normal) | | +| test.rs:320:9:323:18 | ... && ... | test.rs:319:60:324:5 | BlockExpr | | +| test.rs:320:10:323:9 | [boolean(false)] MatchExpr | test.rs:320:9:323:18 | ... && ... | false | +| test.rs:320:10:323:9 | [boolean(true)] MatchExpr | test.rs:323:15:323:18 | cond | true | +| test.rs:320:16:320:16 | r | test.rs:321:13:321:19 | TupleStructPat | | +| test.rs:321:13:321:19 | TupleStructPat | test.rs:321:18:321:18 | a | match | +| test.rs:321:13:321:19 | TupleStructPat | test.rs:322:13:322:13 | WildcardPat | no-match | +| test.rs:321:18:321:18 | a | test.rs:321:24:321:24 | a | match | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(false)] MatchExpr | false | +| test.rs:321:24:321:24 | a | test.rs:320:10:323:9 | [boolean(true)] MatchExpr | true | +| test.rs:322:13:322:13 | WildcardPat | test.rs:322:18:322:22 | false | match | +| test.rs:322:18:322:22 | false | test.rs:320:10:323:9 | [boolean(false)] MatchExpr | false | +| test.rs:323:15:323:18 | cond | test.rs:320:9:323:18 | ... && ... | | +| test.rs:326:5:331:5 | enter test_match_with_no_arms | test.rs:326:35:326:35 | r | | +| test.rs:326:5:331:5 | exit test_match_with_no_arms (normal) | test.rs:326:5:331:5 | exit test_match_with_no_arms | | +| test.rs:326:35:326:35 | r | test.rs:326:35:326:58 | Param | match | +| test.rs:326:35:326:58 | Param | test.rs:327:15:327:15 | r | | +| test.rs:326:66:331:5 | BlockExpr | test.rs:326:5:331:5 | exit test_match_with_no_arms (normal) | | +| test.rs:327:9:330:9 | MatchExpr | test.rs:326:66:331:5 | BlockExpr | | +| test.rs:327:15:327:15 | r | test.rs:328:13:328:21 | TupleStructPat | | +| test.rs:328:13:328:21 | TupleStructPat | test.rs:328:16:328:20 | value | match | +| test.rs:328:13:328:21 | TupleStructPat | test.rs:329:13:329:22 | TupleStructPat | no-match | +| test.rs:328:16:328:20 | value | test.rs:328:26:328:30 | value | match | +| test.rs:328:26:328:30 | value | test.rs:327:9:330:9 | MatchExpr | | +| test.rs:329:13:329:22 | TupleStructPat | test.rs:329:17:329:21 | never | match | +| test.rs:329:17:329:21 | never | test.rs:329:33:329:37 | never | match | +| test.rs:329:27:329:40 | MatchExpr | test.rs:327:9:330:9 | MatchExpr | | +| test.rs:329:33:329:37 | never | test.rs:329:27:329:40 | MatchExpr | | +| test.rs:336:5:339:5 | enter test_let_match | test.rs:336:23:336:23 | a | | +| test.rs:336:5:339:5 | exit test_let_match (normal) | test.rs:336:5:339:5 | exit test_let_match | | +| test.rs:336:23:336:23 | a | test.rs:336:23:336:36 | Param | match | +| test.rs:336:23:336:36 | Param | test.rs:337:9:337:57 | LetStmt | | +| test.rs:336:46:339:5 | BlockExpr | test.rs:336:5:339:5 | exit test_let_match (normal) | | +| test.rs:337:9:337:57 | LetStmt | test.rs:337:23:337:23 | a | | +| test.rs:337:13:337:19 | TupleStructPat | test.rs:337:18:337:18 | n | match | +| test.rs:337:13:337:19 | TupleStructPat | test.rs:337:39:337:53 | MacroStmts | no-match | +| test.rs:337:18:337:18 | n | test.rs:338:9:338:9 | n | match | +| test.rs:337:23:337:23 | a | test.rs:337:13:337:19 | TupleStructPat | | +| test.rs:337:32:337:54 | $crate::panicking::panic_fmt | test.rs:337:39:337:53 | "Expected some" | | +| test.rs:337:32:337:54 | MacroExpr | test.rs:337:30:337:56 | BlockExpr | | +| test.rs:337:39:337:53 | "Expected some" | test.rs:337:39:337:53 | FormatArgsExpr | | +| test.rs:337:39:337:53 | BlockExpr | test.rs:337:39:337:53 | MacroExpr | | +| test.rs:337:39:337:53 | CallExpr | test.rs:337:39:337:53 | BlockExpr | | +| test.rs:337:39:337:53 | ExprStmt | test.rs:337:32:337:54 | $crate::panicking::panic_fmt | | +| test.rs:337:39:337:53 | FormatArgsExpr | test.rs:337:39:337:53 | MacroExpr | | +| test.rs:337:39:337:53 | MacroExpr | test.rs:337:32:337:54 | MacroExpr | | +| test.rs:337:39:337:53 | MacroExpr | test.rs:337:39:337:53 | CallExpr | | +| test.rs:337:39:337:53 | MacroStmts | test.rs:337:39:337:53 | ExprStmt | | +| test.rs:337:39:337:53 | MacroStmts | test.rs:337:39:337:53 | MacroStmts | | +| test.rs:338:9:338:9 | n | test.rs:336:46:339:5 | BlockExpr | | +| test.rs:341:5:347:5 | enter test_let_with_return | test.rs:341:29:341:29 | m | | +| test.rs:341:5:347:5 | exit test_let_with_return (normal) | test.rs:341:5:347:5 | exit test_let_with_return | | +| test.rs:341:29:341:29 | m | test.rs:341:29:341:42 | Param | match | +| test.rs:341:29:341:42 | Param | test.rs:342:9:345:10 | LetStmt | | +| test.rs:341:53:347:5 | BlockExpr | test.rs:341:5:347:5 | exit test_let_with_return (normal) | | +| test.rs:342:9:345:10 | LetStmt | test.rs:342:25:342:25 | m | | +| test.rs:342:13:342:15 | ret | test.rs:346:9:346:12 | true | match | +| test.rs:342:19:345:9 | MatchExpr | test.rs:342:13:342:15 | ret | | +| test.rs:342:25:342:25 | m | test.rs:343:13:343:21 | TupleStructPat | | +| test.rs:343:13:343:21 | TupleStructPat | test.rs:343:18:343:20 | ret | match | +| test.rs:343:13:343:21 | TupleStructPat | test.rs:344:13:344:16 | None | no-match | +| test.rs:343:18:343:20 | ret | test.rs:343:26:343:28 | ret | match | +| test.rs:343:26:343:28 | ret | test.rs:342:19:345:9 | MatchExpr | | +| test.rs:344:13:344:16 | None | test.rs:344:28:344:32 | false | match | +| test.rs:344:21:344:32 | ReturnExpr | test.rs:341:5:347:5 | exit test_let_with_return (normal) | return | +| test.rs:344:28:344:32 | false | test.rs:344:21:344:32 | ReturnExpr | | +| test.rs:346:9:346:12 | true | test.rs:341:53:347:5 | BlockExpr | | +| test.rs:352:5:355:5 | enter empty_tuple_pattern | test.rs:352:28:352:31 | unit | | +| test.rs:352:5:355:5 | exit empty_tuple_pattern (normal) | test.rs:352:5:355:5 | exit empty_tuple_pattern | | +| test.rs:352:28:352:31 | unit | test.rs:352:28:352:35 | Param | match | +| test.rs:352:28:352:35 | Param | test.rs:353:9:353:22 | LetStmt | | +| test.rs:353:9:353:22 | LetStmt | test.rs:353:18:353:21 | unit | | +| test.rs:353:13:353:14 | TuplePat | test.rs:354:9:354:15 | ExprStmt | match | +| test.rs:353:18:353:21 | unit | test.rs:353:13:353:14 | TuplePat | | +| test.rs:354:9:354:14 | ReturnExpr | test.rs:352:5:355:5 | exit empty_tuple_pattern (normal) | return | +| test.rs:354:9:354:15 | ExprStmt | test.rs:354:9:354:14 | ReturnExpr | | +| test.rs:359:5:363:5 | enter empty_struct_pattern | test.rs:359:29:359:30 | st | | +| test.rs:359:5:363:5 | exit empty_struct_pattern (normal) | test.rs:359:5:363:5 | exit empty_struct_pattern | | +| test.rs:359:29:359:30 | st | test.rs:359:29:359:40 | Param | match | +| test.rs:359:29:359:40 | Param | test.rs:360:15:360:16 | st | | +| test.rs:359:50:363:5 | BlockExpr | test.rs:359:5:363:5 | exit empty_struct_pattern (normal) | | +| test.rs:360:9:362:9 | MatchExpr | test.rs:359:50:363:5 | BlockExpr | | +| test.rs:360:15:360:16 | st | test.rs:361:13:361:27 | RecordPat | | +| test.rs:361:13:361:27 | RecordPat | test.rs:361:24:361:25 | RestPat | match | +| test.rs:361:24:361:25 | RestPat | test.rs:361:32:361:32 | 1 | match | +| test.rs:361:32:361:32 | 1 | test.rs:360:9:362:9 | MatchExpr | | +| test.rs:365:5:372:5 | enter range_pattern | test.rs:366:15:366:16 | 42 | | +| test.rs:365:5:372:5 | exit range_pattern (normal) | test.rs:365:5:372:5 | exit range_pattern | | +| test.rs:365:31:372:5 | BlockExpr | test.rs:365:5:372:5 | exit range_pattern (normal) | | +| test.rs:366:9:371:9 | MatchExpr | test.rs:365:31:372:5 | BlockExpr | | +| test.rs:366:15:366:16 | 42 | test.rs:367:13:367:15 | RangePat | | +| test.rs:367:13:367:15 | RangePat | test.rs:367:15:367:15 | 0 | match | +| test.rs:367:13:367:15 | RangePat | test.rs:368:13:368:16 | RangePat | no-match | +| test.rs:367:15:367:15 | 0 | test.rs:367:15:367:15 | LiteralPat | | +| test.rs:367:15:367:15 | LiteralPat | test.rs:367:20:367:20 | 1 | match | +| test.rs:367:15:367:15 | LiteralPat | test.rs:368:13:368:16 | RangePat | no-match | +| test.rs:367:20:367:20 | 1 | test.rs:366:9:371:9 | MatchExpr | | +| test.rs:368:13:368:13 | 1 | test.rs:368:13:368:13 | LiteralPat | | +| test.rs:368:13:368:13 | LiteralPat | test.rs:368:16:368:16 | 2 | match | +| test.rs:368:13:368:13 | LiteralPat | test.rs:369:13:369:15 | RangePat | no-match | +| test.rs:368:13:368:16 | RangePat | test.rs:368:13:368:13 | 1 | match | +| test.rs:368:13:368:16 | RangePat | test.rs:369:13:369:15 | RangePat | no-match | +| test.rs:368:16:368:16 | 2 | test.rs:368:16:368:16 | LiteralPat | | +| test.rs:368:16:368:16 | LiteralPat | test.rs:368:21:368:21 | 2 | match | +| test.rs:368:16:368:16 | LiteralPat | test.rs:369:13:369:15 | RangePat | no-match | +| test.rs:368:21:368:21 | 2 | test.rs:366:9:371:9 | MatchExpr | | +| test.rs:369:13:369:13 | 5 | test.rs:369:13:369:13 | LiteralPat | | +| test.rs:369:13:369:13 | LiteralPat | test.rs:369:20:369:20 | 3 | match | +| test.rs:369:13:369:13 | LiteralPat | test.rs:370:13:370:13 | WildcardPat | no-match | +| test.rs:369:13:369:15 | RangePat | test.rs:369:13:369:13 | 5 | match | +| test.rs:369:13:369:15 | RangePat | test.rs:370:13:370:13 | WildcardPat | no-match | +| test.rs:369:20:369:20 | 3 | test.rs:366:9:371:9 | MatchExpr | | +| test.rs:370:13:370:13 | WildcardPat | test.rs:370:18:370:18 | 4 | match | +| test.rs:370:18:370:18 | 4 | test.rs:366:9:371:9 | MatchExpr | | +| test.rs:376:5:381:5 | enter test_infinite_loop | test.rs:377:9:379:9 | ExprStmt | | +| test.rs:377:9:379:9 | ExprStmt | test.rs:378:13:378:14 | TupleExpr | | +| test.rs:377:14:379:9 | BlockExpr | test.rs:378:13:378:14 | TupleExpr | | +| test.rs:378:13:378:14 | TupleExpr | test.rs:377:14:379:9 | BlockExpr | | +| test.rs:385:5:387:5 | enter say_hello | test.rs:386:9:386:34 | ExprStmt | | +| test.rs:385:5:387:5 | exit say_hello (normal) | test.rs:385:5:387:5 | exit say_hello | | +| test.rs:385:26:387:5 | BlockExpr | test.rs:385:5:387:5 | exit say_hello (normal) | | +| test.rs:386:9:386:33 | $crate::io::_print | test.rs:386:18:386:32 | "hello, world!\\n" | | +| test.rs:386:9:386:33 | MacroExpr | test.rs:385:26:387:5 | BlockExpr | | +| test.rs:386:9:386:34 | ExprStmt | test.rs:386:18:386:32 | MacroStmts | | +| test.rs:386:18:386:32 | "hello, world!\\n" | test.rs:386:18:386:32 | FormatArgsExpr | | +| test.rs:386:18:386:32 | BlockExpr | test.rs:386:9:386:33 | MacroExpr | | +| test.rs:386:18:386:32 | CallExpr | test.rs:386:18:386:32 | BlockExpr | | +| test.rs:386:18:386:32 | ExprStmt | test.rs:386:9:386:33 | $crate::io::_print | | +| test.rs:386:18:386:32 | FormatArgsExpr | test.rs:386:18:386:32 | MacroExpr | | +| test.rs:386:18:386:32 | MacroExpr | test.rs:386:18:386:32 | CallExpr | | +| test.rs:386:18:386:32 | MacroStmts | test.rs:386:18:386:32 | ExprStmt | | +| test.rs:389:5:408:5 | enter async_block | test.rs:389:26:389:26 | b | | +| test.rs:389:5:408:5 | exit async_block (normal) | test.rs:389:5:408:5 | exit async_block | | +| test.rs:389:26:389:26 | b | test.rs:389:26:389:32 | Param | match | +| test.rs:389:26:389:32 | Param | test.rs:390:9:392:10 | LetStmt | | +| test.rs:389:35:408:5 | BlockExpr | test.rs:389:5:408:5 | exit async_block (normal) | | +| test.rs:390:9:392:10 | LetStmt | test.rs:390:26:392:9 | BlockExpr | | +| test.rs:390:13:390:22 | say_godbye | test.rs:393:9:395:10 | LetStmt | match | +| test.rs:390:26:392:9 | BlockExpr | test.rs:390:13:390:22 | say_godbye | | +| test.rs:390:26:392:9 | enter BlockExpr | test.rs:391:13:391:42 | ExprStmt | | +| test.rs:390:26:392:9 | exit BlockExpr (normal) | test.rs:390:26:392:9 | exit BlockExpr | | +| test.rs:391:13:391:41 | $crate::io::_print | test.rs:391:22:391:40 | "godbye, everyone!\\n" | | +| test.rs:391:13:391:41 | MacroExpr | test.rs:390:26:392:9 | exit BlockExpr (normal) | | +| test.rs:391:13:391:42 | ExprStmt | test.rs:391:22:391:40 | MacroStmts | | +| test.rs:391:22:391:40 | "godbye, everyone!\\n" | test.rs:391:22:391:40 | FormatArgsExpr | | +| test.rs:391:22:391:40 | BlockExpr | test.rs:391:13:391:41 | MacroExpr | | +| test.rs:391:22:391:40 | CallExpr | test.rs:391:22:391:40 | BlockExpr | | +| test.rs:391:22:391:40 | ExprStmt | test.rs:391:13:391:41 | $crate::io::_print | | +| test.rs:391:22:391:40 | FormatArgsExpr | test.rs:391:22:391:40 | MacroExpr | | +| test.rs:391:22:391:40 | MacroExpr | test.rs:391:22:391:40 | CallExpr | | +| test.rs:391:22:391:40 | MacroStmts | test.rs:391:22:391:40 | ExprStmt | | +| test.rs:393:9:395:10 | LetStmt | test.rs:393:31:395:9 | BlockExpr | | +| test.rs:393:13:393:27 | say_how_are_you | test.rs:396:9:396:28 | LetStmt | match | +| test.rs:393:31:395:9 | BlockExpr | test.rs:393:13:393:27 | say_how_are_you | | +| test.rs:393:31:395:9 | enter BlockExpr | test.rs:394:13:394:37 | ExprStmt | | +| test.rs:393:31:395:9 | exit BlockExpr (normal) | test.rs:393:31:395:9 | exit BlockExpr | | +| test.rs:394:13:394:36 | $crate::io::_print | test.rs:394:22:394:35 | "how are you?\\n" | | +| test.rs:394:13:394:36 | MacroExpr | test.rs:393:31:395:9 | exit BlockExpr (normal) | | +| test.rs:394:13:394:37 | ExprStmt | test.rs:394:22:394:35 | MacroStmts | | +| test.rs:394:22:394:35 | "how are you?\\n" | test.rs:394:22:394:35 | FormatArgsExpr | | +| test.rs:394:22:394:35 | BlockExpr | test.rs:394:13:394:36 | MacroExpr | | +| test.rs:394:22:394:35 | CallExpr | test.rs:394:22:394:35 | BlockExpr | | +| test.rs:394:22:394:35 | ExprStmt | test.rs:394:13:394:36 | $crate::io::_print | | +| test.rs:394:22:394:35 | FormatArgsExpr | test.rs:394:22:394:35 | MacroExpr | | +| test.rs:394:22:394:35 | MacroExpr | test.rs:394:22:394:35 | CallExpr | | +| test.rs:394:22:394:35 | MacroStmts | test.rs:394:22:394:35 | ExprStmt | | +| test.rs:396:9:396:28 | LetStmt | test.rs:396:20:396:27 | BlockExpr | | +| test.rs:396:13:396:16 | noop | test.rs:397:9:397:26 | ExprStmt | match | +| test.rs:396:20:396:27 | BlockExpr | test.rs:396:13:396:16 | noop | | +| test.rs:397:9:397:17 | say_hello | test.rs:397:9:397:19 | CallExpr | | +| test.rs:397:9:397:19 | CallExpr | test.rs:397:9:397:25 | AwaitExpr | | +| test.rs:397:9:397:25 | AwaitExpr | test.rs:398:9:398:30 | ExprStmt | | +| test.rs:397:9:397:26 | ExprStmt | test.rs:397:9:397:17 | say_hello | | +| test.rs:398:9:398:23 | say_how_are_you | test.rs:398:9:398:29 | AwaitExpr | | +| test.rs:398:9:398:29 | AwaitExpr | test.rs:399:9:399:25 | ExprStmt | | +| test.rs:398:9:398:30 | ExprStmt | test.rs:398:9:398:23 | say_how_are_you | | +| test.rs:399:9:399:18 | say_godbye | test.rs:399:9:399:24 | AwaitExpr | | +| test.rs:399:9:399:24 | AwaitExpr | test.rs:400:9:400:19 | ExprStmt | | +| test.rs:399:9:399:25 | ExprStmt | test.rs:399:9:399:18 | say_godbye | | +| test.rs:400:9:400:12 | noop | test.rs:400:9:400:18 | AwaitExpr | | +| test.rs:400:9:400:18 | AwaitExpr | test.rs:402:9:407:10 | LetStmt | | +| test.rs:400:9:400:19 | ExprStmt | test.rs:400:9:400:12 | noop | | +| test.rs:402:9:407:10 | LetStmt | test.rs:402:22:407:9 | ClosureExpr | | +| test.rs:402:13:402:18 | lambda | test.rs:389:35:408:5 | BlockExpr | match | +| test.rs:402:22:407:9 | ClosureExpr | test.rs:402:13:402:18 | lambda | | +| test.rs:402:22:407:9 | enter ClosureExpr | test.rs:402:23:402:25 | foo | | +| test.rs:402:22:407:9 | exit ClosureExpr (normal) | test.rs:402:22:407:9 | exit ClosureExpr | | +| test.rs:402:23:402:25 | Param | test.rs:402:28:407:9 | BlockExpr | | +| test.rs:402:23:402:25 | foo | test.rs:402:23:402:25 | Param | match | +| test.rs:402:28:407:9 | BlockExpr | test.rs:402:22:407:9 | exit ClosureExpr (normal) | | +| test.rs:402:28:407:9 | enter BlockExpr | test.rs:403:13:405:14 | ExprStmt | | +| test.rs:402:28:407:9 | exit BlockExpr (normal) | test.rs:402:28:407:9 | exit BlockExpr | | +| test.rs:403:13:405:13 | IfExpr | test.rs:406:13:406:15 | foo | | +| test.rs:403:13:405:14 | ExprStmt | test.rs:403:16:403:16 | b | | +| test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | IfExpr | false | +| test.rs:403:16:403:16 | b | test.rs:404:17:404:41 | ExprStmt | true | +| test.rs:404:17:404:41 | ExprStmt | test.rs:404:24:404:34 | async_block | | +| test.rs:404:24:404:34 | async_block | test.rs:404:36:404:39 | true | | +| test.rs:404:24:404:40 | CallExpr | test.rs:404:17:404:40 | ReturnExpr | | +| test.rs:404:36:404:39 | true | test.rs:404:24:404:40 | CallExpr | | +| test.rs:406:13:406:15 | foo | test.rs:402:28:407:9 | exit BlockExpr (normal) | | +| test.rs:414:5:416:5 | enter add_two | test.rs:414:22:414:22 | n | | +| test.rs:414:5:416:5 | exit add_two (normal) | test.rs:414:5:416:5 | exit add_two | | +| test.rs:414:22:414:22 | n | test.rs:414:22:414:27 | Param | match | +| test.rs:414:22:414:27 | Param | test.rs:415:9:415:9 | n | | +| test.rs:414:37:416:5 | BlockExpr | test.rs:414:5:416:5 | exit add_two (normal) | | +| test.rs:415:9:415:9 | n | test.rs:415:13:415:13 | 2 | | +| test.rs:415:9:415:13 | ... + ... | test.rs:414:37:416:5 | BlockExpr | | +| test.rs:415:13:415:13 | 2 | test.rs:415:9:415:13 | ... + ... | | +| test.rs:420:5:428:5 | enter const_block_assert | test.rs:423:9:425:9 | ExprStmt | | +| test.rs:420:5:428:5 | exit const_block_assert (normal) | test.rs:420:5:428:5 | exit const_block_assert | | +| test.rs:420:41:428:5 | BlockExpr | test.rs:420:5:428:5 | exit const_block_assert (normal) | | +| test.rs:423:9:425:9 | BlockExpr | test.rs:427:9:427:10 | 42 | | +| test.rs:423:9:425:9 | ExprStmt | test.rs:424:13:424:50 | ExprStmt | | +| test.rs:424:13:424:49 | $crate::panicking::panic_explicit | test.rs:424:13:424:49 | CallExpr | | +| test.rs:424:13:424:49 | BlockExpr | test.rs:424:13:424:49 | MacroExpr | | +| test.rs:424:13:424:49 | BlockExpr | test.rs:424:13:424:49 | exit panic_cold_explicit (normal) | | +| test.rs:424:13:424:49 | BlockExpr | test.rs:424:21:424:48 | IfExpr | | +| test.rs:424:13:424:49 | CallExpr | test.rs:424:13:424:49 | BlockExpr | | +| test.rs:424:13:424:49 | CallExpr | test.rs:424:13:424:49 | BlockExpr | | +| test.rs:424:13:424:49 | ExprStmt | test.rs:424:13:424:49 | MacroStmts | | +| test.rs:424:13:424:49 | ExprStmt | test.rs:424:13:424:49 | panic_cold_explicit | | +| test.rs:424:13:424:49 | MacroExpr | test.rs:423:9:425:9 | BlockExpr | | +| test.rs:424:13:424:49 | MacroExpr | test.rs:424:13:424:49 | BlockExpr | | +| test.rs:424:13:424:49 | MacroStmts | test.rs:424:13:424:49 | panic_cold_explicit | | +| test.rs:424:13:424:49 | enter panic_cold_explicit | test.rs:424:13:424:49 | $crate::panicking::panic_explicit | | +| test.rs:424:13:424:49 | exit panic_cold_explicit (normal) | test.rs:424:13:424:49 | exit panic_cold_explicit | | +| test.rs:424:13:424:49 | panic_cold_explicit | test.rs:424:13:424:49 | CallExpr | | +| test.rs:424:13:424:49 | panic_cold_explicit | test.rs:424:13:424:49 | ExprStmt | | +| test.rs:424:13:424:50 | ExprStmt | test.rs:424:21:424:48 | MacroStmts | | +| test.rs:424:21:424:42 | std::mem::size_of::<...> | test.rs:424:21:424:44 | CallExpr | | +| test.rs:424:21:424:44 | CallExpr | test.rs:424:48:424:48 | 0 | | +| test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(false)] ! ... | true | +| test.rs:424:21:424:48 | ... > ... | test.rs:424:21:424:48 | [boolean(true)] ! ... | false | +| test.rs:424:21:424:48 | BlockExpr | test.rs:424:13:424:49 | MacroExpr | | +| test.rs:424:21:424:48 | IfExpr | test.rs:424:21:424:48 | BlockExpr | | +| test.rs:424:21:424:48 | MacroStmts | test.rs:424:21:424:42 | std::mem::size_of::<...> | | +| test.rs:424:21:424:48 | [boolean(false)] ! ... | test.rs:424:21:424:48 | IfExpr | false | +| test.rs:424:21:424:48 | [boolean(true)] ! ... | test.rs:424:13:424:49 | ExprStmt | true | +| test.rs:424:48:424:48 | 0 | test.rs:424:21:424:48 | ... > ... | | +| test.rs:427:9:427:10 | 42 | test.rs:420:41:428:5 | BlockExpr | | +| test.rs:430:5:439:5 | enter const_block_panic | test.rs:431:9:431:30 | Const | | +| test.rs:430:5:439:5 | exit const_block_panic (normal) | test.rs:430:5:439:5 | exit const_block_panic | | +| test.rs:430:35:439:5 | BlockExpr | test.rs:430:5:439:5 | exit const_block_panic (normal) | | +| test.rs:431:9:431:30 | Const | test.rs:432:9:437:9 | ExprStmt | | +| test.rs:432:9:437:9 | ExprStmt | test.rs:432:12:432:16 | false | | +| test.rs:432:9:437:9 | IfExpr | test.rs:438:9:438:9 | N | | +| test.rs:432:12:432:16 | false | test.rs:432:9:437:9 | IfExpr | false | +| test.rs:435:17:435:24 | $crate::panicking::panic_explicit | test.rs:435:17:435:24 | CallExpr | | +| test.rs:435:17:435:24 | BlockExpr | test.rs:435:17:435:24 | exit panic_cold_explicit (normal) | | +| test.rs:435:17:435:24 | CallExpr | test.rs:435:17:435:24 | BlockExpr | | +| test.rs:435:17:435:24 | enter panic_cold_explicit | test.rs:435:17:435:24 | $crate::panicking::panic_explicit | | +| test.rs:435:17:435:24 | exit panic_cold_explicit (normal) | test.rs:435:17:435:24 | exit panic_cold_explicit | | +| test.rs:438:9:438:9 | N | test.rs:430:35:439:5 | BlockExpr | | +| test.rs:442:1:447:1 | enter dead_code | test.rs:443:5:445:5 | ExprStmt | | +| test.rs:442:1:447:1 | exit dead_code (normal) | test.rs:442:1:447:1 | exit dead_code | | +| test.rs:443:5:445:5 | ExprStmt | test.rs:443:9:443:12 | true | | +| test.rs:443:9:443:12 | true | test.rs:444:9:444:17 | ExprStmt | true | +| test.rs:444:9:444:16 | ReturnExpr | test.rs:442:1:447:1 | exit dead_code (normal) | return | +| test.rs:444:9:444:17 | ExprStmt | test.rs:444:16:444:16 | 0 | | +| test.rs:444:16:444:16 | 0 | test.rs:444:9:444:16 | ReturnExpr | | +| test.rs:449:1:449:16 | enter do_thing | test.rs:449:15:449:16 | BlockExpr | | +| test.rs:449:1:449:16 | exit do_thing (normal) | test.rs:449:1:449:16 | exit do_thing | | +| test.rs:449:15:449:16 | BlockExpr | test.rs:449:1:449:16 | exit do_thing (normal) | | +| test.rs:451:1:453:1 | enter condition_not_met | test.rs:452:5:452:9 | false | | +| test.rs:451:1:453:1 | exit condition_not_met (normal) | test.rs:451:1:453:1 | exit condition_not_met | | +| test.rs:451:32:453:1 | BlockExpr | test.rs:451:1:453:1 | exit condition_not_met (normal) | | +| test.rs:452:5:452:9 | false | test.rs:451:32:453:1 | BlockExpr | | +| test.rs:455:1:455:21 | enter do_next_thing | test.rs:455:20:455:21 | BlockExpr | | +| test.rs:455:1:455:21 | exit do_next_thing (normal) | test.rs:455:1:455:21 | exit do_next_thing | | +| test.rs:455:20:455:21 | BlockExpr | test.rs:455:1:455:21 | exit do_next_thing (normal) | | +| test.rs:457:1:457:21 | enter do_last_thing | test.rs:457:20:457:21 | BlockExpr | | +| test.rs:457:1:457:21 | exit do_last_thing (normal) | test.rs:457:1:457:21 | exit do_last_thing | | +| test.rs:457:20:457:21 | BlockExpr | test.rs:457:1:457:21 | exit do_last_thing (normal) | | +| test.rs:459:1:473:1 | enter labelled_block1 | test.rs:460:5:471:6 | LetStmt | | +| test.rs:459:1:473:1 | exit labelled_block1 (normal) | test.rs:459:1:473:1 | exit labelled_block1 | | +| test.rs:459:29:473:1 | BlockExpr | test.rs:459:1:473:1 | exit labelled_block1 (normal) | | +| test.rs:460:5:471:6 | LetStmt | test.rs:461:9:461:19 | ExprStmt | | +| test.rs:460:9:460:14 | result | test.rs:472:5:472:10 | result | match | +| test.rs:460:18:471:5 | BlockExpr | test.rs:460:9:460:14 | result | | +| test.rs:461:9:461:16 | do_thing | test.rs:461:9:461:18 | CallExpr | | +| test.rs:461:9:461:18 | CallExpr | test.rs:462:9:464:9 | ExprStmt | | +| test.rs:461:9:461:19 | ExprStmt | test.rs:461:9:461:16 | do_thing | | +| test.rs:462:9:464:9 | ExprStmt | test.rs:462:12:462:28 | condition_not_met | | +| test.rs:462:9:464:9 | IfExpr | test.rs:465:9:465:24 | ExprStmt | | +| test.rs:462:12:462:28 | condition_not_met | test.rs:462:12:462:30 | CallExpr | | +| test.rs:462:12:462:30 | CallExpr | test.rs:462:9:464:9 | IfExpr | false | +| test.rs:462:12:462:30 | CallExpr | test.rs:463:13:463:27 | ExprStmt | true | +| test.rs:463:13:463:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | break | +| test.rs:463:13:463:27 | ExprStmt | test.rs:463:26:463:26 | 1 | | +| test.rs:463:26:463:26 | 1 | test.rs:463:13:463:26 | BreakExpr | | +| test.rs:465:9:465:21 | do_next_thing | test.rs:465:9:465:23 | CallExpr | | +| test.rs:465:9:465:23 | CallExpr | test.rs:466:9:468:9 | ExprStmt | | +| test.rs:465:9:465:24 | ExprStmt | test.rs:465:9:465:21 | do_next_thing | | +| test.rs:466:9:468:9 | ExprStmt | test.rs:466:12:466:28 | condition_not_met | | +| test.rs:466:9:468:9 | IfExpr | test.rs:469:9:469:24 | ExprStmt | | +| test.rs:466:12:466:28 | condition_not_met | test.rs:466:12:466:30 | CallExpr | | +| test.rs:466:12:466:30 | CallExpr | test.rs:466:9:468:9 | IfExpr | false | +| test.rs:466:12:466:30 | CallExpr | test.rs:467:13:467:27 | ExprStmt | true | +| test.rs:467:13:467:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | break | +| test.rs:467:13:467:27 | ExprStmt | test.rs:467:26:467:26 | 2 | | +| test.rs:467:26:467:26 | 2 | test.rs:467:13:467:26 | BreakExpr | | +| test.rs:469:9:469:21 | do_last_thing | test.rs:469:9:469:23 | CallExpr | | +| test.rs:469:9:469:23 | CallExpr | test.rs:470:9:470:9 | 3 | | +| test.rs:469:9:469:24 | ExprStmt | test.rs:469:9:469:21 | do_last_thing | | +| test.rs:470:9:470:9 | 3 | test.rs:460:18:471:5 | BlockExpr | | +| test.rs:472:5:472:10 | result | test.rs:459:29:473:1 | BlockExpr | | +| test.rs:475:1:483:1 | enter labelled_block2 | test.rs:476:5:482:6 | LetStmt | | +| test.rs:475:1:483:1 | exit labelled_block2 (normal) | test.rs:475:1:483:1 | exit labelled_block2 | | +| test.rs:475:22:483:1 | BlockExpr | test.rs:475:1:483:1 | exit labelled_block2 (normal) | | +| test.rs:476:5:482:6 | LetStmt | test.rs:477:9:477:34 | LetStmt | | +| test.rs:476:9:476:14 | result | test.rs:475:22:483:1 | BlockExpr | match | +| test.rs:476:18:482:5 | BlockExpr | test.rs:476:9:476:14 | result | | +| test.rs:477:9:477:34 | LetStmt | test.rs:477:30:477:33 | None | | +| test.rs:477:13:477:13 | x | test.rs:478:9:480:10 | LetStmt | match | +| test.rs:477:30:477:33 | None | test.rs:477:13:477:13 | x | | +| test.rs:478:9:480:10 | LetStmt | test.rs:478:23:478:23 | x | | +| test.rs:478:13:478:19 | TupleStructPat | test.rs:478:18:478:18 | y | match | +| test.rs:478:13:478:19 | TupleStructPat | test.rs:479:13:479:27 | ExprStmt | no-match | +| test.rs:478:18:478:18 | y | test.rs:481:9:481:9 | 0 | match | +| test.rs:478:23:478:23 | x | test.rs:478:13:478:19 | TupleStructPat | | +| test.rs:479:13:479:26 | BreakExpr | test.rs:476:18:482:5 | BlockExpr | break | +| test.rs:479:13:479:27 | ExprStmt | test.rs:479:26:479:26 | 1 | | +| test.rs:479:26:479:26 | 1 | test.rs:479:13:479:26 | BreakExpr | | +| test.rs:481:9:481:9 | 0 | test.rs:476:18:482:5 | BlockExpr | | +| test.rs:485:1:491:1 | enter test_nested_function2 | test.rs:486:5:486:18 | LetStmt | | +| test.rs:485:1:491:1 | exit test_nested_function2 (normal) | test.rs:485:1:491:1 | exit test_nested_function2 | | +| test.rs:485:28:491:1 | BlockExpr | test.rs:485:1:491:1 | exit test_nested_function2 (normal) | | +| test.rs:486:5:486:18 | LetStmt | test.rs:486:17:486:17 | 0 | | +| test.rs:486:9:486:13 | x | test.rs:487:5:489:5 | nested | match | +| test.rs:486:17:486:17 | 0 | test.rs:486:9:486:13 | x | | +| test.rs:487:5:489:5 | enter nested | test.rs:487:15:487:15 | x | | +| test.rs:487:5:489:5 | exit nested (normal) | test.rs:487:5:489:5 | exit nested | | +| test.rs:487:5:489:5 | nested | test.rs:490:5:490:19 | ExprStmt | | +| test.rs:487:15:487:15 | x | test.rs:487:15:487:25 | Param | match | +| test.rs:487:15:487:25 | Param | test.rs:488:9:488:16 | ExprStmt | | +| test.rs:487:28:489:5 | BlockExpr | test.rs:487:5:489:5 | exit nested (normal) | | +| test.rs:488:9:488:10 | * ... | test.rs:488:15:488:15 | 1 | | +| test.rs:488:9:488:15 | ... += ... | test.rs:487:28:489:5 | BlockExpr | | +| test.rs:488:9:488:16 | ExprStmt | test.rs:488:10:488:10 | x | | +| test.rs:488:10:488:10 | x | test.rs:488:9:488:10 | * ... | | +| test.rs:488:15:488:15 | 1 | test.rs:488:9:488:15 | ... += ... | | +| test.rs:490:5:490:10 | nested | test.rs:490:17:490:17 | x | | +| test.rs:490:5:490:18 | CallExpr | test.rs:485:28:491:1 | BlockExpr | | +| test.rs:490:5:490:19 | ExprStmt | test.rs:490:5:490:10 | nested | | +| test.rs:490:12:490:17 | RefExpr | test.rs:490:5:490:18 | CallExpr | | +| test.rs:490:17:490:17 | x | test.rs:490:12:490:17 | RefExpr | | breakTarget -| test.rs:26:17:26:21 | BreakExpr | test.rs:20:9:32:9 | LoopExpr | -| test.rs:40:21:40:25 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | -| test.rs:42:21:42:32 | BreakExpr | test.rs:37:9:46:9 | LoopExpr | -| test.rs:44:17:44:28 | BreakExpr | test.rs:38:13:45:13 | LoopExpr | -| test.rs:83:17:83:21 | BreakExpr | test.rs:80:9:86:9 | WhileExpr | -| test.rs:93:17:93:21 | BreakExpr | test.rs:91:9:95:9 | WhileExpr | -| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:104:9 | ForExpr | -| test.rs:109:13:109:26 | BreakExpr | test.rs:108:9:110:9 | LoopExpr | -| test.rs:204:17:204:28 | BreakExpr | test.rs:202:13:207:9 | LoopExpr | -| test.rs:217:17:217:35 | BreakExpr | test.rs:215:13:220:9 | LoopExpr | -| test.rs:229:13:229:30 | BreakExpr | test.rs:228:13:230:9 | BlockExpr | -| test.rs:451:13:451:26 | BreakExpr | test.rs:448:18:459:5 | BlockExpr | -| test.rs:455:13:455:26 | BreakExpr | test.rs:448:18:459:5 | BlockExpr | -| test.rs:466:13:466:26 | BreakExpr | test.rs:463:18:469:5 | BlockExpr | +| test.rs:34:17:34:21 | BreakExpr | test.rs:28:9:40:9 | LoopExpr | +| test.rs:48:21:48:25 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | +| test.rs:50:21:50:32 | BreakExpr | test.rs:45:9:54:9 | LoopExpr | +| test.rs:52:17:52:28 | BreakExpr | test.rs:46:13:53:13 | LoopExpr | +| test.rs:91:17:91:21 | BreakExpr | test.rs:88:9:94:9 | WhileExpr | +| test.rs:101:17:101:21 | BreakExpr | test.rs:99:9:103:9 | WhileExpr | +| test.rs:109:17:109:21 | BreakExpr | test.rs:107:9:112:9 | ForExpr | +| test.rs:117:13:117:26 | BreakExpr | test.rs:116:9:118:9 | LoopExpr | +| test.rs:197:17:197:28 | BreakExpr | test.rs:195:13:200:9 | LoopExpr | +| test.rs:210:17:210:35 | BreakExpr | test.rs:208:13:213:9 | LoopExpr | +| test.rs:222:13:222:30 | BreakExpr | test.rs:221:13:223:9 | BlockExpr | +| test.rs:463:13:463:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | +| test.rs:467:13:467:26 | BreakExpr | test.rs:460:18:471:5 | BlockExpr | +| test.rs:479:13:479:26 | BreakExpr | test.rs:476:18:482:5 | BlockExpr | continueTarget -| test.rs:29:17:29:24 | ContinueExpr | test.rs:20:9:32:9 | LoopExpr | -| test.rs:55:21:55:28 | ContinueExpr | test.rs:53:13:60:13 | LoopExpr | -| test.rs:57:21:57:35 | ContinueExpr | test.rs:51:9:61:9 | LoopExpr | -| test.rs:59:17:59:31 | ContinueExpr | test.rs:53:13:60:13 | LoopExpr | -| test.rs:69:21:69:28 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | -| test.rs:71:21:71:35 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | -| test.rs:73:17:73:31 | ContinueExpr | test.rs:67:13:74:13 | LoopExpr | +| test.rs:37:17:37:24 | ContinueExpr | test.rs:28:9:40:9 | LoopExpr | +| test.rs:63:21:63:28 | ContinueExpr | test.rs:61:13:68:13 | LoopExpr | +| test.rs:65:21:65:35 | ContinueExpr | test.rs:59:9:69:9 | LoopExpr | +| test.rs:67:17:67:31 | ContinueExpr | test.rs:61:13:68:13 | LoopExpr | +| test.rs:77:21:77:28 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | +| test.rs:79:21:79:35 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | +| test.rs:81:17:81:31 | ContinueExpr | test.rs:75:13:82:13 | LoopExpr | diff --git a/rust/ql/test/library-tests/controlflow/test.rs b/rust/ql/test/library-tests/controlflow/test.rs index ed24e79c7704..e1d596188061 100644 --- a/rust/ql/test/library-tests/controlflow/test.rs +++ b/rust/ql/test/library-tests/controlflow/test.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; -use std::convert::Infallible; - mod calls { + use crate::test::logical_operators; + use std::collections::HashMap; + fn function_call() { - test_and_operator(true, false, true); - foo::(42); + logical_operators::test_and_operator(true, false, true); + method_call(); } fn method_call() { @@ -15,6 +15,14 @@ mod calls { mod loop_expression { + fn next(n: i64) -> i64 { + if n % 2 == 0 { + n / 2 + } else { + 3 * n + 1 + } + } + fn test_break_and_continue(n: i64) -> bool { let mut i = n; loop { @@ -89,7 +97,7 @@ mod loop_expression { fn test_while_let() { let mut iter = 1..10; while let Some(x) = iter.next() { - if (i = 5) { + if (x == 5) { break; } } @@ -136,29 +144,11 @@ mod if_expression { fn test_if_let(a: Option) -> i64 { if let Some(n) = a { - n + return n; } 0 } - fn test_and_if_let(a: bool, b: Option, c: bool) -> bool { - if a && let Some(d) = b { - d - } else { - false - } - } - - fn test_and_if_let2(a: bool, b: i64, c: bool) -> bool { - if a && let d = b - && c - { - d > 0 - } else { - false - } - } - fn test_nested_if(a: i64) -> i64 { if (if a < 0 { a < -10 } else { a > 10 }) { 1 @@ -191,7 +181,10 @@ mod if_expression { fn test_if_assignment(a: i64) -> i64 { let mut x = false; - if x = true { + if { + x = true; + x + } { 1 } else { 0 @@ -237,7 +230,7 @@ mod if_expression { mod logical_operators { - fn test_and_operator(a: bool, b: bool, c: bool) -> bool { + pub fn test_and_operator(a: bool, b: bool, c: bool) -> bool { let d = a && b && c; d } @@ -257,7 +250,7 @@ mod logical_operators { d } - fn test_if_and_operator(a: bool, b: i64, c: bool) -> bool { + fn test_if_and_operator(a: bool, b: bool, c: bool) -> bool { if a && b && c { true } else { @@ -265,7 +258,7 @@ mod logical_operators { } } - fn test_if_or_operator(a: bool, b: i64, c: bool) -> bool { + fn test_if_or_operator(a: bool, b: bool, c: bool) -> bool { if a || b || c { true } else { @@ -287,9 +280,10 @@ mod logical_operators { } mod question_mark_operator { + use std::num; - fn test_question_mark_operator_1(s: &str) -> Option { - str.parse::()? + 4 + fn test_question_mark_operator_1(s: &str) -> Result { + Ok(s.parse::()? + 4) } fn test_question_mark_operator_2(b: Option) -> Option { @@ -301,6 +295,7 @@ mod question_mark_operator { } mod match_expression { + use std::convert::Infallible; fn test_match(maybe_digit: Option) -> i64 { match maybe_digit { @@ -321,7 +316,7 @@ mod match_expression { } } - fn test_match_and(cond: bool, r: Opton) -> bool { + fn test_match_and(cond: bool, r: Option) -> bool { (match r { Some(a) => a, _ => false, @@ -338,12 +333,12 @@ mod match_expression { mod let_statement { - fn test_let_match(a: Option) { - let Some(n) = a else { "Expected some" }; + fn test_let_match(a: Option) -> i64 { + let Some(n) = a else { panic!("Expected some") }; n } - fn test_let_with_return(m: Option) { + fn test_let_with_return(m: Option) -> bool { let ret = match m { Some(ret) => ret, None => return false, @@ -354,7 +349,7 @@ mod let_statement { mod patterns { - fn empty_tuple_pattern(unit: ()) -> void { + fn empty_tuple_pattern(unit: ()) -> () { let () = unit; return; } @@ -363,7 +358,7 @@ mod patterns { fn empty_struct_pattern(st: MyStruct) -> i64 { match st { - MyStruct {} => 1, + MyStruct { .. } => 1, } } @@ -372,7 +367,7 @@ mod patterns { ..0 => 1, 1..2 => 2, 5.. => 3, - .. => 4, + _ => 4, } } } @@ -380,7 +375,7 @@ mod patterns { mod divergence { fn test_infinite_loop() -> &'static str { loop { - 1 + () } "never reached" } @@ -391,7 +386,7 @@ mod async_await { println!("hello, world!"); } - async fn async_block() { + async fn async_block(b: bool) { let say_godbye = async { println!("godbye, everyone!"); }; @@ -403,17 +398,24 @@ mod async_await { say_how_are_you.await; say_godbye.await; noop.await; + + let lambda = |foo| async { + if b { + return async_block(true); + }; + foo + }; } } mod const_evaluation { - const PI: i64 = 3.14159; + const PI: f64 = 3.14159; const fn add_two(n: i64) -> i64 { n + 2 } - const A_NUMBER: i64 = if add_two(2) + 2 == 4 { PI } else { 0 }; + const A_NUMBER: f64 = if add_two(2) + 2 == 4 { PI } else { 0.0 }; fn const_block_assert() -> usize { // If this code ever gets executed, then the assertion has definitely @@ -444,6 +446,16 @@ fn dead_code() -> i64 { return 1; } +fn do_thing() {} + +fn condition_not_met() -> bool { + false +} + +fn do_next_thing() {} + +fn do_last_thing() {} + fn labelled_block1() -> i64 { let result = 'block: { do_thing(); @@ -457,19 +469,20 @@ fn labelled_block1() -> i64 { do_last_thing(); 3 }; + result } -fn labelled_block2() -> i64 { +fn labelled_block2() { let result = 'block: { let x: Option = None; let Some(y) = x else { break 'block 1; }; - x + 0 }; } -fn test_nested_function() { +fn test_nested_function2() { let mut x = 0; fn nested(x: &mut i64) { *x += 1; From bb8d0b4881aae0b20f0c7c4f99bcb6c70e845c84 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 19 Nov 2024 10:24:08 +0100 Subject: [PATCH 2/2] Rust: Handle early returns in `async` blocks in CFG --- rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll | 3 +++ rust/ql/test/library-tests/controlflow/Cfg.expected | 1 + 2 files changed, 4 insertions(+) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll index 5a752abf4b9a..7b3367690ec6 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/Scope.qll @@ -22,6 +22,9 @@ final class AsyncBlockScope extends CfgScopeImpl, AsyncBlockExpr instanceof Expr override predicate scopeLast(AstNode last, Completion c) { last(super.getLastChildElement(), last, c) + or + last(super.getChildNode(_), last, c) and + not c instanceof NormalCompletion } } diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index 9b112133edd9..620837abc826 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -892,6 +892,7 @@ edges | test.rs:403:13:405:14 | ExprStmt | test.rs:403:16:403:16 | b | | | test.rs:403:16:403:16 | b | test.rs:403:13:405:13 | IfExpr | false | | test.rs:403:16:403:16 | b | test.rs:404:17:404:41 | ExprStmt | true | +| test.rs:404:17:404:40 | ReturnExpr | test.rs:402:28:407:9 | exit BlockExpr (normal) | return | | test.rs:404:17:404:41 | ExprStmt | test.rs:404:24:404:34 | async_block | | | test.rs:404:24:404:34 | async_block | test.rs:404:36:404:39 | true | | | test.rs:404:24:404:40 | CallExpr | test.rs:404:17:404:40 | ReturnExpr | |