1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use std::fmt;
pub struct ErrorLoc{ pub file: &'static str, pub line: u32, pub col: u32 }
macro_rules! error_loc {
() => { ::error::ErrorLoc { file: file!(), line: line!(), col: column!() } };
}
macro_rules! try_rethrow {
( $error_type:path, $error:expr ) => {
match $error {
Ok(r) => r,
Err(e) => return Err($error_type( error_loc!(), e )),
}
};
}
impl fmt::Debug for ErrorLoc {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}:{}:{}", self.file, self.line, self.col)
}
}
impl fmt::Display for ErrorLoc {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}:{}:{}", self.file, self.line, self.col)
}
}