Skip to content

Commit

Permalink
Implement traits for parser error structs
Browse files Browse the repository at this point in the history
Implement `Debug`, `Display` and `Error` for `FatalError` and `ExplicitBug`
  • Loading branch information
aochagavia committed Apr 15, 2015
1 parent af1c39c commit 9891ea7
Showing 1 changed file with 29 additions and 8 deletions.
37 changes: 29 additions & 8 deletions src/libsyntax/diagnostic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,14 @@ pub use self::RenderSpan::*;
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.
Expand Down Expand Up @@ -83,15 +80,39 @@ pub trait Emitter {
/// 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.
Expand Down

0 comments on commit 9891ea7

Please sign in to comment.