Skip to main content

rustc_mir_build/thir/
print.rs

1use std::fmt::{self, Write};
2
3use rustc_middle::thir::*;
4use rustc_middle::ty;
5use rustc_middle::ty::TyCtxt;
6use rustc_span::def_id::LocalDefId;
7
8/// Create a THIR tree for debugging.
9pub fn thir_tree(tcx: TyCtxt<'_>, owner_def: LocalDefId) -> String {
10    match super::cx::thir_body(tcx, owner_def) {
11        Ok((thir, expr)) => {
12            let thir = thir.steal();
13            let mut printer = ThirPrinter::new(&thir);
14            printer.print(expr);
15            printer.into_buffer()
16        }
17        Err(_) => "error".into(),
18    }
19}
20
21/// Create a list-like THIR representation for debugging.
22pub fn thir_flat(tcx: TyCtxt<'_>, owner_def: LocalDefId) -> String {
23    match super::cx::thir_body(tcx, owner_def) {
24        Ok((thir, _)) => ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:#?}", thir.steal()))
    })format!("{:#?}", thir.steal()),
25        Err(_) => "error".into(),
26    }
27}
28
29struct ThirPrinter<'a, 'tcx> {
30    thir: &'a Thir<'tcx>,
31    fmt: String,
32}
33
34const INDENT: &str = "    ";
35
36macro_rules! print_indented {
37    ($writer:ident, $s:expr, $indent_lvl:expr) => {
38        $writer.indent($indent_lvl);
39        writeln!($writer, "{}", $s).expect("unable to write to ThirPrinter");
40    };
41}
42
43impl<'a, 'tcx> Write for ThirPrinter<'a, 'tcx> {
44    fn write_str(&mut self, s: &str) -> fmt::Result {
45        self.fmt.push_str(s);
46        Ok(())
47    }
48}
49
50impl<'a, 'tcx> ThirPrinter<'a, 'tcx> {
51    fn new(thir: &'a Thir<'tcx>) -> Self {
52        Self { thir, fmt: String::new() }
53    }
54
55    fn indent(&mut self, level: usize) {
56        for _ in 0..level {
57            self.fmt.push_str(INDENT);
58        }
59    }
60
61    fn print(&mut self, body_expr: ExprId) {
62        self.indent(0);
self.write_fmt(format_args!("{0}\n",
            "params: [")).expect("unable to write to ThirPrinter");print_indented!(self, "params: [", 0);
63        for param in self.thir.params.iter() {
64            self.print_param(param, 1);
65        }
66        self.indent(0);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", 0);
67
68        self.indent(0);
self.write_fmt(format_args!("{0}\n",
            "body:")).expect("unable to write to ThirPrinter");print_indented!(self, "body:", 0);
69        self.print_expr(body_expr, 1);
70    }
71
72    fn into_buffer(self) -> String {
73        self.fmt
74    }
75
76    fn print_list<T>(
77        &mut self,
78        label: &str,
79        list: &[T],
80        depth_lvl: usize,
81        print_fn: impl Fn(&mut Self, &T, usize),
82    ) {
83        if list.is_empty() {
84            self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            format_args!("{0}: []",
                label))).expect("unable to write to ThirPrinter");print_indented!(self, format_args!("{label}: []"), depth_lvl);
85        } else {
86            self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            format_args!("{0}: [",
                label))).expect("unable to write to ThirPrinter");print_indented!(self, format_args!("{label}: ["), depth_lvl);
87            for item in list {
88                print_fn(self, item, depth_lvl + 1)
89            }
90            self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl);
91        }
92    }
93
94    fn print_param(&mut self, param: &Param<'tcx>, depth_lvl: usize) {
95        let Param { pat, ty, ty_span, self_kind, hir_id } = param;
96
97        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Param {")).expect("unable to write to ThirPrinter");print_indented!(self, "Param {", depth_lvl);
98        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 1);
99        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty_span: {0:?}",
                            ty_span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty_span: {:?}", ty_span), depth_lvl + 1);
100        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("self_kind: {0:?}",
                            self_kind))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("self_kind: {:?}", self_kind), depth_lvl + 1);
101        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("hir_id: {0:?}", hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("hir_id: {:?}", hir_id), depth_lvl + 1);
102
103        if let Some(pat) = pat {
104            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "param: Some( ")).expect("unable to write to ThirPrinter");print_indented!(self, "param: Some( ", depth_lvl + 1);
105            self.print_pat(pat, depth_lvl + 2);
106            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 1);
107        } else {
108            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "param: None")).expect("unable to write to ThirPrinter");print_indented!(self, "param: None", depth_lvl + 1);
109        }
110
111        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
112    }
113
114    fn print_block(&mut self, block_id: BlockId, depth_lvl: usize) {
115        let Block { targeted_by_break, span, region_scope, stmts, expr, safety_mode } =
116            &self.thir.blocks[block_id];
117
118        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Block {")).expect("unable to write to ThirPrinter");print_indented!(self, "Block {", depth_lvl);
119        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("targeted_by_break: {0}",
                            targeted_by_break))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("targeted_by_break: {}", targeted_by_break), depth_lvl + 1);
120        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
121        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("region_scope: {0:?}",
                            region_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("region_scope: {:?}", region_scope), depth_lvl + 1);
122        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("safety_mode: {0:?}",
                            safety_mode))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("safety_mode: {:?}", safety_mode), depth_lvl + 1);
