Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-104377: fix cell in comprehension that is free in outer scope #104394

Merged
merged 1 commit into from
May 11, 2023

Conversation

carljm
Copy link
Member

@carljm carljm commented May 11, 2023

Fix the case where a comprehension wraps its iteration variable in a cell inside the comprehension (i.e. it's used in a lambda's closure), but that same variable name is free in the outer scope.

Also added a few tests for explicit globals (none of these cases required fixes) and verified that now every possible combination of inner and outer scope is tested.

Also fixed accidental namespace reuse in listcomps test harness, which revealed that two existing tests should not have been passing (and should not pass) when run in class scope; run these tests only in module and function scope.

Fixes #104377.

@@ -203,6 +223,37 @@ def inner():
outputs = {"x": -1}
self._check_in_scopes(code, outputs, ns={"g": -1})

def test_explicit_global(self):
code = """
global g
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I never realized you could write global in a module scope.

@JelleZijlstra JelleZijlstra merged commit ac66cc1 into python:main May 11, 2023
carljm added a commit to carljm/cpython that referenced this pull request May 12, 2023
* main:
  pythongh-91896: Fixup some docs issues following ByteString deprecation (python#104422)
  pythonGH-104371: check return value of calling `mv.release` (python#104417)
  pythongh-104415: Fix refleak tests for `typing.ByteString` deprecation (python#104416)
  pythonGH-86275: Implementation of hypothesis stubs for property-based tests, with zoneinfo tests (python#22863)
  pythonGH-103082: Filter LINE events in VM, to simplify tool implementation. (pythonGH-104387)
  pythongh-93649: Split gc- and allocation tests from _testcapimodule.c (pythonGH-104403)
  pythongh-104389: Add 'unused' keyword to Argument Clinic C converters (python#104390)
  pythongh-101819: Prepare _io._IOBase for module state (python#104386)
  pythongh-104413: Fix refleak when super attribute throws AttributeError (python#104414)
  Fix refleak in `super_descr_get` (python#104408)
  pythongh-87526: Remove dead initialization from _zoneinfo parse_abbr() (python#24700)
  pythongh-91896: Improve visibility of `ByteString` deprecation warnings (python#104294)
  pythongh-104371: Fix calls to `__release_buffer__` while an exception is active (python#104378)
  pythongh-104377: fix cell in comprehension that is free in outer scope (python#104394)
  pythongh-104392: Remove _paramspec_tvars from typing (python#104393)
  pythongh-104396: uuid.py to skip platform check for emscripten and wasi (pythongh-104397)
  pythongh-99108: Refresh HACL* from upstream (python#104401)
  pythongh-104301: Allow leading whitespace in disambiguated pdb statements (python#104342)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Segfault with lambda nested in comprehension
3 participants