@@ -172,73 +172,75 @@ pub enum compile_upto {
172
172
173
173
// For continuing compilation after a parsed crate has been
174
174
// modified
175
+
176
+
175
177
#[ fixed_stack_segment]
176
178
pub fn compile_rest( sess : Session ,
177
179
cfg : ast:: crate_cfg ,
178
180
upto : compile_upto ,
179
181
outputs : Option < @OutputFilenames > ,
180
182
curr : Option < @ast:: crate > )
181
- -> ( @ast:: crate , Option < ty:: ctxt > ) {
183
+ -> ( Option < @ast:: crate > , Option < ty:: ctxt > ) {
184
+
182
185
let time_passes = sess. time_passes ( ) ;
183
- let mut crate = curr. get ( ) ;
184
186
185
- * sess. building_library = session:: building_library (
186
- sess. opts . crate_type , crate , sess. opts . test ) ;
187
+ let ( llmod, link_meta) = {
187
188
188
- crate = time ( time_passes, ~"expansion", ||
189
- syntax:: ext:: expand:: expand_crate ( sess. parse_sess , copy cfg,
190
- crate ) ) ;
189
+ let mut crate = curr. unwrap ( ) ;
191
190
192
- crate = time ( time_passes , ~"configuration" , ||
193
- front :: config :: strip_unconfigured_items ( crate ) ) ;
191
+ * sess . building_library = session :: building_library (
192
+ sess . opts . crate_type , crate , sess . opts . test ) ;
194
193
195
- crate = time ( time_passes, ~"maybe building test harness", ||
196
- front:: test:: modify_for_testing ( sess, crate ) ) ;
194
+ crate = time ( time_passes, ~"expansion", ||
195
+ syntax:: ext:: expand:: expand_crate ( sess. parse_sess , copy cfg,
196
+ crate ) ) ;
197
197
198
- if upto == cu_expand { return ( crate , None ) ; }
198
+ crate = time ( time_passes, ~"configuration", ||
199
+ front:: config:: strip_unconfigured_items ( crate ) ) ;
199
200
200
- crate = time ( time_passes, ~"intrinsic injection ", ||
201
- front:: intrinsic_inject :: inject_intrinsic ( sess, crate ) ) ;
201
+ crate = time ( time_passes, ~"maybe building test harness ", ||
202
+ front:: test :: modify_for_testing ( sess, crate ) ) ;
202
203
203
- crate = time ( time_passes, ~"extra injection", ||
204
- front:: std_inject:: maybe_inject_libstd_ref ( sess, crate ) ) ;
204
+ if upto == cu_expand { return ( Some ( crate ) , None ) ; }
205
205
206
- let ast_map = time ( time_passes, ~"ast indexing ", ||
207
- syntax :: ast_map :: map_crate ( sess. diagnostic ( ) , crate ) ) ;
206
+ crate = time ( time_passes, ~"intrinsic injection ", ||
207
+ front :: intrinsic_inject :: inject_intrinsic ( sess, crate ) ) ;
208
208
209
- time ( time_passes, ~"external crate/lib resolution", ||
210
- creader:: read_crates ( sess. diagnostic ( ) , crate , sess. cstore ,
211
- sess. filesearch ,
212
- session:: sess_os_to_meta_os ( sess. targ_cfg . os ) ,
213
- sess. opts . is_static ,
214
- sess. parse_sess . interner ) ) ;
209
+ crate = time ( time_passes, ~"extra injection", ||
210
+ front:: std_inject:: maybe_inject_libstd_ref ( sess, crate ) ) ;
215
211
216
- let lang_items = time ( time_passes, ~"language item collection ", ||
217
- middle :: lang_items :: collect_language_items ( crate , sess ) ) ;
212
+ let ast_map = time ( time_passes, ~"ast indexing ", ||
213
+ syntax :: ast_map :: map_crate ( sess . diagnostic ( ) , crate ) ) ;
218
214
219
- let middle:: resolve:: CrateMap {
220
- def_map : def_map,
221
- exp_map2 : exp_map2,
222
- trait_map : trait_map
223
- } =
224
- time ( time_passes, ~"resolution", ||
225
- middle:: resolve:: resolve_crate ( sess, lang_items, crate ) ) ;
215
+ time ( time_passes, ~"external crate/lib resolution", ||
216
+ creader:: read_crates ( sess. diagnostic ( ) , crate , sess. cstore ,
217
+ sess. filesearch ,
218
+ session:: sess_os_to_meta_os ( sess. targ_cfg . os ) ,
219
+ sess. opts . is_static ,
220
+ sess. parse_sess . interner ) ) ;
226
221
227
- time ( time_passes, ~"looking for entry point" ,
228
- || middle:: entry :: find_entry_point ( sess , crate , ast_map ) ) ;
222
+ let lang_items = time ( time_passes, ~"language item collection" , ||
223
+ middle:: lang_items :: collect_language_items ( crate , sess ) ) ;
229
224
230
- let freevars = time ( time_passes, ~"freevar finding", ||
231
- freevars:: annotate_freevars ( def_map, crate ) ) ;
225
+ let middle:: resolve:: CrateMap {
226
+ def_map : def_map,
227
+ exp_map2 : exp_map2,
228
+ trait_map : trait_map
229
+ } =
230
+ time ( time_passes, ~"resolution", ||
231
+ middle:: resolve:: resolve_crate ( sess, lang_items, crate ) ) ;
232
232
233
- let region_map = time ( time_passes, ~"region resolution" , ||
234
- middle:: region :: resolve_crate ( sess, def_map , crate ) ) ;
233
+ time ( time_passes, ~"looking for entry point" ,
234
+ || middle:: entry :: find_entry_point ( sess, crate , ast_map ) ) ;
235
235
236
- let rp_set = time ( time_passes, ~"region parameterization inference ", ||
237
- middle :: region :: determine_rp_in_crate ( sess , ast_map , def_map, crate ) ) ;
236
+ let freevars = time ( time_passes, ~"freevar finding ", ||
237
+ freevars :: annotate_freevars ( def_map, crate ) ) ;
238
238
239
- let outputs = outputs. get ( ) ;
239
+ let region_map = time ( time_passes, ~"region resolution", ||
240
+ middle:: region:: resolve_crate ( sess, def_map, crate ) ) ;
240
241
241
- let ( llmod, link_meta) = {
242
+ let rp_set = time ( time_passes, ~"region parameterization inference", ||
243
+ middle:: region:: determine_rp_in_crate ( sess, ast_map, def_map, crate ) ) ;
242
244
243
245
let ty_cx = ty:: mk_ctxt ( sess, def_map, ast_map, freevars,
244
246
region_map, rp_set, lang_items) ;
@@ -255,7 +257,7 @@ pub fn compile_rest(sess: Session,
255
257
middle:: check_const:: check_crate ( sess, crate , ast_map, def_map,
256
258
method_map, ty_cx) ) ;
257
259
258
- if upto == cu_typeck { return ( crate , Some ( ty_cx) ) ; }
260
+ if upto == cu_typeck { return ( Some ( crate ) , Some ( ty_cx) ) ; }
259
261
260
262
time ( time_passes, ~"privacy checking", ||
261
263
middle:: privacy:: check_crate ( ty_cx, & method_map, crate ) ) ;
@@ -289,7 +291,7 @@ pub fn compile_rest(sess: Session,
289
291
time ( time_passes, ~"lint checking", ||
290
292
lint:: check_crate ( ty_cx, crate ) ) ;
291
293
292
- if upto == cu_no_trans { return ( crate , Some ( ty_cx) ) ; }
294
+ if upto == cu_no_trans { return ( Some ( crate ) , Some ( ty_cx) ) ; }
293
295
294
296
let maps = astencode:: Maps {
295
297
root_map : root_map,
@@ -300,13 +302,14 @@ pub fn compile_rest(sess: Session,
300
302
capture_map : capture_map
301
303
} ;
302
304
305
+ let outputs = outputs. get_ref ( ) ;
303
306
time ( time_passes, ~"translation", ||
304
307
trans:: base:: trans_crate ( sess, crate , ty_cx,
305
308
& outputs. obj_filename ,
306
309
exp_map2, maps) )
307
-
308
310
} ;
309
311
312
+ let outputs = outputs. get_ref ( ) ;
310
313
if ( sess. opts . debugging_opts & session:: print_link_args) != 0 {
311
314
io:: println( str:: connect( link:: link_args( sess,
312
315
& outputs. obj_filename, & outputs. out_filename, link_meta) , " " ) ) ;
@@ -335,24 +338,24 @@ pub fn compile_rest(sess: Session,
335
338
( sess. opts . is_static && * sess. building_library ) ||
336
339
sess. opts . jit ;
337
340
338
- if stop_after_codegen { return ( crate , None ) ; }
341
+ if stop_after_codegen { return ( None , None ) ; }
339
342
340
343
time ( time_passes, ~"linking", ||
341
344
link:: link_binary ( sess,
342
345
& outputs. obj_filename ,
343
346
& outputs. out_filename , link_meta) ) ;
344
347
345
- return ( crate , None ) ;
348
+ return ( None , None ) ;
346
349
}
347
350
348
351
pub fn compile_upto ( sess : Session , cfg : ast:: crate_cfg ,
349
352
input : & input , upto : compile_upto ,
350
353
outputs : Option < @OutputFilenames > )
351
- -> ( @ast:: crate , Option < ty:: ctxt > ) {
354
+ -> ( Option < @ast:: crate > , Option < ty:: ctxt > ) {
352
355
let time_passes = sess. time_passes ( ) ;
353
356
let crate = time ( time_passes, ~"parsing",
354
357
|| parse_input ( sess, copy cfg, input) ) ;
355
- if upto == cu_parse { return ( crate , None ) ; }
358
+ if upto == cu_parse { return ( Some ( crate ) , None ) ; }
356
359
357
360
compile_rest ( sess, cfg, upto, outputs, Some ( crate ) )
358
361
}
@@ -437,7 +440,7 @@ pub fn pretty_print_input(sess: Session, cfg: ast::crate_cfg, input: &input,
437
440
let src = sess.codemap.get_filemap(source_name(input)).src;
438
441
do io::with_str_reader(*src) |rdr| {
439
442
pprust::print_crate(sess.codemap, sess.parse_sess.interner,
440
- sess.span_diagnostic, crate,
443
+ sess.span_diagnostic, crate.unwrap() ,
441
444
source_name(input),
442
445
rdr, io::stdout(), ann, is_expanded);
443
446
}
0 commit comments