@@ -372,27 +372,23 @@ fn run_compiler(
372
372
373
373
let handler = EarlyErrorHandler :: new( sess. opts. error_format) ;
374
374
375
- let should_stop = print_crate_info(
376
- & handler,
377
- & * * compiler. codegen_backend( ) ,
378
- compiler. session( ) ,
379
- has_input,
380
- ) ;
375
+ if print_crate_info( & handler, & * * compiler. codegen_backend( ) , compiler. session( ) , has_input)
376
+ == Compilation :: Stop
377
+ {
378
+ return sess. compile_status( ) ;
379
+ }
381
380
382
381
if !has_input {
383
- if should_stop == Compilation :: Continue {
384
- handler. early_error( "no input filename given" )
385
- }
386
- return sess. compile_status( ) ;
382
+ handler. early_error( "no input filename given" ) ;
387
383
}
388
384
389
- let should_stop = should_stop
390
- . and_then( || {
391
- list_metadata( & handler, sess, & * compiler. codegen_backend( ) . metadata_loader( ) )
392
- } )
393
- . and_then( || try_process_rlink( sess, compiler) ) ;
385
+ if !sess. opts. unstable_opts. ls. is_empty( ) {
386
+ list_metadata( & handler, & sess, & * compiler. codegen_backend( ) . metadata_loader( ) ) ;
387
+ return sess. compile_status( ) ;
388
+ }
394
389
395
- if should_stop == Compilation :: Stop {
390
+ if sess. opts. unstable_opts. link_only {
391
+ rlink( sess, compiler) ;
396
392
return sess. compile_status( ) ;
397
393
}
398
394
@@ -545,15 +541,6 @@ pub enum Compilation {
545
541
Continue ,
546
542
}
547
543
548
- impl Compilation {
549
- fn and_then<F : FnOnce ( ) -> Compilation >( self , next: F ) -> Compilation {
550
- match self {
551
- Compilation :: Stop => Compilation :: Stop ,
552
- Compilation :: Continue => next( ) ,
553
- }
554
- }
555
- }
556
-
557
544
fn handle_explain( handler: & EarlyErrorHandler , registry: Registry , code: & str , color: ColorConfig ) {
558
545
let upper_cased_code = code. to_ascii_uppercase( ) ;
559
546
let normalised =
@@ -658,70 +645,60 @@ fn show_md_content_with_pager(content: &str, color: ColorConfig) {
658
645
}
659
646
}
660
647
661
- fn try_process_rlink( sess: & Session , compiler: & interface:: Compiler ) -> Compilation {
662
- if sess. opts. unstable_opts. link_only {
663
- if let Input :: File ( file) = & sess. io. input {
664
- let outputs = compiler. build_output_filenames( sess, & [ ] ) ;
665
- let rlink_data = fs:: read( file) . unwrap_or_else( |err| {
666
- sess. emit_fatal( RlinkUnableToRead { err } ) ;
667
- } ) ;
668
- let codegen_results = match CodegenResults :: deserialize_rlink( sess, rlink_data) {
669
- Ok ( codegen) => codegen,
670
- Err ( err) => {
671
- match err {
672
- CodegenErrors :: WrongFileType => sess. emit_fatal( RLinkWrongFileType ) ,
673
- CodegenErrors :: EmptyVersionNumber => {
674
- sess. emit_fatal( RLinkEmptyVersionNumber )
675
- }
676
- CodegenErrors :: EncodingVersionMismatch { version_array, rlink_version } => {
677
- sess. emit_fatal( RLinkEncodingVersionMismatch {
678
- version_array,
679
- rlink_version,
680
- } )
681
- }
682
- CodegenErrors :: RustcVersionMismatch { rustc_version } => {
683
- sess. emit_fatal( RLinkRustcVersionMismatch {
684
- rustc_version,
685
- current_version: sess. cfg_version,
686
- } )
687
- }
688
- } ;
689
- }
690
- } ;
691
- let result = compiler. codegen_backend( ) . link( sess, codegen_results, & outputs) ;
692
- abort_on_err( result, sess) ;
693
- } else {
694
- sess. emit_fatal( RlinkNotAFile { } )
695
- }
696
- Compilation :: Stop
648
+ fn rlink( sess: & Session , compiler: & interface:: Compiler ) {
649
+ assert!( sess. opts. unstable_opts. link_only) ;
650
+ if let Input :: File ( file) = & sess. io. input {
651
+ let outputs = compiler. build_output_filenames( sess, & [ ] ) ;
652
+ let rlink_data = fs:: read( file) . unwrap_or_else( |err| {
653
+ sess. emit_fatal( RlinkUnableToRead { err } ) ;
654
+ } ) ;
655
+ let codegen_results = match CodegenResults :: deserialize_rlink( sess, rlink_data) {
656
+ Ok ( codegen) => codegen,
657
+ Err ( err) => {
658
+ match err {
659
+ CodegenErrors :: WrongFileType => sess. emit_fatal( RLinkWrongFileType ) ,
660
+ CodegenErrors :: EmptyVersionNumber => sess. emit_fatal( RLinkEmptyVersionNumber ) ,
661
+ CodegenErrors :: EncodingVersionMismatch { version_array, rlink_version } => sess
662
+ . emit_fatal( RLinkEncodingVersionMismatch { version_array, rlink_version } ) ,
663
+ CodegenErrors :: RustcVersionMismatch { rustc_version } => {
664
+ sess. emit_fatal( RLinkRustcVersionMismatch {
665
+ rustc_version,
666
+ current_version: sess. cfg_version,
667
+ } )
668
+ }
669
+ } ;
670
+ }
671
+ } ;
672
+ let result = compiler. codegen_backend( ) . link( sess, codegen_results, & outputs) ;
673
+ abort_on_err( result, sess) ;
697
674
} else {
698
- Compilation :: Continue
675
+ sess . emit_fatal ( RlinkNotAFile { } )
699
676
}
700
677
}
701
678
702
679
fn list_metadata(
703
680
handler: & EarlyErrorHandler ,
704
681
sess: & Session ,
705
682
metadata_loader: & dyn MetadataLoader ,
706
- ) -> Compilation {
707
- let ls_kinds = & sess. opts. unstable_opts. ls;
708
- if !ls_kinds. is_empty( ) {
709
- match sess. io. input {
710
- Input :: File ( ref ifile) => {
711
- let path = & ( * ifile) ;
712
- let mut v = Vec :: new( ) ;
713
- locator:: list_file_metadata( & sess. target, path, metadata_loader, & mut v, ls_kinds)
714
- . unwrap( ) ;
715
- safe_println!( "{}" , String :: from_utf8( v) . unwrap( ) ) ;
716
- }
717
- Input :: Str { .. } => {
718
- handler. early_error( "cannot list metadata for stdin" ) ;
719
- }
683
+ ) {
684
+ match sess. io. input {
685
+ Input :: File ( ref ifile) => {
686
+ let path = & ( * ifile) ;
687
+ let mut v = Vec :: new( ) ;
688
+ locator:: list_file_metadata(
689
+ & sess. target,
690
+ path,
691
+ metadata_loader,
692
+ & mut v,
693
+ & sess. opts. unstable_opts. ls,
694
+ )
695
+ . unwrap( ) ;
696
+ safe_println!( "{}" , String :: from_utf8( v) . unwrap( ) ) ;
697
+ }
698
+ Input :: Str { .. } => {
699
+ handler. early_error( "cannot list metadata for stdin" ) ;
720
700
}
721
- return Compilation :: Stop ;
722
701
}
723
-
724
- Compilation :: Continue
725
702
}
726
703
727
704
fn print_crate_info(
0 commit comments