123
124        if stmts.len() > 0 {
125            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "stmts: [")).expect("unable to write to ThirPrinter");print_indented!(self, "stmts: [", depth_lvl + 1);
126            for stmt in stmts.iter() {
127                self.print_stmt(*stmt, depth_lvl + 2);
128            }
129            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
130        } else {
131            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "stmts: []")).expect("unable to write to ThirPrinter");print_indented!(self, "stmts: []", depth_lvl + 1);
132        }
133
134        if let Some(expr_id) = expr {
135            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "expr:", depth_lvl + 1);
136            self.print_expr(*expr_id, depth_lvl + 2);
137        } else {
138            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr: []")).expect("unable to write to ThirPrinter");print_indented!(self, "expr: []", depth_lvl + 1);
139        }
140
141        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
142    }
143
144    fn print_stmt(&mut self, stmt_id: StmtId, depth_lvl: usize) {
145        let Stmt { kind } = &self.thir.stmts[stmt_id];
146
147        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Stmt {")).expect("unable to write to ThirPrinter");print_indented!(self, "Stmt {", depth_lvl);
148
149        match kind {
150            StmtKind::Expr { scope, expr } => {
151                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "kind: Expr {")).expect("unable to write to ThirPrinter");print_indented!(self, "kind: Expr {", depth_lvl + 1);
152                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("scope: {0:?}", scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("scope: {:?}", scope), depth_lvl + 2);
153                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "expr:", depth_lvl + 2);
154                self.print_expr(*expr, depth_lvl + 3);
155                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
156            }
157            StmtKind::Let {
158                remainder_scope,
159                init_scope,
160                pattern,
161                initializer,
162                else_block,
163                hir_id,
164                span,
165            } => {
166                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "kind: Let {")).expect("unable to write to ThirPrinter");print_indented!(self, "kind: Let {", depth_lvl + 1);
167                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("remainder_scope: {0:?}",
                            remainder_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(
168                    self,
169                    format!("remainder_scope: {:?}", remainder_scope),
170                    depth_lvl + 2
171                );
172                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("init_scope: {0:?}",
                            init_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("init_scope: {:?}", init_scope), depth_lvl + 2);
173
174                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "pattern: ")).expect("unable to write to ThirPrinter");print_indented!(self, "pattern: ", depth_lvl + 2);
175                self.print_pat(pattern, depth_lvl + 3);
176                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ",")).expect("unable to write to ThirPrinter");print_indented!(self, ",", depth_lvl + 2);
177
178                if let Some(init) = initializer {
179                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "initializer: Some(")).expect("unable to write to ThirPrinter");print_indented!(self, "initializer: Some(", depth_lvl + 2);
180                    self.print_expr(*init, depth_lvl + 3);
181                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 2);
182                } else {
183                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "initializer: None")).expect("unable to write to ThirPrinter");print_indented!(self, "initializer: None", depth_lvl + 2);
184                }
185
186                if let Some(else_block) = else_block {
187                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "else_block: Some(")).expect("unable to write to ThirPrinter");print_indented!(self, "else_block: Some(", depth_lvl + 2);
188                    self.print_block(*else_block, depth_lvl + 3);
189                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 2);
190                } else {
191                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "else_block: None")).expect("unable to write to ThirPrinter");print_indented!(self, "else_block: None", depth_lvl + 2);
192                }
193
194                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("hir_id: {0:?}", hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("hir_id: {:?}", hir_id), depth_lvl + 2);
195                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 2);
196                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
197            }
198        }
199
200        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
201    }
202
203    fn print_expr(&mut self, expr: ExprId, depth_lvl: usize) {
204        let Expr { ty, temp_scope_id, span, kind } = &self.thir[expr];
205        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Expr {")).expect("unable to write to ThirPrinter");print_indented!(self, "Expr {", depth_lvl);
206        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 1);
207        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("temp_scope_id: {0:?}",
                            temp_scope_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("temp_scope_id: {:?}", temp_scope_id), depth_lvl + 1);
208        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
209        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "kind: ")).expect("unable to write to ThirPrinter");print_indented!(self, "kind: ", depth_lvl + 1);
210        self.print_expr_kind(kind, depth_lvl + 2);
211        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
212    }
213
214    fn print_expr_kind(&mut self, expr_kind: &ExprKind<'tcx>, depth_lvl: usize) {
215        use rustc_middle::thir::ExprKind::*;
216
217        match expr_kind {
218            Scope { region_scope, value, hir_id } => {
219                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Scope {")).expect("unable to write to ThirPrinter");print_indented!(self, "Scope {", depth_lvl);
220                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("region_scope: {0:?}",
                            region_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("region_scope: {:?}", region_scope), depth_lvl + 1);
221                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("hir_id: {0:?}", hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("hir_id: {:?}", hir_id), depth_lvl + 1);
222                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
223                self.print_expr(*value, depth_lvl + 2);
224                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
225            }
226            If { if_then_scope, cond, then, else_opt } => {
227                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "If {")).expect("unable to write to ThirPrinter");print_indented!(self, "If {", depth_lvl);
228                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("if_then_scope: {0:?}",
                            if_then_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("if_then_scope: {:?}", if_then_scope), depth_lvl + 1);
229                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "cond:")).expect("unable to write to ThirPrinter");print_indented!(self, "cond:", depth_lvl + 1);
230                self.print_expr(*cond, depth_lvl + 2);
231                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "then:")).expect("unable to write to ThirPrinter");print_indented!(self, "then:", depth_lvl + 1);
232                self.print_expr(*then, depth_lvl + 2);
233
234                if let Some(else_expr) = else_opt {
235                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "else:")).expect("unable to write to ThirPrinter");print_indented!(self, "else:", depth_lvl + 1);
236                    self.print_expr(*else_expr, depth_lvl + 2);
237                }
238
239                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
240            }
241            Call { fun, args, ty, from_hir_call, fn_span } => {
242                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Call {")).expect("unable to write to ThirPrinter");print_indented!(self, "Call {", depth_lvl);
243                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 1);
244                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("from_hir_call: {0}",
                            from_hir_call))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("from_hir_call: {}", from_hir_call), depth_lvl + 1);
245                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("fn_span: {0:?}",
                            fn_span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("fn_span: {:?}", fn_span), depth_lvl + 1);
