summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2023-05-11 07:24:02 -0400
committerNed Batchelder <ned@nedbatchelder.com>2023-05-11 07:57:45 -0400
commit11dcf13f48a3fd6cb21ad2e96998061d127ac2ff (patch)
tree3884434db48f841345ca0f7e38e7286f2bcf03fd /coverage
parent2b84823331e5db2f89d5b8ab6ac00a4447c34cf6 (diff)
downloadpython-coveragepy-git-11dcf13f48a3fd6cb21ad2e96998061d127ac2ff.tar.gz
fix: Python3.12 now inlines comprehensions
Diffstat (limited to 'coverage')
-rw-r--r--coverage/env.py4
-rw-r--r--coverage/parser.py7
2 files changed, 8 insertions, 3 deletions
diff --git a/coverage/env.py b/coverage/env.py
index bdc2c785..9f9b2553 100644
--- a/coverage/env.py
+++ b/coverage/env.py
@@ -137,6 +137,10 @@ class PYBEHAVIOR:
# only a 0-number line, which is ignored, giving a truly empty module.
empty_is_empty = (PYVERSION >= (3, 11, 0, "beta", 4))
+ # Are comprehensions inlined (new) or compiled as called functions (old)?
+ # Changed in https://github.com/python/cpython/pull/101441
+ comprehensions_are_functions = (PYVERSION <= (3, 12, 0, "alpha", 7, 0))
+
# Coverage.py specifics.
# Are we using the C-implemented trace function?
diff --git a/coverage/parser.py b/coverage/parser.py
index e653a9cc..e8d51a9b 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -1343,9 +1343,10 @@ class AstArcAnalyzer:
_code_object__Lambda = _make_expression_code_method("lambda")
_code_object__GeneratorExp = _make_expression_code_method("generator expression")
- _code_object__DictComp = _make_expression_code_method("dictionary comprehension")
- _code_object__SetComp = _make_expression_code_method("set comprehension")
- _code_object__ListComp = _make_expression_code_method("list comprehension")
+ if env.PYBEHAVIOR.comprehensions_are_functions:
+ _code_object__DictComp = _make_expression_code_method("dictionary comprehension")
+ _code_object__SetComp = _make_expression_code_method("set comprehension")
+ _code_object__ListComp = _make_expression_code_method("list comprehension")
# Code only used when dumping the AST for debugging.