xref: /DragonReach/src/error/mod.rs (revision b58bd5a17ff5d5ea5385adc176e215cd2b9a485c)
1 #[cfg(target_os = "dragonos")]
2 use drstd as std;
3 use std::format;
4 use std::string::String;
5 use std::string::ToString;
6 /// 解析错误,错误信息应该包括文件名以及行号
7 #[repr(i32)]
8 #[derive(Debug, PartialEq, Eq, Clone)]
9 #[allow(dead_code, non_camel_case_types)]
10 pub enum ParseErrorType {
11     /// 不合法参数
12     EINVAL,
13     /// 结果过大 Result too large.
14     ERANGE,
15     /// 重复定义
16     EREDEF,
17     /// 未预料到的空值
18     EUnexpectedEmpty,
19     /// 语法错误
20     ESyntaxError,
21     /// 非法文件描述符
22     EBADF,
23     /// 非法文件
24     EFILE,
25     /// 不是目录
26     ENODIR,
27 }
28 /// 错误信息应该包括错误类型ParseErrorType,当前解析的文件名,当前解析的行号
29 #[derive(Debug, PartialEq, Eq, Clone)]
30 pub struct ParseError(ParseErrorType,String,usize);
31 
32 impl ParseError {
33     pub fn new(error_type: ParseErrorType,file_name: String,line_number: usize) -> ParseError {
34         ParseError(error_type,file_name,line_number)
35     }
36 
37     pub fn set_file(&mut self,path: &str) {
38         self.1 = path.to_string();
39     }
40 
41     pub fn set_linenum(&mut self,linenum: usize) {
42         self.2 = linenum;
43     }
44 
45     pub fn error_format(&self) -> String {
46         format!("Parse Error!,Error Type: {:?}, File: {}, Line: {}",self.0,self.1,self.2)
47     }
48 }
49