246                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "fun:")).expect("unable to write to ThirPrinter");print_indented!(self, "fun:", depth_lvl + 1);
247                self.print_expr(*fun, depth_lvl + 2);
248
249                if args.len() > 0 {
250                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "args: [")).expect("unable to write to ThirPrinter");print_indented!(self, "args: [", depth_lvl + 1);
251                    for arg in args.iter() {
252                        self.print_expr(*arg, depth_lvl + 2);
253                    }
254                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
255                } else {
256                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "args: []")).expect("unable to write to ThirPrinter");print_indented!(self, "args: []", depth_lvl + 1);
257                }
258
259                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
260            }
261            ByUse { expr, span } => {
262                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ByUse {")).expect("unable to write to ThirPrinter");print_indented!(self, "ByUse {", depth_lvl);
263                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "expr:", depth_lvl + 1);
264                self.print_expr(*expr, depth_lvl + 2);
265                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
266                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
267            }
268            Deref { arg } => {
269                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Deref {")).expect("unable to write to ThirPrinter");print_indented!(self, "Deref {", depth_lvl);
270                self.print_expr(*arg, depth_lvl + 1);
271                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
272            }
273            Binary { op, lhs, rhs } => {
274                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Binary {")).expect("unable to write to ThirPrinter");print_indented!(self, "Binary {", depth_lvl);
275                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("op: {0:?}", op))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("op: {:?}", op), depth_lvl + 1);
276                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
277                self.print_expr(*lhs, depth_lvl + 2);
278                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "rhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "rhs:", depth_lvl + 1);
279                self.print_expr(*rhs, depth_lvl + 2);
280                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
281            }
282            LogicalOp { op, lhs, rhs } => {
283                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "LogicalOp {")).expect("unable to write to ThirPrinter");print_indented!(self, "LogicalOp {", depth_lvl);
284                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("op: {0:?}", op))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("op: {:?}", op), depth_lvl + 1);
285                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
286                self.print_expr(*lhs, depth_lvl + 2);
287                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "rhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "rhs:", depth_lvl + 1);
288                self.print_expr(*rhs, depth_lvl + 2);
289                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
290            }
291            Unary { op, arg } => {
292                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Unary {")).expect("unable to write to ThirPrinter");print_indented!(self, "Unary {", depth_lvl);
293                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("op: {0:?}", op))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("op: {:?}", op), depth_lvl + 1);
294                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "arg:")).expect("unable to write to ThirPrinter");print_indented!(self, "arg:", depth_lvl + 1);
295                self.print_expr(*arg, depth_lvl + 2);
296                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
297            }
298            Cast { source } => {
299                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Cast {")).expect("unable to write to ThirPrinter");print_indented!(self, "Cast {", depth_lvl);
300                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
301                self.print_expr(*source, depth_lvl + 2);
302                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
303            }
304            Use { source } => {
305                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Use {")).expect("unable to write to ThirPrinter");print_indented!(self, "Use {", depth_lvl);
306                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
307                self.print_expr(*source, depth_lvl + 2);
308                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
309            }
310            NeverToAny { source } => {
311                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "NeverToAny {")).expect("unable to write to ThirPrinter");print_indented!(self, "NeverToAny {", depth_lvl);
312                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
313                self.print_expr(*source, depth_lvl + 2);
314                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
315            }
316            PointerCoercion { cast, is_from_as_cast, source } => {
317                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Pointer {")).expect("unable to write to ThirPrinter");print_indented!(self, "Pointer {", depth_lvl);
318                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("cast: {0:?}", cast))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("cast: {:?}", cast), depth_lvl + 1);
319                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("is_from_as_cast: {0:?}",
                            is_from_as_cast))
                }))).expect("unable to write to ThirPrinter");print_indented!(
320                    self,
321                    format!("is_from_as_cast: {:?}", is_from_as_cast),
322                    depth_lvl + 1
323                );
324                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
325                self.print_expr(*source, depth_lvl + 2);
326                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
327            }
328            Loop { body } => {
329                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Loop (")).expect("unable to write to ThirPrinter");print_indented!(self, "Loop (", depth_lvl);
330                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "body:")).expect("unable to write to ThirPrinter");print_indented!(self, "body:", depth_lvl + 1);
331                self.print_expr(*body, depth_lvl + 2);
332                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl);
333            }
334            LoopMatch { state, region_scope, match_data } => {
335                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "LoopMatch {")).expect("unable to write to ThirPrinter");print_indented!(self, "LoopMatch {", depth_lvl);
336                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "state:")).expect("unable to write to ThirPrinter");print_indented!(self, "state:", depth_lvl + 1);
337                self.print_expr(*state, depth_lvl + 2);
338                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("region_scope: {0:?}",
                            region_scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("region_scope: {:?}", region_scope), depth_lvl + 1);
339                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "match_data:")).expect("unable to write to ThirPrinter");print_indented!(self, "match_data:", depth_lvl + 1);
340                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "LoopMatchMatchData {")).expect("unable to write to ThirPrinter");print_indented!(self, "LoopMatchMatchData {", depth_lvl + 2);
341                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}",
                            match_data.span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", match_data.span), depth_lvl + 3);
342                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            "scrutinee:")).expect("unable to write to ThirPrinter");print_indented!(self, "scrutinee:", depth_lvl + 3);
343                self.print_expr(match_data.scrutinee, depth_lvl + 4);
344
345                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            "arms: [")).expect("unable to write to ThirPrinter");print_indented!(self, "arms: [", depth_lvl + 3);
346                for arm_id in match_data.arms.iter() {
347                    self.print_arm(*arm_id, depth_lvl + 4);
348                }
349                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 3);
350                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 2);
351                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
352            }
353            Let { expr, pat } => {
354                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Let {")).expect("unable to write to ThirPrinter");print_indented!(self, "Let {", depth_lvl);
355                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "expr:", depth_lvl + 1);
356                self.print_expr(*expr, depth_lvl + 2);
357                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("pat: {0:?}", pat))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("pat: {:?}", pat), depth_lvl + 1);
358                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
359            }
360            Match { scrutinee, arms, match_source } => {
361                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Match {")).expect("unable to write to ThirPrinter");print_indented!(self, "Match {", depth_lvl);
362                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "scrutinee:")).expect("unable to write to ThirPrinter");print_indented!(self, "scrutinee:", depth_lvl + 1);
363                self.print_expr(*scrutinee, depth_lvl + 2);
364
365                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "arms: [")).expect("unable to write to ThirPrinter");print_indented!(self, "arms: [", depth_lvl + 1);
366                for arm_id in arms.iter() {
367                    self.print_arm(*arm_id, depth_lvl + 2);
368                }
369                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
370                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("match_source: {0:?}",
                            match_source))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("match_source: {:?}", match_source), depth_lvl + 1);
371                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
372            }
373            Block { block } => self.print_block(*block, depth_lvl),
374            Assign { lhs, rhs } => {
375                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Assign {")).expect("unable to write to ThirPrinter");print_indented!(self, "Assign {", depth_lvl);
376                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
377                self.print_expr(*lhs, depth_lvl + 2);
378                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "rhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "rhs:", depth_lvl + 1);
379                self.print_expr(*rhs, depth_lvl + 2);
380                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
381            }
382            AssignOp { op, lhs, rhs } => {
383                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "AssignOp {")).expect("unable to write to ThirPrinter");print_indented!(self, "AssignOp {", depth_lvl);
384                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("op: {0:?}", op))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("op: {:?}", op), depth_lvl + 1);
385                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
386                self.print_expr(*lhs, depth_lvl + 2);
387                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "rhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "rhs:", depth_lvl + 1);
388                self.print_expr(*rhs, depth_lvl + 2);
389                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
390            }
391            Field { lhs, variant_index, name } => {
392                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Field {")).expect("unable to write to ThirPrinter");print_indented!(self, "Field {", depth_lvl);
393                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("variant_index: {0:?}",
                            variant_index))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("variant_index: {:?}", variant_index), depth_lvl + 1);
394                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("name: {0:?}", name))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("name: {:?}", name), depth_lvl + 1);
395                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
396                self.print_expr(*lhs, depth_lvl + 2);
397                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
398            }
399            Index { lhs, index } => {
400                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Index {")).expect("unable to write to ThirPrinter");print_indented!(self, "Index {", depth_lvl);
401                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "lhs:")).expect("unable to write to ThirPrinter");print_indented!(self, "lhs:", depth_lvl + 1);
402                self.print_expr(*lhs, depth_lvl + 2);
403                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "index:")).expect("unable to write to ThirPrinter");print_indented!(self, "index:", depth_lvl + 1);
404                self.print_expr(*index, depth_lvl + 2);
405                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
406            }
407            VarRef { id } => {
408                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "VarRef {")).expect("unable to write to ThirPrinter");print_indented!(self, "VarRef {", depth_lvl);
409                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("id: {0:?}", id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("id: {:?}", id), depth_lvl + 1);
410                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
411            }
412            UpvarRef { closure_def_id, var_hir_id } => {
413                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "UpvarRef {")).expect("unable to write to ThirPrinter");print_indented!(self, "UpvarRef {", depth_lvl);
414                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("closure_def_id: {0:?}",
                            closure_def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(
415                    self,
416                    format!("closure_def_id: {:?}", closure_def_id),
417                    depth_lvl + 1
418                );
419                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("var_hir_id: {0:?}",
                            var_hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("var_hir_id: {:?}", var_hir_id), depth_lvl + 1);
420                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
421            }
422            Borrow { borrow_kind, arg } => {
423                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Borrow (")).expect("unable to write to ThirPrinter");print_indented!(self, "Borrow (", depth_lvl);
424                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("borrow_kind: {0:?}",
                            borrow_kind))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("borrow_kind: {:?}", borrow_kind), depth_lvl + 1);
425                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "arg:")).expect("unable to write to ThirPrinter");print_indented!(self, "arg:", depth_lvl + 1);
426                self.print_expr(*arg, depth_lvl + 2);
427                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl);
428            }
429            RawBorrow { mutability, arg } => {
430                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "RawBorrow {")).expect("unable to write to ThirPrinter");print_indented!(self, "RawBorrow {", depth_lvl);
431                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("mutability: {0:?}",
                            mutability))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("mutability: {:?}", mutability), depth_lvl + 1);
