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