xref: /DragonReach/src/error/parse_error/mod.rs (revision e5a8055aa517085cf10def70e7fddab4ec87fd13)
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!("Parse Error!,Error Type: {:?}, File: {}, Line: {}",self.0,self.1,self.2)
53     }
54 }