Move OutFileName writing into rustc_session
This commit is contained in:
parent
32cac2e002
commit
f2e3d3fc63
@ -15,5 +15,3 @@ driver_impl_rlink_rustc_version_mismatch = .rlink file was produced by rustc ver
|
|||||||
driver_impl_rlink_unable_to_read = failed to read rlink file: `{$err}`
|
driver_impl_rlink_unable_to_read = failed to read rlink file: `{$err}`
|
||||||
|
|
||||||
driver_impl_rlink_wrong_file_type = The input does not look like a .rlink file
|
driver_impl_rlink_wrong_file_type = The input does not look like a .rlink file
|
||||||
|
|
||||||
driver_impl_unpretty_dump_fail = pretty-print failed to write `{$path}` due to error `{$err}`
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
//! The various pretty-printing routines.
|
//! The various pretty-printing routines.
|
||||||
|
|
||||||
use crate::session_diagnostics::UnprettyDumpFail;
|
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::ErrorGuaranteed;
|
use rustc_errors::ErrorGuaranteed;
|
||||||
@ -358,17 +357,7 @@ fn get_source(sess: &Session) -> (String, FileName) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn write_or_print(out: &str, sess: &Session) {
|
fn write_or_print(out: &str, sess: &Session) {
|
||||||
match &sess.io.output_file {
|
sess.io.output_file.as_ref().unwrap_or(&OutFileName::Stdout).overwrite(out, sess);
|
||||||
None | Some(OutFileName::Stdout) => print!("{out}"),
|
|
||||||
Some(OutFileName::Real(p)) => {
|
|
||||||
if let Err(e) = std::fs::write(p, out) {
|
|
||||||
sess.emit_fatal(UnprettyDumpFail {
|
|
||||||
path: p.display().to_string(),
|
|
||||||
err: e.to_string(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_after_parsing(sess: &Session, krate: &ast::Crate, ppm: PpMode) {
|
pub fn print_after_parsing(sess: &Session, krate: &ast::Crate, ppm: PpMode) {
|
||||||
|
@ -32,13 +32,6 @@ pub(crate) struct RLinkRustcVersionMismatch<'a> {
|
|||||||
#[diag(driver_impl_rlink_no_a_file)]
|
#[diag(driver_impl_rlink_no_a_file)]
|
||||||
pub(crate) struct RlinkNotAFile;
|
pub(crate) struct RlinkNotAFile;
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
|
||||||
#[diag(driver_impl_unpretty_dump_fail)]
|
|
||||||
pub(crate) struct UnprettyDumpFail {
|
|
||||||
pub path: String,
|
|
||||||
pub err: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(driver_impl_ice)]
|
#[diag(driver_impl_ice)]
|
||||||
pub(crate) struct Ice;
|
pub(crate) struct Ice;
|
||||||
|
@ -26,6 +26,8 @@ session_feature_gate_error = {$explain}
|
|||||||
|
|
||||||
session_file_is_not_writeable = output file {$file} is not writeable -- check its permissions
|
session_file_is_not_writeable = output file {$file} is not writeable -- check its permissions
|
||||||
|
|
||||||
|
session_file_write_fail = failed to write `{$path}` due to error `{$err}`
|
||||||
|
|
||||||
session_hexadecimal_float_literal_not_supported = hexadecimal float literal is not supported
|
session_hexadecimal_float_literal_not_supported = hexadecimal float literal is not supported
|
||||||
|
|
||||||
session_incompatible_linker_flavor = linker flavor `{$flavor}` is incompatible with the current target
|
session_incompatible_linker_flavor = linker flavor `{$flavor}` is incompatible with the current target
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
pub use crate::options::*;
|
pub use crate::options::*;
|
||||||
|
|
||||||
|
use crate::errors::FileWriteFail;
|
||||||
use crate::search_paths::SearchPath;
|
use crate::search_paths::SearchPath;
|
||||||
use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
|
use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
|
||||||
use crate::{lint, HashStableContext};
|
use crate::{lint, HashStableContext};
|
||||||
@ -31,6 +32,7 @@ use std::collections::btree_map::{
|
|||||||
use std::collections::{BTreeMap, BTreeSet};
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
use std::ffi::OsStr;
|
use std::ffi::OsStr;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
use std::fs;
|
||||||
use std::hash::Hash;
|
use std::hash::Hash;
|
||||||
use std::iter;
|
use std::iter;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
@ -861,6 +863,17 @@ impl OutFileName {
|
|||||||
OutFileName::Stdout => outputs.temp_path(flavor, codegen_unit_name),
|
OutFileName::Stdout => outputs.temp_path(flavor, codegen_unit_name),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn overwrite(&self, content: &str, sess: &Session) {
|
||||||
|
match self {
|
||||||
|
OutFileName::Stdout => print!("{content}"),
|
||||||
|
OutFileName::Real(path) => {
|
||||||
|
if let Err(e) = fs::write(path, content) {
|
||||||
|
sess.emit_fatal(FileWriteFail { path, err: e.to_string() });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Hash, Debug, HashStable_Generic)]
|
#[derive(Clone, Hash, Debug, HashStable_Generic)]
|
||||||
|
@ -163,6 +163,13 @@ pub struct FileIsNotWriteable<'a> {
|
|||||||
pub file: &'a std::path::Path,
|
pub file: &'a std::path::Path,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(session_file_write_fail)]
|
||||||
|
pub(crate) struct FileWriteFail<'a> {
|
||||||
|
pub path: &'a std::path::Path,
|
||||||
|
pub err: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(session_crate_name_does_not_match)]
|
#[diag(session_crate_name_does_not_match)]
|
||||||
pub struct CrateNameDoesNotMatch {
|
pub struct CrateNameDoesNotMatch {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
error: pretty-print failed to write `/tmp/` due to $ERROR_MESSAGE
|
error: failed to write `/tmp/` due to $ERROR_MESSAGE
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user