UPDATE - accept dyn error and make Box<dyn error> conform to IntoDiagnosticArg
This commit is contained in:
parent
28491a7b36
commit
540c3f94d7
3 changed files with 22 additions and 22 deletions
|
@ -35,30 +35,29 @@ pub trait ArchiveBuilderBuilder {
|
||||||
outdir: &Path,
|
outdir: &Path,
|
||||||
bundled_lib_file_names: &FxHashSet<Symbol>,
|
bundled_lib_file_names: &FxHashSet<Symbol>,
|
||||||
) -> Result<(), ExtractBundledLibsError<'_>> {
|
) -> Result<(), ExtractBundledLibsError<'_>> {
|
||||||
let archive_map =
|
let archive_map = unsafe {
|
||||||
unsafe {
|
Mmap::map(
|
||||||
Mmap::map(File::open(rlib).map_err(|e| ExtractBundledLibsError::OpenFile {
|
File::open(rlib)
|
||||||
rlib,
|
.map_err(|e| ExtractBundledLibsError::OpenFile { rlib, error: Box::new(e) })?,
|
||||||
error: e.to_string(),
|
)
|
||||||
})?)
|
.map_err(|e| ExtractBundledLibsError::MmapFile { rlib, error: Box::new(e) })?
|
||||||
.map_err(|e| ExtractBundledLibsError::MmapFile { rlib, error: e.to_string() })?
|
};
|
||||||
};
|
|
||||||
let archive = ArchiveFile::parse(&*archive_map)
|
let archive = ArchiveFile::parse(&*archive_map)
|
||||||
.map_err(|e| ExtractBundledLibsError::ParseArchive { rlib, error: e.to_string() })?;
|
.map_err(|e| ExtractBundledLibsError::ParseArchive { rlib, error: Box::new(e) })?;
|
||||||
|
|
||||||
for entry in archive.members() {
|
for entry in archive.members() {
|
||||||
let entry = entry
|
let entry = entry
|
||||||
.map_err(|e| ExtractBundledLibsError::ReadEntry { rlib, error: e.to_string() })?;
|
.map_err(|e| ExtractBundledLibsError::ReadEntry { rlib, error: Box::new(e) })?;
|
||||||
let data = entry.data(&*archive_map).map_err(|e| {
|
let data = entry
|
||||||
ExtractBundledLibsError::ArchiveMember { rlib, error: e.to_string() }
|
.data(&*archive_map)
|
||||||
})?;
|
.map_err(|e| ExtractBundledLibsError::ArchiveMember { rlib, error: Box::new(e) })?;
|
||||||
let name = std::str::from_utf8(entry.name())
|
let name = std::str::from_utf8(entry.name())
|
||||||
.map_err(|e| ExtractBundledLibsError::ConvertName { rlib, error: e.to_string() })?;
|
.map_err(|e| ExtractBundledLibsError::ConvertName { rlib, error: Box::new(e) })?;
|
||||||
if !bundled_lib_file_names.contains(&Symbol::intern(name)) {
|
if !bundled_lib_file_names.contains(&Symbol::intern(name)) {
|
||||||
continue; // We need to extract only native libraries.
|
continue; // We need to extract only native libraries.
|
||||||
}
|
}
|
||||||
std::fs::write(&outdir.join(&name), data)
|
std::fs::write(&outdir.join(&name), data)
|
||||||
.map_err(|e| ExtractBundledLibsError::WriteFile { rlib, error: e.to_string() })?;
|
.map_err(|e| ExtractBundledLibsError::WriteFile { rlib, error: Box::new(e) })?;
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -488,25 +488,25 @@ pub struct OptionGccOnly;
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
pub enum ExtractBundledLibsError<'a> {
|
pub enum ExtractBundledLibsError<'a> {
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_open_file)]
|
#[diag(codegen_ssa_extract_bundled_libs_open_file)]
|
||||||
OpenFile { rlib: &'a Path, error: String },
|
OpenFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_mmap_file)]
|
#[diag(codegen_ssa_extract_bundled_libs_mmap_file)]
|
||||||
MmapFile { rlib: &'a Path, error: String },
|
MmapFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_parse_archive)]
|
#[diag(codegen_ssa_extract_bundled_libs_parse_archive)]
|
||||||
ParseArchive { rlib: &'a Path, error: String },
|
ParseArchive { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_read_entry)]
|
#[diag(codegen_ssa_extract_bundled_libs_read_entry)]
|
||||||
ReadEntry { rlib: &'a Path, error: String },
|
ReadEntry { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_archive_member)]
|
#[diag(codegen_ssa_extract_bundled_libs_archive_member)]
|
||||||
ArchiveMember { rlib: &'a Path, error: String },
|
ArchiveMember { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_convert_name)]
|
#[diag(codegen_ssa_extract_bundled_libs_convert_name)]
|
||||||
ConvertName { rlib: &'a Path, error: String },
|
ConvertName { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
|
|
||||||
#[diag(codegen_ssa_extract_bundled_libs_write_file)]
|
#[diag(codegen_ssa_extract_bundled_libs_write_file)]
|
||||||
WriteFile { rlib: &'a Path, error: String },
|
WriteFile { rlib: &'a Path, error: Box<dyn std::error::Error> },
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
|
|
|
@ -59,6 +59,7 @@ into_diagnostic_arg_using_display!(
|
||||||
i128,
|
i128,
|
||||||
u128,
|
u128,
|
||||||
std::io::Error,
|
std::io::Error,
|
||||||
|
std::boxed::Box<dyn std::error::Error>,
|
||||||
std::num::NonZeroU32,
|
std::num::NonZeroU32,
|
||||||
hir::Target,
|
hir::Target,
|
||||||
Edition,
|
Edition,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue