From 1c0bd83809b5653ab9c6aa86effb14c6f6eceed0 Mon Sep 17 00:00:00 2001 From: eldpswp99 Date: Sat, 7 Aug 2021 20:24:41 +0900 Subject: [PATCH] iskeyword: add None check there was one todo in test_keyword.py before: s was PyStrRef, it failed to handle None after: convert s to PyObjectRef and add None check --- Lib/test/test_keyword.py | 2 -- vm/src/stdlib/keyword.rs | 10 +++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_keyword.py b/Lib/test/test_keyword.py index 16f813951..3e2a8b3fb 100644 --- a/Lib/test/test_keyword.py +++ b/Lib/test/test_keyword.py @@ -9,8 +9,6 @@ class Test_iskeyword(unittest.TestCase): def test_uppercase_true_is_not_a_keyword(self): self.assertFalse(keyword.iskeyword('TRUE')) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_none_value_is_not_a_keyword(self): self.assertFalse(keyword.iskeyword(None)) diff --git a/vm/src/stdlib/keyword.rs b/vm/src/stdlib/keyword.rs index 2d1806464..2100d7a24 100644 --- a/vm/src/stdlib/keyword.rs +++ b/vm/src/stdlib/keyword.rs @@ -6,13 +6,17 @@ mod decl { use itertools::Itertools; use rustpython_parser::lexer; - use crate::builtins::pystr::PyStrRef; + use crate::builtins::PyStr; use crate::vm::VirtualMachine; use crate::PyObjectRef; #[pyfunction] - fn iskeyword(s: PyStrRef) -> bool { - lexer::KEYWORDS.contains_key(s.as_str()) + fn iskeyword(s: PyObjectRef) -> bool { + if let Some(s) = s.payload::() { + lexer::KEYWORDS.contains_key(s.as_str()) + } else { + false + } } #[pyattr]