cranelift-isle: Rewrite error reporting (#5318)
There were several issues with ISLE's existing error reporting implementation. - When using Miette for more readable error reports, it would panic if errors were reported from multiple files in the same run. - Miette is pretty heavy-weight for what we're doing, with a lot of dependencies. - The `Error::Errors` enum variant led to normalization steps in many places, to avoid using that variant to represent a single error. This commit: - replaces Miette with codespan-reporting - gets rid of a bunch of cargo-vet exemptions - replaces the `Error::Errors` variant with a new `Errors` type - removes source info from `Error` variants so they're easy to construct - adds source info only when formatting `Errors` - formats `Errors` with a custom `Debug` impl - shares common code between ISLE's callers, islec and cranelift-codegen - includes a source snippet even with fancy-errors disabled I tried to make this a series of smaller commits but I couldn't find any good split points; everything was too entangled with everything else.
This commit is contained in:
@@ -1,18 +1,16 @@
|
||||
//! Helper for autogenerated unit tests.
|
||||
|
||||
use cranelift_isle::error::Result;
|
||||
use cranelift_isle::{compile, lexer, parser};
|
||||
use cranelift_isle::compile;
|
||||
use cranelift_isle::error::Errors;
|
||||
use std::default::Default;
|
||||
|
||||
fn build(filename: &str) -> Result<String> {
|
||||
let lexer = lexer::Lexer::from_files(vec![filename])?;
|
||||
let defs = parser::parse(lexer)?;
|
||||
compile::compile(&defs, &Default::default())
|
||||
fn build(filename: &str) -> Result<String, Errors> {
|
||||
compile::from_files(&[filename], &Default::default())
|
||||
}
|
||||
|
||||
pub fn run_pass(filename: &str) {
|
||||
if let Err(err) = build(filename) {
|
||||
panic!("pass test failed:\n{}", err);
|
||||
panic!("pass test failed:\n{:?}", err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user