432                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "arg:")).expect("unable to write to ThirPrinter");print_indented!(self, "arg:", depth_lvl + 1);
433                self.print_expr(*arg, depth_lvl + 2);
434                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
435            }
436            Break { label, value } => {
437                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Break (")).expect("unable to write to ThirPrinter");print_indented!(self, "Break (", depth_lvl);
438                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("label: {0:?}", label))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("label: {:?}", label), depth_lvl + 1);
439
440                if let Some(value) = value {
441                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
442                    self.print_expr(*value, depth_lvl + 2);
443                }
444
445                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl);
446            }
447            Continue { label } => {
448                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Continue {")).expect("unable to write to ThirPrinter");print_indented!(self, "Continue {", depth_lvl);
449                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("label: {0:?}", label))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("label: {:?}", label), depth_lvl + 1);
450                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
451            }
452            ConstContinue { label, value } => {
453                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ConstContinue (")).expect("unable to write to ThirPrinter");print_indented!(self, "ConstContinue (", depth_lvl);
454                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("label: {0:?}", label))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("label: {:?}", label), depth_lvl + 1);
455                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
456                self.print_expr(*value, depth_lvl + 2);
457                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl);
458            }
459            Return { value } => {
460                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Return {")).expect("unable to write to ThirPrinter");print_indented!(self, "Return {", depth_lvl);
461                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
462
463                if let Some(value) = value {
464                    self.print_expr(*value, depth_lvl + 2);
465                }
466
467                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
468            }
469            Become { value } => {
470                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Become {")).expect("unable to write to ThirPrinter");print_indented!(self, "Become {", depth_lvl);
471                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
472                self.print_expr(*value, depth_lvl + 2);
473                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
474            }
475            ConstBlock { did, args } => {
476                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ConstBlock {")).expect("unable to write to ThirPrinter");print_indented!(self, "ConstBlock {", depth_lvl);
477                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("did: {0:?}", did))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("did: {:?}", did), depth_lvl + 1);
478                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("args: {0:?}", args))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("args: {:?}", args), depth_lvl + 1);
479                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
480            }
481            Repeat { value, count } => {
482                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Repeat {")).expect("unable to write to ThirPrinter");print_indented!(self, "Repeat {", depth_lvl);
483                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("count: {0:?}", count))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("count: {:?}", count), depth_lvl + 1);
484                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
485                self.print_expr(*value, depth_lvl + 2);
486                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
487            }
488            Array { fields } => {
489                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Array {")).expect("unable to write to ThirPrinter");print_indented!(self, "Array {", depth_lvl);
490                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "fields: [")).expect("unable to write to ThirPrinter");print_indented!(self, "fields: [", depth_lvl + 1);
491                for field_id in fields.iter() {
492                    self.print_expr(*field_id, depth_lvl + 2);
493                }
494                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
495                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
496            }
497            Tuple { fields } => {
498                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Tuple {")).expect("unable to write to ThirPrinter");print_indented!(self, "Tuple {", depth_lvl);
499                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "fields: [")).expect("unable to write to ThirPrinter");print_indented!(self, "fields: [", depth_lvl + 1);
500                for field_id in fields.iter() {
501                    self.print_expr(*field_id, depth_lvl + 2);
502                }
503                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
504                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
505            }
506            Adt(adt_expr) => {
507                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Adt {")).expect("unable to write to ThirPrinter");print_indented!(self, "Adt {", depth_lvl);
508                self.print_adt_expr(&**adt_expr, depth_lvl + 1);
509                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
510            }
511            PlaceTypeAscription { source, user_ty, user_ty_span } => {
512                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "PlaceTypeAscription {")).expect("unable to write to ThirPrinter");print_indented!(self, "PlaceTypeAscription {", depth_lvl);
513                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty: {0:?}",
                            user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty: {:?}", user_ty), depth_lvl + 1);
514                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty_span: {0:?}",
                            user_ty_span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty_span: {:?}", user_ty_span), depth_lvl + 1);
515                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
516                self.print_expr(*source, depth_lvl + 2);
517                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
518            }
519            ValueTypeAscription { source, user_ty, user_ty_span } => {
520                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ValueTypeAscription {")).expect("unable to write to ThirPrinter");print_indented!(self, "ValueTypeAscription {", depth_lvl);
521                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty: {0:?}",
                            user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty: {:?}", user_ty), depth_lvl + 1);
522                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty_span: {0:?}",
                            user_ty_span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty_span: {:?}", user_ty_span), depth_lvl + 1);
523                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
524                self.print_expr(*source, depth_lvl + 2);
525                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
526            }
527            PlaceUnwrapUnsafeBinder { source } => {
528                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "PlaceUnwrapUnsafeBinder {")).expect("unable to write to ThirPrinter");print_indented!(self, "PlaceUnwrapUnsafeBinder {", depth_lvl);
529                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
530                self.print_expr(*source, depth_lvl + 2);
531                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
532            }
533            ValueUnwrapUnsafeBinder { source } => {
534                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ValueUnwrapUnsafeBinder {")).expect("unable to write to ThirPrinter");print_indented!(self, "ValueUnwrapUnsafeBinder {", depth_lvl);
535                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
536                self.print_expr(*source, depth_lvl + 2);
537                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
538            }
539            WrapUnsafeBinder { source } => {
540                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "WrapUnsafeBinder {")).expect("unable to write to ThirPrinter");print_indented!(self, "WrapUnsafeBinder {", depth_lvl);
541                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
542                self.print_expr(*source, depth_lvl + 2);
543                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
544            }
545            Closure(closure_expr) => {
546                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Closure {")).expect("unable to write to ThirPrinter");print_indented!(self, "Closure {", depth_lvl);
547                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "closure_expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "closure_expr:", depth_lvl + 1);
548                self.print_closure_expr(&**closure_expr, depth_lvl + 2);
549                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
550            }
551            Literal { lit, neg } => {
552                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("Literal( lit: {0:?}, neg: {1:?})\n",
                            lit, neg))
                }))).expect("unable to write to ThirPrinter");print_indented!(
553                    self,
554                    format!("Literal( lit: {:?}, neg: {:?})\n", lit, neg),
555                    depth_lvl
556                );
557            }
558            NonHirLiteral { lit, user_ty } => {
559                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "NonHirLiteral {")).expect("unable to write to ThirPrinter");print_indented!(self, "NonHirLiteral {", depth_lvl);
560                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("lit: {0:?}", lit))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("lit: {:?}", lit), depth_lvl + 1);
561                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty: {0:?}",
                            user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty: {:?}", user_ty), depth_lvl + 1);
