Permalink
Please
sign in to comment.
Browse files
Move FatalError to syntax_pos
This is a bit unfortunate, but code needs to be able to fatally error early on (in particular, syntax_pos after we move SourceMap there). It's also a tiny bit of code, which means it's ultimately not that bad.
- Loading branch information
Showing
with
32 additions
and 30 deletions.
- +1 −30 src/librustc_errors/lib.rs
- +30 −0 src/libsyntax_pos/fatal_error.rs
- +1 −0 src/libsyntax_pos/lib.rs
@@ -0,0 +1,30 @@ | ||
/// Used as a return value to signify a fatal error occurred. (It is also | ||
/// used as the argument to panic at the moment, but that will eventually | ||
/// not be true.) | ||
#[derive(Copy, Clone, Debug)] | ||
#[must_use] | ||
pub struct FatalError; | ||
|
||
pub struct FatalErrorMarker; | ||
|
||
// Don't implement Send on FatalError. This makes it impossible to panic!(FatalError). | ||
// We don't want to invoke the panic handler and print a backtrace for fatal errors. | ||
impl !Send for FatalError {} | ||
|
||
impl FatalError { | ||
pub fn raise(self) -> ! { | ||
std::panic::resume_unwind(Box::new(FatalErrorMarker)) | ||
} | ||
} | ||
|
||
impl std::fmt::Display for FatalError { | ||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
write!(f, "parser fatal error") | ||
} | ||
} | ||
|
||
impl std::error::Error for FatalError { | ||
fn description(&self) -> &str { | ||
"The parser has encountered a fatal error" | ||
} | ||
} |
0 comments on commit
e1a87ca