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