562                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
563            }
564            ZstLiteral { user_ty } => {
565                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ZstLiteral(user_ty: {0:?})",
                            user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ZstLiteral(user_ty: {:?})", user_ty), depth_lvl);
566            }
567            NamedConst { def_id, args, user_ty } => {
568                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "NamedConst {")).expect("unable to write to ThirPrinter");print_indented!(self, "NamedConst {", depth_lvl);
569                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("def_id: {0:?}", def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("def_id: {:?}", def_id), depth_lvl + 1);
570                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty: {0:?}",
                            user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty: {:?}", user_ty), depth_lvl + 1);
571                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("args: {0:?}", args))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("args: {:?}", args), depth_lvl + 1);
572                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
573            }
574            ConstParam { param, def_id } => {
575                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ConstParam {")).expect("unable to write to ThirPrinter");print_indented!(self, "ConstParam {", depth_lvl);
576                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("def_id: {0:?}", def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("def_id: {:?}", def_id), depth_lvl + 1);
577                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("param: {0:?}", param))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("param: {:?}", param), depth_lvl + 1);
578                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
579            }
580            StaticRef { alloc_id, ty, def_id } => {
581                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "StaticRef {")).expect("unable to write to ThirPrinter");print_indented!(self, "StaticRef {", depth_lvl);
582                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("def_id: {0:?}", def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("def_id: {:?}", def_id), depth_lvl + 1);
583                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 1);
584                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("alloc_id: {0:?}",
                            alloc_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("alloc_id: {:?}", alloc_id), depth_lvl + 1);
585                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
586            }
587            InlineAsm(expr) => {
588                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsm {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsm {", depth_lvl);
589                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr:")).expect("unable to write to ThirPrinter");print_indented!(self, "expr:", depth_lvl + 1);
590                self.print_inline_asm_expr(&**expr, depth_lvl + 2);
591                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
592            }
593            ThreadLocalRef(def_id) => {
594                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ThreadLocalRef {")).expect("unable to write to ThirPrinter");print_indented!(self, "ThreadLocalRef {", depth_lvl);
595                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("def_id: {0:?}", def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("def_id: {:?}", def_id), depth_lvl + 1);
596                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
597            }
598            Yield { value } => {
599                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Yield {")).expect("unable to write to ThirPrinter");print_indented!(self, "Yield {", depth_lvl);
600                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value:")).expect("unable to write to ThirPrinter");print_indented!(self, "value:", depth_lvl + 1);
601                self.print_expr(*value, depth_lvl + 2);
602                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
603            }
604            ExprKind::Reborrow { source: _, mutability: _, target: _ } => {
605                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Reborrow {")).expect("unable to write to ThirPrinter");print_indented!(self, "Reborrow {", depth_lvl);
606                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "source:")).expect("unable to write to ThirPrinter");print_indented!(self, "source:", depth_lvl + 1);
607                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "mutability:")).expect("unable to write to ThirPrinter");print_indented!(self, "mutability:", depth_lvl + 1);
608                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "ty:")).expect("unable to write to ThirPrinter");print_indented!(self, "ty:", depth_lvl + 1);
609                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
610            }
611        }
612    }
613
614    fn print_adt_expr(&mut self, adt_expr: &AdtExpr<'tcx>, depth_lvl: usize) {
615        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "adt_def:")).expect("unable to write to ThirPrinter");print_indented!(self, "adt_def:", depth_lvl);
616        self.print_adt_def(adt_expr.adt_def, depth_lvl + 1);
617        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("variant_index: {0:?}",
                            adt_expr.variant_index))
                }))).expect("unable to write to ThirPrinter");print_indented!(
618            self,
619            format!("variant_index: {:?}", adt_expr.variant_index),
620            depth_lvl + 1
621        );
622        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("args: {0:?}",
                            adt_expr.args))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("args: {:?}", adt_expr.args), depth_lvl + 1);
623        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("user_ty: {0:?}",
                            adt_expr.user_ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("user_ty: {:?}", adt_expr.user_ty), depth_lvl + 1);
624
625        for field_expr in adt_expr.fields.iter() {
626            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("field {0}:",
                            field_expr.name.as_u32()))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("field {}:", field_expr.name.as_u32()), depth_lvl + 1);
627            self.print_expr(field_expr.expr, depth_lvl + 2);
628        }
629
630        match adt_expr.base {
631            AdtExprBase::Base(ref base) => {
632                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "base:")).expect("unable to write to ThirPrinter");print_indented!(self, "base:", depth_lvl + 1);
633                self.print_fru_info(base, depth_lvl + 2);
634            }
635            AdtExprBase::DefaultFields(_) => {
636                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "base: {{ defaulted fields }}")).expect("unable to write to ThirPrinter");print_indented!(self, "base: {{ defaulted fields }}", depth_lvl + 1);
637            }
638            AdtExprBase::None => {
639                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "base: None")).expect("unable to write to ThirPrinter");print_indented!(self, "base: None", depth_lvl + 1);
640            }
641        }
642    }
643
644    fn print_adt_def(&mut self, adt_def: ty::AdtDef<'tcx>, depth_lvl: usize) {
645        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "AdtDef {")).expect("unable to write to ThirPrinter");print_indented!(self, "AdtDef {", depth_lvl);
646        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("did: {0:?}",
                            adt_def.did()))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("did: {:?}", adt_def.did()), depth_lvl + 1);
647        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("variants: {0:?}",
                            adt_def.variants()))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("variants: {:?}", adt_def.variants()), depth_lvl + 1);
648        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("flags: {0:?}",
                            adt_def.flags()))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("flags: {:?}", adt_def.flags()), depth_lvl + 1);
649        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("repr: {0:?}",
                            adt_def.repr()))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("repr: {:?}", adt_def.repr()), depth_lvl + 1);
