@@ -47,8 +47,18 @@ which is useful to keep peak memory in check. Having a THIR representation of
4747all bodies of a crate in memory at the same time would be very heavy.
4848
4949You can get a debug representation of the THIR by passing the ` -Zunpretty=thir-tree ` flag
50- to ` rustc ` . Here is how a function with just the statement ` let x = 1 + 2; ` gets represented in
51- THIR:
50+ to ` rustc ` .
51+
52+ To demonstrate, let's use the following example:
53+
54+ ``` rust
55+ fn main () {
56+ let x = 1 + 2 ;
57+ }
58+ ```
59+
60+ Here is how that gets represented in THIR (as of <!-- date-check --> Aug 2022):
61+
5262``` rust
5363Thir {
5464 // no match arms
@@ -57,65 +67,83 @@ Thir {
5767 // expression 0, a literal with a value of 1
5868 Expr {
5969 ty : i32 ,
60- temp_lifetime : Some (Node (6 )),
70+ temp_lifetime : Some (
71+ Node (1 ),
72+ ),
6173 span : oneplustwo . rs: 2 : 13 : 2 : 14 (#0 ),
6274 kind : Literal {
63- literal : Const {
64- ty : i32 ,
65- val : Value (Scalar (0x00000001 )),
75+ lit : Spanned {
76+ node : Int (
77+ 1 ,
78+ Unsuffixed ,
79+ ),
80+ span : oneplustwo . rs: 2 : 13 : 2 : 14 (#0 ),
6681 },
67- user_ty : None ,
68- const_id : None ,
82+ neg : false ,
6983 },
7084 },
7185 // expression 1, scope surronding literal 1
7286 Expr {
7387 ty : i32 ,
74- temp_lifetime : Some (Node (6 )),
88+ temp_lifetime : Some (
89+ Node (1 ),
90+ ),
7591 span : oneplustwo . rs: 2 : 13 : 2 : 14 (#0 ),
7692 kind : Scope {
77- region_scope : Node (1 ),
78- lint_level : Explicit (HirId {
79- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
80- local_id : 1 ,
81- }),
8293 // reference to expression 0 above
94+ region_scope : Node (3 ),
95+ lint_level : Explicit (
96+ HirId {
97+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
98+ local_id : 3 ,
99+ },
100+ ),
83101 value : e0 ,
84102 },
85103 },
86104 // expression 2, literal 2
87105 Expr {
88106 ty : i32 ,
89- temp_lifetime : Some (Node (6 )),
107+ temp_lifetime : Some (
108+ Node (1 ),
109+ ),
90110 span : oneplustwo . rs: 2 : 17 : 2 : 18 (#0 ),
91111 kind : Literal {
92- literal : Const {
93- ty : i32 ,
94- val : Value (Scalar (0x00000002 )),
112+ lit : Spanned {
113+ node : Int (
114+ 2 ,
115+ Unsuffixed ,
116+ ),
117+ span : oneplustwo . rs: 2 : 17 : 2 : 18 (#0 ),
95118 },
96- user_ty : None ,
97- const_id : None ,
119+ neg : false ,
98120 },
99121 },
100122 // expression 3, scope surrounding literal 2
101123 Expr {
102124 ty : i32 ,
103- temp_lifetime : Some (Node (6 )),
125+ temp_lifetime : Some (
126+ Node (1 ),
127+ ),
104128 span : oneplustwo . rs: 2 : 17 : 2 : 18 (#0 ),
105129 kind : Scope {
106- region_scope : Node (2 ),
107- lint_level : Explicit (HirId {
108- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
109- local_id : 2 ,
110- }),
130+ region_scope : Node (4 ),
131+ lint_level : Explicit (
132+ HirId {
133+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
134+ local_id : 4 ,
135+ },
136+ ),
111137 // reference to expression 2 above
112138 value : e2 ,
113139 },
114140 },
115141 // expression 4, represents 1 + 2
116142 Expr {
117143 ty : i32 ,
118- temp_lifetime : Some (Node (6 )),
144+ temp_lifetime : Some (
145+ Node (1 ),
146+ ),
119147 span : oneplustwo . rs: 2 : 13 : 2 : 18 (#0 ),
120148 kind : Binary {
121149 op : Add ,
@@ -127,30 +155,38 @@ Thir {
127155 // expression 5, scope surronding expression 4
128156 Expr {
129157 ty : i32 ,
130- temp_lifetime : Some (Node (6 )),
158+ temp_lifetime : Some (
159+ Node (1 ),
160+ ),
131161 span : oneplustwo . rs: 2 : 13 : 2 : 18 (#0 ),
132162 kind : Scope {
133- region_scope : Node (3 ),
134- lint_level : Explicit (HirId {
135- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
136- local_id : 3 ,
137- }),
163+ region_scope : Node (5 ),
164+ lint_level : Explicit (
165+ HirId {
166+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
167+ local_id : 5 ,
168+ },
169+ ),
138170 value : e4 ,
139171 },
140172 },
141173 // expression 6, block around statement
142174 Expr {
143175 ty : (),
144- temp_lifetime : Some (Node (8 )),
176+ temp_lifetime : Some (
177+ Node (9 ),
178+ ),
145179 span : oneplustwo . rs: 1 : 11 : 3 : 2 (#0 ),
146180 kind : Block {
147181 body : Block {
148182 targeted_by_break : false ,
149- region_scope : Node (7 ),
183+ region_scope : Node (8 ),
150184 opt_destruction_scope : None ,
151185 span : oneplustwo . rs: 1 : 11 : 3 : 2 (#0 ),
152186 // reference to statement 0 below
153- stmts : [ s0 ],
187+ stmts : [
188+ s0 ,
189+ ],
154190 expr : None ,
155191 safety_mode : Safe ,
156192 },
@@ -160,25 +196,29 @@ Thir {
160196 Expr {
161197 ty : (),
162198 temp_lifetime : Some (
163- Node (8 ),
199+ Node (9 ),
164200 ),
165201 span : oneplustwo . rs: 1 : 11 : 3 : 2 (#0 ),
166202 kind : Scope {
167- region_scope : Node (8 ),
168- lint_level : Explicit (HirId {
169- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
170- local_id : 8 ,
171- }),
203+ region_scope : Node (9 ),
204+ lint_level : Explicit (
205+ HirId {
206+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
207+ local_id : 9 ,
208+ },
209+ ),
172210 value : e6 ,
173211 },
174212 },
175213 // destruction scope around expression 7
176214 Expr {
177215 ty : (),
178- temp_lifetime : Some (Node (8 )),
216+ temp_lifetime : Some (
217+ Node (9 ),
218+ ),
179219 span : oneplustwo . rs: 1 : 11 : 3 : 2 (#0 ),
180220 kind : Scope {
181- region_scope : Destruction (8 ),
221+ region_scope : Destruction (9 ),
182222 lint_level : Inherited ,
183223 value : e7 ,
184224 },
@@ -188,31 +228,40 @@ Thir {
188228 // let statement
189229 Stmt {
190230 kind : Let {
191- remainder_scope : Remainder { block : 7 , first_statement_index : 0 },
192- init_scope : Node (6 ),
231+ remainder_scope : Remainder { block : 8 , first_statement_index : 0 },
232+ init_scope : Node (1 ),
193233 pattern : Pat {
194234 ty : i32 ,
195235 span : oneplustwo . rs: 2 : 9 : 2 : 10 (#0 ),
196236 kind : Binding {
197237 mutability : Not ,
198238 name : " x" ,
199239 mode : ByValue ,
200- var : HirId {
201- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
202- local_id : 5 ,
203- },
240+ var : LocalVarId (
241+ HirId {
242+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
243+ local_id : 7 ,
244+ },
245+ ),
204246 ty : i32 ,
205247 subpattern : None ,
206248 is_primary : true ,
207249 },
208250 },
209- initializer : Some (e5 ),
210- lint_level : Explicit (HirId {
211- owner : DefId (0 : 3 ~ oneplustwo [6ccc ]:: main ),
212- local_id : 4 ,
213- }),
251+ initializer : Some (
252+ e5 ,
253+ ),
254+ else_block : None ,
255+ lint_level : Explicit (
256+ HirId {
257+ owner : DefId (0 : 3 ~ oneplustwo [6932 ]:: main ),
258+ local_id : 6 ,
259+ },
260+ ),
214261 },
215- opt_destruction_scope : Some (Destruction (6 )),
262+ opt_destruction_scope : Some (
263+ Destruction (1 ),
264+ ),
216265 },
217266 ],
218267}
0 commit comments