From: Markus Triska Date: Sat, 20 Jun 2020 08:12:14 +0000 (+0200) Subject: directory_files/2: throw representation error if into_string() fails X-Git-Tag: v0.8.127~19^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=65f200e02caddc551588686ba435b3b3ec639e58;p=scryer-prolog.git directory_files/2: throw representation error if into_string() fails Suggested by @notoria in #606. Many thanks! --- diff --git a/src/machine/machine_errors.rs b/src/machine/machine_errors.rs index 8db4c7cd..dddc58ac 100644 --- a/src/machine/machine_errors.rs +++ b/src/machine/machine_errors.rs @@ -575,7 +575,7 @@ impl DomainErrorType { // from 7.12.2 f) of 13211-1:1995 #[derive(Debug, Clone, Copy)] pub enum RepFlag { - // Character, + Character, CharacterCode, InCharacterCode, MaxArity, @@ -586,7 +586,7 @@ pub enum RepFlag { impl RepFlag { pub fn as_str(self) -> &'static str { match self { - // RepFlag::Character => "character", + RepFlag::Character => "character", RepFlag::CharacterCode => "character_code", RepFlag::InCharacterCode => "in_character_code", RepFlag::MaxArity => "max_arity", diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 8e25941e..6027f570 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -830,8 +830,16 @@ impl MachineState { if let Ok(entries) = fs::read_dir(path) { for entry in entries { if let Ok(entry) = entry { - let name = entry.file_name().into_string().unwrap(); - files.push(self.heap.put_complete_string(&name)); + match entry.file_name().into_string() { + Ok(name) => { files.push(self.heap.put_complete_string(&name)); } + _ => { + let stub = MachineError::functor_stub(clause_name!("directory_files"), 2); + let err = MachineError::representation_error(RepFlag::Character); + let err = self.error_form(err, stub); + + return Err(err); + } + } } } }