650        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
651    }
652
653    fn print_fru_info(&mut self, fru_info: &FruInfo<'tcx>, depth_lvl: usize) {
654        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "FruInfo {")).expect("unable to write to ThirPrinter");print_indented!(self, "FruInfo {", depth_lvl);
655        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "base: ")).expect("unable to write to ThirPrinter");print_indented!(self, "base: ", depth_lvl + 1);
656        self.print_expr(fru_info.base, depth_lvl + 2);
657        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "field_types: [")).expect("unable to write to ThirPrinter");print_indented!(self, "field_types: [", depth_lvl + 1);
658        for ty in fru_info.field_types.iter() {
659            self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 2);
660        }
661        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
662        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
663    }
664
665    fn print_arm(&mut self, arm_id: ArmId, depth_lvl: usize) {
666        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Arm {")).expect("unable to write to ThirPrinter");print_indented!(self, "Arm {", depth_lvl);
667
668        let arm = &self.thir.arms[arm_id];
669        let Arm { pattern, guard, body, hir_id, scope, span } = arm;
670
671        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "pattern: ")).expect("unable to write to ThirPrinter");print_indented!(self, "pattern: ", depth_lvl + 1);
672        self.print_pat(pattern, depth_lvl + 2);
673
674        if let Some(guard) = *guard {
675            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "guard: ")).expect("unable to write to ThirPrinter");print_indented!(self, "guard: ", depth_lvl + 1);
676            self.print_expr(guard, depth_lvl + 2);
677        } else {
678            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "guard: None")).expect("unable to write to ThirPrinter");print_indented!(self, "guard: None", depth_lvl + 1);
679        }
680
681        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "body: ")).expect("unable to write to ThirPrinter");print_indented!(self, "body: ", depth_lvl + 1);
682        self.print_expr(*body, depth_lvl + 2);
683        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("hir_id: {0:?}", hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("hir_id: {:?}", hir_id), depth_lvl + 1);
684        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("scope: {0:?}", scope))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("scope: {:?}", scope), depth_lvl + 1);
685        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
686        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
687    }
688
689    fn print_pat(&mut self, pat: &Pat<'tcx>, depth_lvl: usize) {
690        let &Pat { ty, span, ref kind, ref extra } = pat;
691
692        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "Pat {")).expect("unable to write to ThirPrinter");print_indented!(self, "Pat {", depth_lvl);
693        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 1);
694        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
695        self.print_pat_extra(extra.as_deref(), depth_lvl + 1);
696        self.print_pat_kind(kind, depth_lvl + 1);
697        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
698    }
699
700    fn print_pat_extra(&mut self, extra: Option<&PatExtra<'tcx>>, depth_lvl: usize) {
701        let Some(extra) = extra else {
702            // Skip printing in the common case of a pattern node with no extra data.
703            return;
704        };
705
706        let PatExtra { expanded_const, ascriptions } = extra;
707
708        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "extra: PatExtra {")).expect("unable to write to ThirPrinter");print_indented!(self, "extra: PatExtra {", depth_lvl);
709        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            format_args!("expanded_const: {0:?}",
                expanded_const))).expect("unable to write to ThirPrinter");print_indented!(self, format_args!("expanded_const: {expanded_const:?}"), depth_lvl + 1);
710        self.print_list(
711            "ascriptions",
712            ascriptions,
713            depth_lvl + 1,
714            |this, ascription, depth_lvl| {
715                this.indent(depth_lvl);
this.write_fmt(format_args!("{0}\n",
            format_args!("{0:?}",
                ascription))).expect("unable to write to ThirPrinter");print_indented!(this, format_args!("{ascription:?}"), depth_lvl);
716            },
717        );
718        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
719    }
720
721    fn print_pat_kind(&mut self, pat_kind: &PatKind<'tcx>, depth_lvl: usize) {
722        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "kind: PatKind {")).expect("unable to write to ThirPrinter");print_indented!(self, "kind: PatKind {", depth_lvl);
723
724        match pat_kind {
725            PatKind::Missing => {
726                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Missing")).expect("unable to write to ThirPrinter");print_indented!(self, "Missing", depth_lvl + 1);
727            }
728            PatKind::Wild => {
729                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Wild")).expect("unable to write to ThirPrinter");print_indented!(self, "Wild", depth_lvl + 1);
730            }
731            PatKind::Never => {
732                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Never")).expect("unable to write to ThirPrinter");print_indented!(self, "Never", depth_lvl + 1);
733            }
734            PatKind::Binding { name, mode, var, ty, subpattern, is_primary, is_shorthand } => {
735                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Binding {")).expect("unable to write to ThirPrinter");print_indented!(self, "Binding {", depth_lvl + 1);
736                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("name: {0:?}", name))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("name: {:?}", name), depth_lvl + 2);
737                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("mode: {0:?}", mode))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("mode: {:?}", mode), depth_lvl + 2);
738                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("var: {0:?}", var))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("var: {:?}", var), depth_lvl + 2);
739                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("ty: {0:?}", ty))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("ty: {:?}", ty), depth_lvl + 2);
740                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("is_primary: {0:?}",
                            is_primary))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("is_primary: {:?}", is_primary), depth_lvl + 2);
741                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("is_shorthand: {0:?}",
                            is_shorthand))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("is_shorthand: {:?}", is_shorthand), depth_lvl + 2);
742
743                if let Some(subpattern) = subpattern {
744                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpattern: Some( ")).expect("unable to write to ThirPrinter");print_indented!(self, "subpattern: Some( ", depth_lvl + 2);
745                    self.print_pat(subpattern, depth_lvl + 3);
746                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 2);
747                } else {
748                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpattern: None")).expect("unable to write to ThirPrinter");print_indented!(self, "subpattern: None", depth_lvl + 2);
749                }
750
751                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
752            }
753            PatKind::Variant { adt_def, args, variant_index, subpatterns } => {
754                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Variant {")).expect("unable to write to ThirPrinter");print_indented!(self, "Variant {", depth_lvl + 1);
755                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "adt_def: ")).expect("unable to write to ThirPrinter");print_indented!(self, "adt_def: ", depth_lvl + 2);
756                self.print_adt_def(*adt_def, depth_lvl + 3);
757                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("args: {0:?}", args))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("args: {:?}", args), depth_lvl + 2);
758                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("variant_index: {0:?}",
                            variant_index))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("variant_index: {:?}", variant_index), depth_lvl + 2);
