[3.13] gh-128152: Argument Clinic: ignore pre-processor directives inside C comments (GH-128464) (#128478)

(cherry picked from commit a4e773c540)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
This commit is contained in:
Miss Islington (bot) 2025-01-04 12:09:25 +01:00 committed by GitHub
parent 855af3bbc6
commit 883cb23dd1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 15 additions and 0 deletions

View File

@ -731,6 +731,16 @@ def test_cloned_forced_text_signature_illegal(self):
err = "Cannot use @text_signature when cloning a function"
self.expect_failure(block, err, lineno=11)
def test_ignore_preprocessor_in_comments(self):
for dsl in "clinic", "python":
raw = dedent(f"""\
/*[{dsl} input]
# CPP directives, valid or not, should be ignored in C comments.
#
[{dsl} start generated code]*/
""")
self.clinic.parse(raw)
class ParseFileUnitTest(TestCase):
def expect_parsing_failure(

View File

@ -0,0 +1,2 @@
Fix a bug where Argument Clinic's C pre-processor parser tried to parse
pre-processor directives inside C comments. Patch by Erlend Aasland.

View File

@ -132,6 +132,9 @@ def pop_stack() -> TokenAndCondition:
if line_comment:
line = before.rstrip()
if self.in_comment:
return
if not line.startswith('#'):
return