New submission from Ned Batchelder <n...@nedbatchelder.com>:

This code seems to get a RESUME opcode where no function call is happening:

    a = 1
    fn = lambda 2
    b = 3

Here is the disassembly. Offset 6 has a RESUME opcode for line 2:


Python 3.11.0a3+ (heads/main:0fc58c1e05, Jan  8 2022, 19:45:58) [Clang 12.0.0 
(clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dis
>>> dis.dis("""\
... a = 1
... fn = lambda: 2
... b = 3
... """)
              0 RESUME                   0

  1           2 LOAD_CONST               0 (1)
              4 STORE_NAME               0 (a)

  2           6 RESUME                   0
              8 LOAD_CONST               1 (<code object <lambda> at 
0x10772c2d0, file "<dis>", line 2>)
             10 MAKE_FUNCTION            0
             12 STORE_NAME               1 (fn)

  3          14 LOAD_CONST               2 (3)
             16 STORE_NAME               2 (b)
             18 LOAD_CONST               3 (None)
             20 RETURN_VALUE

Disassembly of <code object <lambda> at 0x10772c2d0, file "<dis>", line 2>:
  2           0 RESUME                   0
              2 LOAD_CONST               1 (2)
              4 RETURN_VALUE


This causes an extra "call" event when tracing:

---< bug233.py >--------------------------------------------------------
import linecache, os.path, sys

def trace(frame, event, arg):
    if (event != "line") and ("bug233" in frame.f_code.co_filename):
        lineno = frame.f_lineno
        first = frame.f_code.co_firstlineno
        source = linecache.getline(frame.f_code.co_filename, lineno) if lineno 
else "******"
        file = os.path.basename(frame.f_code.co_filename)
        print("{} {}@{!s:4} (first={}): {}".format(event[:4], file, lineno, 
first, source.rstrip()))
    return trace

print(sys.version)
sys.settrace(trace)

def f():
    a = 1
    fn = lambda: 2
    b = 3
f()
------------------------------------------------------------------------

% python3.10 bug233.py
3.10.1 (main, Dec 14 2021, 08:30:13) [Clang 12.0.0 (clang-1200.0.32.29)]
call bug233.py@15   (first=15): def f():
retu bug233.py@18   (first=15):     b = 3

% python3.11 bug233.py
3.11.0a3+ (heads/main:0fc58c1e05, Jan  8 2022, 19:45:58) [Clang 12.0.0 
(clang-1200.0.32.29)]
call bug233.py@15   (first=15): def f():
call bug233.py@17   (first=15):     fn = lambda: 2
retu bug233.py@18   (first=15):     b = 3

----------
components: Interpreter Core
keywords: 3.11regression
messages: 410151
nosy: Mark.Shannon, nedbat
priority: normal
severity: normal
status: open
title: Stray RESUME opcode for unused lambda
versions: Python 3.11

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

Reply via email to