759
760                if subpatterns.len() > 0 {
761                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpatterns: [")).expect("unable to write to ThirPrinter");print_indented!(self, "subpatterns: [", depth_lvl + 2);
762                    for field_pat in subpatterns.iter() {
763                        self.print_pat(&field_pat.pattern, depth_lvl + 3);
764                    }
765                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
766                } else {
767                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpatterns: []")).expect("unable to write to ThirPrinter");print_indented!(self, "subpatterns: []", depth_lvl + 2);
768                }
769
770                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
771            }
772            PatKind::Leaf { subpatterns } => {
773                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Leaf { ")).expect("unable to write to ThirPrinter");print_indented!(self, "Leaf { ", depth_lvl + 1);
774                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpatterns: [")).expect("unable to write to ThirPrinter");print_indented!(self, "subpatterns: [", depth_lvl + 2);
775                for field_pat in subpatterns.iter() {
776                    self.print_pat(&field_pat.pattern, depth_lvl + 3);
777                }
778                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
779                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
780            }
781            PatKind::Deref { pin, subpattern } => {
782                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Deref { ")).expect("unable to write to ThirPrinter");print_indented!(self, "Deref { ", depth_lvl + 1);
783                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            format_args!("pin: {0:?}",
                pin))).expect("unable to write to ThirPrinter");print_indented!(self, format_args!("pin: {pin:?}"), depth_lvl + 2);
784                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpattern:")).expect("unable to write to ThirPrinter");print_indented!(self, "subpattern:", depth_lvl + 2);
785                self.print_pat(subpattern, depth_lvl + 2);
786                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
787            }
788            PatKind::DerefPattern { subpattern, .. } => {
789                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "DerefPattern { ")).expect("unable to write to ThirPrinter");print_indented!(self, "DerefPattern { ", depth_lvl + 1);
790                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpattern:")).expect("unable to write to ThirPrinter");print_indented!(self, "subpattern:", depth_lvl + 2);
791                self.print_pat(subpattern, depth_lvl + 2);
792                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
793            }
794            PatKind::Constant { value } => {
795                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Constant {")).expect("unable to write to ThirPrinter");print_indented!(self, "Constant {", depth_lvl + 1);
796                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("value: {0}", value))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("value: {}", value), depth_lvl + 2);
797                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
798            }
799            PatKind::Range(pat_range) => {
800                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("Range ( {0:?} )",
                            pat_range))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("Range ( {:?} )", pat_range), depth_lvl + 1);
801            }
802            PatKind::Slice { prefix, slice, suffix } => {
803                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Slice {")).expect("unable to write to ThirPrinter");print_indented!(self, "Slice {", depth_lvl + 1);
804
805                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "prefix: [")).expect("unable to write to ThirPrinter");print_indented!(self, "prefix: [", depth_lvl + 2);
806                for prefix_pat in prefix.iter() {
807                    self.print_pat(prefix_pat, depth_lvl + 3);
808                }
809                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
810
811                if let Some(slice) = slice {
812                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "slice: ")).expect("unable to write to ThirPrinter");print_indented!(self, "slice: ", depth_lvl + 2);
813                    self.print_pat(slice, depth_lvl + 3);
814                }
815
816                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "suffix: [")).expect("unable to write to ThirPrinter");print_indented!(self, "suffix: [", depth_lvl + 2);
817                for suffix_pat in suffix.iter() {
818                    self.print_pat(suffix_pat, depth_lvl + 3);
819                }
820                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
821
822                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
823            }
824            PatKind::Array { prefix, slice, suffix } => {
825                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Array {")).expect("unable to write to ThirPrinter");print_indented!(self, "Array {", depth_lvl + 1);
826
827                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "prefix: [")).expect("unable to write to ThirPrinter");print_indented!(self, "prefix: [", depth_lvl + 2);
828                for prefix_pat in prefix.iter() {
829                    self.print_pat(prefix_pat, depth_lvl + 3);
830                }
831                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
832
833                if let Some(slice) = slice {
834                    self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "slice: ")).expect("unable to write to ThirPrinter");print_indented!(self, "slice: ", depth_lvl + 2);
835                    self.print_pat(slice, depth_lvl + 3);
836                }
837
838                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "suffix: [")).expect("unable to write to ThirPrinter");print_indented!(self, "suffix: [", depth_lvl + 2);
839                for suffix_pat in suffix.iter() {
840                    self.print_pat(suffix_pat, depth_lvl + 3);
841                }
842                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
843
844                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
845            }
846            PatKind::Or { pats } => {
847                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Or {")).expect("unable to write to ThirPrinter");print_indented!(self, "Or {", depth_lvl + 1);
848                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "pats: [")).expect("unable to write to ThirPrinter");print_indented!(self, "pats: [", depth_lvl + 2);
849                for pat in pats.iter() {
850                    self.print_pat(pat, depth_lvl + 3);
851                }
852                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 2);
853                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
854            }
855            PatKind::Guard { subpattern, condition } => {
856                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Guard pattern: {")).expect("unable to write to ThirPrinter");print_indented!(self, "Guard pattern: {", depth_lvl + 1);
857                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "subpattern: ")).expect("unable to write to ThirPrinter");print_indented!(self, "subpattern: ", depth_lvl + 2);
858                self.print_pat(subpattern, depth_lvl + 3);
859                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "guard: ")).expect("unable to write to ThirPrinter");print_indented!(self, "guard: ", depth_lvl + 2);
860                self.print_expr(*condition, depth_lvl + 3);
861                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
862            }
863            PatKind::Error(_) => {
864                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "Error")).expect("unable to write to ThirPrinter");print_indented!(self, "Error", depth_lvl + 1);
865            }
866        }
867
868        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
869    }
870
871    fn print_closure_expr(&mut self, expr: &ClosureExpr<'tcx>, depth_lvl: usize) {
872        let ClosureExpr { closure_id, args, upvars, movability, fake_reads } = expr;
873
874        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "ClosureExpr {")).expect("unable to write to ThirPrinter");print_indented!(self, "ClosureExpr {", depth_lvl);
875        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("closure_id: {0:?}",
                            closure_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("closure_id: {:?}", closure_id), depth_lvl + 1);
876        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("args: {0:?}", args))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("args: {:?}", args), depth_lvl + 1);
877
878        if upvars.len() > 0 {
879            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "upvars: [")).expect("unable to write to ThirPrinter");print_indented!(self, "upvars: [", depth_lvl + 1);
880            for upvar in upvars.iter() {
881                self.print_expr(*upvar, depth_lvl + 2);
882                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ",")).expect("unable to write to ThirPrinter");print_indented!(self, ",", depth_lvl + 1);
883            }
884            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
885        } else {
886            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "upvars: []")).expect("unable to write to ThirPrinter");print_indented!(self, "upvars: []", depth_lvl + 1);
887        }
888
889        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("movability: {0:?}",
                            movability))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("movability: {:?}", movability), depth_lvl + 1);
