@@ -48,12 +48,10 @@ use std::fs;
4848use std:: io:: { self , Write } ;
4949use std:: path:: { Path , PathBuf } ;
5050use syntax:: ast:: { self , NodeIdAssigner } ;
51- use syntax:: attr;
52- use syntax:: attr:: AttrMetaMethods ;
51+ use syntax:: attr:: { self , AttrMetaMethods } ;
5352use syntax:: diagnostics;
5453use syntax:: fold:: Folder ;
55- use syntax:: parse;
56- use syntax:: parse:: token;
54+ use syntax:: parse:: { self , PResult , token} ;
5755use syntax:: util:: node_count:: NodeCounter ;
5856use syntax:: visit;
5957use syntax;
@@ -86,7 +84,7 @@ pub fn compile_input(sess: &Session,
8684 // possible to keep the peak memory usage low
8785 let ( outputs, trans) = {
8886 let ( outputs, expanded_crate, id) = {
89- let krate = phase_1_parse_input ( sess, cfg, input) ;
87+ let krate = panictry ! ( phase_1_parse_input( sess, cfg, input) ) ;
9088
9189 controller_entry_point ! ( after_parse,
9290 sess,
@@ -415,17 +413,20 @@ impl<'a, 'ast, 'tcx> CompileState<'a, 'ast, 'tcx> {
415413 }
416414}
417415
418- pub fn phase_1_parse_input ( sess : & Session , cfg : ast:: CrateConfig , input : & Input ) -> ast:: Crate {
416+ pub fn phase_1_parse_input < ' a > ( sess : & ' a Session ,
417+ cfg : ast:: CrateConfig ,
418+ input : & Input )
419+ -> PResult < ' a , ast:: Crate > {
419420 // These may be left in an incoherent state after a previous compile.
420421 // `clear_tables` and `get_ident_interner().clear()` can be used to free
421422 // memory, but they do not restore the initial state.
422423 syntax:: ext:: mtwt:: reset_tables ( ) ;
423424 token:: reset_ident_interner ( ) ;
424425
425- let krate = time ( sess. time_passes ( ) , "parsing" , || {
426+ let krate = try! ( time ( sess. time_passes ( ) , "parsing" , || {
426427 match * input {
427428 Input :: File ( ref file) => {
428- parse:: parse_crate_from_file ( & ( * file) , cfg. clone ( ) , & sess. parse_sess )
429+ parse:: parse_crate_from_file ( file, cfg. clone ( ) , & sess. parse_sess )
429430 }
430431 Input :: Str ( ref src) => {
431432 parse:: parse_crate_from_source_str ( anon_src ( ) . to_string ( ) ,
@@ -434,7 +435,7 @@ pub fn phase_1_parse_input(sess: &Session, cfg: ast::CrateConfig, input: &Input)
434435 & sess. parse_sess )
435436 }
436437 }
437- } ) ;
438+ } ) ) ;
438439
439440 if sess. opts . debugging_opts . ast_json_noexpand {
440441 println ! ( "{}" , json:: as_json( & krate) ) ;
@@ -449,7 +450,7 @@ pub fn phase_1_parse_input(sess: &Session, cfg: ast::CrateConfig, input: &Input)
449450 syntax:: show_span:: run ( sess. diagnostic ( ) , s, & krate) ;
450451 }
451452
452- krate
453+ Ok ( krate)
453454}
454455
455456fn count_nodes ( krate : & ast:: Crate ) -> usize {
0 commit comments