New submission from Brandt Bucher <brandtbuc...@gmail.com>:

PEP 626 says that "all expressions and parts of expressions are considered to 
be executable code" for the purposes of tracing. However, folding constants at 
compile-time can lose or change tracing events.

For example, these expressions (which can't be folded) generate events for two 
lines each:

[  # <--
    None  # <--
]

(  # <--
    foo,  # <--
)

(
    1  # <--
    /
    0  # <--
)

(
    1  # <--
    /
    bar  # <--
)

While these (which are folded) only generate events for one line each:

(  # <--
    None,
)

(  # <--
    1
    /
    42
)

Note that for the binary operation, a completely different line is traced in 
the optimized version.

We should correctly generate events for lines which are "folded away". This 
*might* mean refusing to fold nodes in the AST optimizer if they span multiple 
lines, or including some sort of additional line-coverage metadata on the new 
Constant nodes to fill NOPs as appropriate (which I personally prefer).

----------
components: Interpreter Core
messages: 398810
nosy: Mark.Shannon, brandtbucher
priority: normal
severity: normal
status: open
title: Folded constants do not trace correctly.
type: behavior
versions: Python 3.11

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44816>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to