diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-14 14:01:03 -0500 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-11-15 08:21:23 -0500 |
| commit | e1a87ca17a60aadae36b6785b7204610e02ee994 (patch) | |
| tree | 6331018f4507c9ba07abb79251aeeb40e6171f56 /src/libsyntax_pos | |
| parent | 82cf3a4486bc882207a09bf0d9e2dea4632781aa (diff) | |
| download | rust-e1a87ca17a60aadae36b6785b7204610e02ee994.tar.gz rust-e1a87ca17a60aadae36b6785b7204610e02ee994.zip | |
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.
Diffstat (limited to 'src/libsyntax_pos')
| -rw-r--r-- | src/libsyntax_pos/fatal_error.rs | 30 | ||||
| -rw-r--r-- | src/libsyntax_pos/lib.rs | 1 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/libsyntax_pos/fatal_error.rs b/src/libsyntax_pos/fatal_error.rs new file mode 100644 index 00000000000..cf7c677d59d --- /dev/null +++ b/src/libsyntax_pos/fatal_error.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" + } +} diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index a762d8af49a..50839638bb4 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -29,6 +29,7 @@ pub mod symbol; pub use symbol::{Symbol, sym}; mod analyze_source_file; +pub mod fatal_error; use rustc_data_structures::stable_hasher::StableHasher; use rustc_data_structures::sync::{Lrc, Lock}; |