890
891        if fake_reads.len() > 0 {
892            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "fake_reads: [")).expect("unable to write to ThirPrinter");print_indented!(self, "fake_reads: [", depth_lvl + 1);
893            for (fake_read_expr, cause, hir_id) in fake_reads.iter() {
894                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "(")).expect("unable to write to ThirPrinter");print_indented!(self, "(", depth_lvl + 2);
895                self.print_expr(*fake_read_expr, depth_lvl + 3);
896                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ",")).expect("unable to write to ThirPrinter");print_indented!(self, ",", depth_lvl + 2);
897                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("cause: {0:?}", cause))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("cause: {:?}", cause), depth_lvl + 3);
898                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ",")).expect("unable to write to ThirPrinter");print_indented!(self, ",", depth_lvl + 2);
899                self.indent(depth_lvl + 3);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("hir_id: {0:?}", hir_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("hir_id: {:?}", hir_id), depth_lvl + 3);
900                self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            "),")).expect("unable to write to ThirPrinter");print_indented!(self, "),", depth_lvl + 2);
901            }
902            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
903        } else {
904            self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "fake_reads: []")).expect("unable to write to ThirPrinter");print_indented!(self, "fake_reads: []", depth_lvl + 1);
905        }
906
907        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
908    }
909
910    fn print_inline_asm_expr(&mut self, expr: &InlineAsmExpr<'tcx>, depth_lvl: usize) {
911        let InlineAsmExpr { asm_macro, template, operands, options, line_spans } = expr;
912
913        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmExpr {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmExpr {", depth_lvl);
914
915        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("asm_macro: {0:?}",
                            asm_macro))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("asm_macro: {:?}", asm_macro), depth_lvl + 1);
916
917        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "template: [")).expect("unable to write to ThirPrinter");print_indented!(self, "template: [", depth_lvl + 1);
918        for template_piece in template.iter() {
919            self.indent(depth_lvl + 2);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("{0:?}", template_piece))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("{:?}", template_piece), depth_lvl + 2);
920        }
921        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
922
923        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "operands: [")).expect("unable to write to ThirPrinter");print_indented!(self, "operands: [", depth_lvl + 1);
924        for operand in operands.iter() {
925            self.print_inline_operand(operand, depth_lvl + 2);
926        }
927        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "]")).expect("unable to write to ThirPrinter");print_indented!(self, "]", depth_lvl + 1);
928
929        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("options: {0:?}",
                            options))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("options: {:?}", options), depth_lvl + 1);
930        self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("line_spans: {0:?}",
                            line_spans))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("line_spans: {:?}", line_spans), depth_lvl + 1);
931
932        self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl);
933    }
934
935    fn print_inline_operand(&mut self, operand: &InlineAsmOperand<'tcx>, depth_lvl: usize) {
936        match operand {
937            InlineAsmOperand::In { reg, expr } => {
938                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::In {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::In {", depth_lvl);
939                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("reg: {0:?}", reg))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("reg: {:?}", reg), depth_lvl + 1);
940                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr: ")).expect("unable to write to ThirPrinter");print_indented!(self, "expr: ", depth_lvl + 1);
941                self.print_expr(*expr, depth_lvl + 2);
942                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
943            }
944            InlineAsmOperand::Out { reg, late, expr } => {
945                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::Out {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::Out {", depth_lvl);
946                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("reg: {0:?}", reg))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("reg: {:?}", reg), depth_lvl + 1);
947                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("late: {0:?}", late))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("late: {:?}", late), depth_lvl + 1);
948
949                if let Some(out) = expr {
950                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "place: Some( ")).expect("unable to write to ThirPrinter");print_indented!(self, "place: Some( ", depth_lvl + 1);
951                    self.print_expr(*out, depth_lvl + 2);
952                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 1);
953                } else {
954                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "place: None")).expect("unable to write to ThirPrinter");print_indented!(self, "place: None", depth_lvl + 1);
955                }
956                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
957            }
958            InlineAsmOperand::InOut { reg, late, expr } => {
959                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::InOut {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::InOut {", depth_lvl);
960                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("reg: {0:?}", reg))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("reg: {:?}", reg), depth_lvl + 1);
961                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("late: {0:?}", late))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("late: {:?}", late), depth_lvl + 1);
962                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "expr: ")).expect("unable to write to ThirPrinter");print_indented!(self, "expr: ", depth_lvl + 1);
963                self.print_expr(*expr, depth_lvl + 2);
964                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
965            }
966            InlineAsmOperand::SplitInOut { reg, late, in_expr, out_expr } => {
967                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::SplitInOut {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::SplitInOut {", depth_lvl);
968                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("reg: {0:?}", reg))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("reg: {:?}", reg), depth_lvl + 1);
969                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("late: {0:?}", late))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("late: {:?}", late), depth_lvl + 1);
970                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "in_expr: ")).expect("unable to write to ThirPrinter");print_indented!(self, "in_expr: ", depth_lvl + 1);
971                self.print_expr(*in_expr, depth_lvl + 2);
972
973                if let Some(out_expr) = out_expr {
974                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "out_expr: Some( ")).expect("unable to write to ThirPrinter");print_indented!(self, "out_expr: Some( ", depth_lvl + 1);
975                    self.print_expr(*out_expr, depth_lvl + 2);
976                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ")")).expect("unable to write to ThirPrinter");print_indented!(self, ")", depth_lvl + 1);
977                } else {
978                    self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "out_expr: None")).expect("unable to write to ThirPrinter");print_indented!(self, "out_expr: None", depth_lvl + 1);
979                }
980
981                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
982            }
983            InlineAsmOperand::Const { value, span } => {
984                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::Const {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::Const {", depth_lvl);
985                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("value: {0:?}", value))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("value: {:?}", value), depth_lvl + 1);
986                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("span: {0:?}", span))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("span: {:?}", span), depth_lvl + 1);
987                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
988            }
989            InlineAsmOperand::SymFn { value } => {
990                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::SymFn {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::SymFn {", depth_lvl);
991                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "value: ")).expect("unable to write to ThirPrinter");print_indented!(self, "value: ", depth_lvl + 1);
992                self.print_expr(*value, depth_lvl + 2);
993                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
994            }
995            InlineAsmOperand::SymStatic { def_id } => {
996                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::SymStatic {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::SymStatic {", depth_lvl);
997                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            ::alloc::__export::must_use({
                    ::alloc::fmt::format(format_args!("def_id: {0:?}", def_id))
                }))).expect("unable to write to ThirPrinter");print_indented!(self, format!("def_id: {:?}", def_id), depth_lvl + 1);
998                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
999            }
1000            InlineAsmOperand::Label { block } => {
1001                self.indent(depth_lvl);
self.write_fmt(format_args!("{0}\n",
            "InlineAsmOperand::Block {")).expect("unable to write to ThirPrinter");print_indented!(self, "InlineAsmOperand::Block {", depth_lvl);
1002                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "block:")).expect("unable to write to ThirPrinter");print_indented!(self, "block:", depth_lvl + 1);
1003                self.print_block(*block, depth_lvl + 2);
1004                self.indent(depth_lvl + 1);
self.write_fmt(format_args!("{0}\n",
            "}")).expect("unable to write to ThirPrinter");print_indented!(self, "}", depth_lvl + 1);
1005            }
1006        }
1007    }
1008}