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