summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_clinic.py17
-rwxr-xr-xTools/clinic/clinic.py8
2 files changed, 20 insertions, 5 deletions
diff --git a/Lib/test/test_clinic.py b/Lib/test/test_clinic.py
index 2f74ee2..3ce27d1 100644
--- a/Lib/test/test_clinic.py
+++ b/Lib/test/test_clinic.py
@@ -84,6 +84,7 @@ class FakeClinic:
('parser_definition', d('block')),
('impl_definition', d('block')),
))
+ self.functions = []
def get_destination(self, name):
d = self.destinations.get(name)
@@ -104,6 +105,9 @@ class FakeClinic:
_module_and_class = clinic.Clinic._module_and_class
+ def __repr__(self):
+ return "<FakeClinic object>"
+
class ClinicWholeFileTest(_ParserBase):
def setUp(self):
@@ -672,6 +676,19 @@ class ClinicParserTest(_ParserBase):
""")
self.assertEqual("os_stat_fn", function.c_basename)
+ def test_cloning_nonexistent_function_correctly_fails(self):
+ stdout = self.parse_function_should_fail("""
+ cloned = fooooooooooooooooooooooo
+ This is trying to clone a nonexistent function!!
+ """)
+ expected_error = """\
+cls=None, module=<FakeClinic object>, existing='fooooooooooooooooooooooo'
+(cls or module).functions=[]
+Error on line 0:
+Couldn't find existing function 'fooooooooooooooooooooooo'!
+"""
+ self.assertEqual(expected_error, stdout)
+
def test_return_converter(self):
function = self.parse_function("""
module os
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index a343dc5..39c6de3 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -4707,11 +4707,9 @@ class DSLParser:
if existing_function.name == function_name:
break
else:
- existing_function = None
- if not existing_function:
- print("class", cls, "module", module, "existing", existing)
- print("cls. functions", cls.functions)
- fail("Couldn't find existing function " + repr(existing) + "!")
+ print(f"{cls=}, {module=}, {existing=}")
+ print(f"{(cls or module).functions=}")
+ fail(f"Couldn't find existing function {existing!r}!")
fields = [x.strip() for x in full_name.split('.')]
function_name = fields.pop()