Python: Handle loop constructs outside of loops

Observed on some test files in Nuitka/Nuitka, having `break` and
`continue` outside of loops in Python is (to Python) a syntax error, but
our parser happily accepted this broken syntax.

This then caused issues further downstream in the control-flow
construction, as it broke some invariants.

To fix this we now skip the code that would previously fail when the
invariants are broken.

Co-authored-by: yoff <yoff@github.com>
This commit is contained in:
Taus
2025-02-06 14:28:06 +00:00
parent 40851aeaef
commit 131ec8d22f
3 changed files with 25 additions and 2 deletions

View File

@@ -0,0 +1,5 @@
---
category: fix
---
- Using the `break` and `continue` keywords outside of a loop, which is a syntax error but is accepted by our parser, would cause the control-flow construction to fail. This is now no longer the case.

View File

@@ -0,0 +1,10 @@
# The following constructs are syntax errors in Python, as they are not inside a loop.
# However, our parser does not consider this code to be syntactically incorrect.
# Thus, this test is really observing that allowing these constructs does not break any other parts
# of the extractor.
if True:
break
if True:
continue