Implement traits for parser error structs

Implement `Debug`, `Display` and `Error` for `FatalError` and `ExplicitBug`
This commit is contained in:
Adolfo Ochagavía 2015-04-15 11:17:58 +02:00
parent af1c39cbd9
commit 9891ea74d6

View File

@ -13,17 +13,14 @@
pub use self::ColorConfig::*;
use self::Destination::*;
use codemap::{COMMAND_LINE_SP, COMMAND_LINE_EXPN, Pos, Span};
use codemap;
use codemap::{self, COMMAND_LINE_SP, COMMAND_LINE_EXPN, Pos, Span};
use diagnostics;
use std::cell::{RefCell, Cell};
use std::cmp;
use std::fmt;
use std::{cmp, error, fmt};
use std::io::prelude::*;
use std::io;
use term::WriterWrapper;
use term;
use term::{self, WriterWrapper};
use libc;
/// maximum number of lines we will print for each error; arbitrary.
@ -83,15 +80,39 @@ fn custom_emit(&mut self, cm: &codemap::CodeMap,
/// 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)]
#[derive(Copy, Clone, Debug)]
#[must_use]
pub struct FatalError;
impl fmt::Display for FatalError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
write!(f, "parser fatal error")
}
}
impl error::Error for FatalError {
fn description(&self) -> &str {
"The parser has encountered a fatal error"
}
}
/// Signifies that the compiler died with an explicit call to `.bug`
/// or `.span_bug` rather than a failed assertion, etc.
#[derive(Copy, Clone)]
#[derive(Copy, Clone, Debug)]
pub struct ExplicitBug;
impl fmt::Display for ExplicitBug {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
write!(f, "parser internal bug")
}
}
impl error::Error for ExplicitBug {
fn description(&self) -> &str {
"The parser has encountered an internal bug"
}
}
/// A span-handler is like a handler but also
/// accepts span information for source-location
/// reporting.