From issues-reply at bitbucket.org Tue Dec 3 14:09:48 2019 From: issues-reply at bitbucket.org (=?utf-8?b?0JjQs9C+0YDRjCDQn9Cw0YjQtdCy?=) Date: Tue, 03 Dec 2019 19:09:48 +0000 (UTC) Subject: [pypy-issue] Issue #3125: Logical error in detecting dirent.d_type (pypy/pypy) Message-ID: <20191203190948.38537.11406@celery-worker-109.ash1.bb-inf.net> New issue 3125: Logical error in detecting dirent.d_type https://bitbucket.org/pypy/pypy/issues/3125/logical-error-in-detecting-direntd_type ????? ?????: Hi guys! I am porting Debian?s package pypy to Dyson which is Debian on illumos kernel and, so far, libc. Its dirent structure does not have `d_type` field, but for sure has `d_name`. And when I am building pypy I am getting this error: ``` [translation:ERROR] AttributeError: instance has no field 'c_d_name' Processing block: block at 61[rewind_0...] is a in (rpython.rlib.rposix:833)_listdir containing the following operations: v831 = getattr(direntp_0, ('c_d_name')) namep_0 = simple_call((function force_cast), (Ptr arrayPtr), v831) name_5 = simple_call((function charp2str), namep_0) v832 = ne(name_5, ('.')) v833 = bool(v832) --end-- ``` ? Looking at this code in rpython/rlib/rposix.py? well after hard time debugging :\)? I have found a logical error: ```python if not _WIN32: class CConfig: _compilation_info_ = eci DIRENT = rffi_platform.Struct('struct dirent', [('d_name', lltype.FixedSizeArray(rffi.CHAR, 1)), ('d_ino', lltype.Signed)] + [('d_type', rffi.INT)] if HAVE_D_TYPE else []) if HAVE_D_TYPE: DT_UNKNOWN = rffi_platform.ConstantInteger('DT_UNKNOWN') DT_REG = rffi_platform.ConstantInteger('DT_REG') DT_DIR = rffi_platform.ConstantInteger('DT_DIR') DT_LNK = rffi_platform.ConstantInteger('DT_LNK') DIRP = rffi.COpaquePtr('DIR') dirent_config = rffi_platform.configure(CConfig) ``` Guess what! :\) Yes, if `HAVE_D_TYPE` is `False`, we get empty list, without `d_name`, `d_ino`. From issues-reply at bitbucket.org Wed Dec 4 10:24:08 2019 From: issues-reply at bitbucket.org (Antonio Cuni) Date: Wed, 04 Dec 2019 15:24:08 +0000 (UTC) Subject: [pypy-issue] Issue #3126: iter(open(filename)) very slow in PyPy3 (pypy/pypy) Message-ID: <20191204152408.23152.27410@celery-worker-111.ash1.bb-inf.net> New issue 3126: iter(open(filename)) very slow in PyPy3 https://bitbucket.org/pypy/pypy/issues/3126/iter-open-filename-very-slow-in-pypy3 Antonio Cuni: Consider the following benchmark: ```python import sys import time def main(): fname = sys.argv[1] N = 100 a = time.time() for i in range(N): with open(fname, 'rb') as f: for line in f: pass b = time.time() t = (b-a) * 1000.0 / N print('%6.2f ms per iteration [%2d iterations]' % (t, N)) main() ``` I ran it on this \(unzipped\) file: [https://data.gharchive.org/2015-01-01-15.json.gz](https://data.gharchive.org/2015-01-01-15.json.gz) on bencher4. These are the results: | **branch** | **rev** | **ms** | **ms \(--jit off\)** | | --- | --- | --- | --- | | py3.6 | df95b7b0b5c6 | 41.76 | 44.98 | | release-pypy3.6-v7.2.0 | 5da45ced70e5 | 64.54 | 67.84 | | pypy3 7.2.0 portable | 5da45ced70e5 | 39.81 | 43.29 | | hpy | 95b626a1c6e0 | 64.43 | 68.04 | | pypy2 7.2.0 portable | 4a68d8d3d2fc | 17.12 | 18.02 | | CPython 2.7.11 | | 7.00 | | | CPython 3.7.5 | | 13.39 | | ? Repeating the benchmark multiple times didn?t change much the numbers. It seems there is a huge variation between different builds \(including portable vs non-portable\). And it seems to be much slower than PyPy2 and the two CPythons. From issues-reply at bitbucket.org Sun Dec 8 02:21:22 2019 From: issues-reply at bitbucket.org (Jan Vesely) Date: Sun, 08 Dec 2019 07:21:22 +0000 (UTC) Subject: [pypy-issue] Issue #3127: [py37] undefined symbol: PyTraceMalloc_Untrack (pypy/pypy) Message-ID: <20191208072121.9934.16687@celery-worker-112.ash1.bb-inf.net> New issue 3127: [py37] undefined symbol: PyTraceMalloc_Untrack https://bitbucket.org/pypy/pypy/issues/3127/py37-undefined-symbol Jan Vesely: Python 3.7 added new `PyTraceMalloc_Track` and `PyTraceMalloc_Untrack` functions \[0\] and for example numpy uses them. This leads to the following error: ``` n from numpy.core._multiarray_umath import ( ImportError: /home/user/pypy37-venv/site-packages/numpy/core/_multiarray_umath.pypy37-pp73-x86_64-linux-gnu.so: undefined symbol: PyTraceMalloc_Untrack ``` ? \[0\] [https://docs.python.org/3/whatsnew/3.7.html#c-api-changes](https://docs.python.org/3/whatsnew/3.7.html#c-api-changes) From issues-reply at bitbucket.org Wed Dec 18 04:23:08 2019 From: issues-reply at bitbucket.org (Asger Hautop Drewsen) Date: Wed, 18 Dec 2019 09:23:08 +0000 (UTC) Subject: [pypy-issue] Issue #3128: Fatal RPython Error: AssertionError in UnrollOptimizer_optimize_bridge (pypy/pypy) Message-ID: <20191218092308.12732.61631@celery-worker-110.ash1.bb-inf.net> New issue 3128: Fatal RPython Error: AssertionError in UnrollOptimizer_optimize_bridge https://bitbucket.org/pypy/pypy/issues/3128/fatal-rpython-error-assertionerror-in Asger Hautop Drewsen: While solving Advent of Code Day 18, I got the following error: ``` RPython traceback: File "rpython_jit_metainterp_optimizeopt.c", line 31592, in UnrollOptimizer_optimize_bridge File "rpython_jit_metainterp_optimizeopt.c", line 53499, in OptUnroll_jump_to_existing_trace File "rpython_jit_metainterp_optimizeopt_1.c", line 26529, in OptUnroll_inline_short_preamble File "rpython_jit_metainterp_optimizeopt.c", line 45673, in Optimizer_send_extra_operation File "rpython_jit_metainterp_optimizeopt_2.c", line 28749, in Optimizer_propagate_forward File "rpython_jit_metainterp_optimizeopt_1.c", line 53851, in Optimizer_emit File "rpython_jit_metainterp_optimizeopt_2.c", line 1141, in _emit_operation__rpython_jit_metainterp_optimize File "rpython_jit_metainterp_optimizeopt_2.c", line 11733, in Optimizer_emit_guard_operation File "rpython_jit_metainterp_optimizeopt_2.c", line 17385, in Optimizer__maybe_replace_guard_value Fatal RPython error: AssertionError ``` I?m using the following version of PyPy on Arch Linux: ``` Python 3.6.9 (5da45ced70e515f94686be0df47c59abd1348ebc, Oct 15 2019, 07:59:05) [PyPy 7.2.0 with GCC 9.2.0] ``` I have attached the code and the input file it should be given as stdin to trigger this. ? From issues-reply at bitbucket.org Wed Dec 18 09:32:14 2019 From: issues-reply at bitbucket.org (Matheus Silva Santos) Date: Wed, 18 Dec 2019 14:32:14 +0000 (UTC) Subject: [pypy-issue] Issue #3129: sys.implementation.version should return PyPy version, not for Python language (pypy/pypy) Message-ID: <20191218143214.12687.24484@app-161.ash1.bb-inf.net> New issue 3129: sys.implementation.version should return PyPy version, not for Python language https://bitbucket.org/pypy/pypy/issues/3129/sysimplementationversion-should-return Matheus Silva Santos: Output for `sys.implementation.version` SHOULD be equal to output of `sys.pypy_version_info`, as PEP 421 says that this must be the interpreter version, not the language version it implements. ? ```python matheus at MacBook-Pro-de-Matheus rdm % pypy3 Python 3.6.1 (784b254d669919c872a505b807db8462b6140973, Oct 06 2019, 23:25:05) [PyPy 7.1.1-beta0 with GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.8)] on darwin Type "help", "copyright", "credits" or "license" for more information. And now for something completely different: ``PyPy 1.3 released'' >>>> import sys >>>> sys.implementation.version (major=3, minor=6, micro=1, releaselevel='final', serial=0) >>>> sys.pypy_version_info (major=7, minor=1, micro=1, releaselevel='beta', serial=0) >>>> ``` ? From issues-reply at bitbucket.org Wed Dec 18 17:25:00 2019 From: issues-reply at bitbucket.org (nlgranger) Date: Wed, 18 Dec 2019 22:25:00 +0000 (UTC) Subject: [pypy-issue] Issue #3130: [cpyext] internal field of buffer struct lost or ignored (pypy/pypy) Message-ID: <20191218222500.35632.23923@celery-worker-111.ash1.bb-inf.net> New issue 3130: [cpyext] internal field of buffer struct lost or ignored https://bitbucket.org/pypy/pypy/issues/3130/cpyext-internal-field-of-buffer-struct nlgranger: When creating an object exposing the buffer protocol, the python specification offers an \[internal\]\([https://docs.python.org/3/c-api/buffer.html#c.Py\_buffer.internal](https://docs.python.org/3/c-api/buffer.html#c.Py_buffer.internal)\) field in the buffer struct to store custom values. This field is incorrectly set to NULL when \[releasebuffer\]\([https://docs.python.org/3/c-api/typeobj.html?highlight=releasebuffer#c.PyBufferProcs.bf\_releasebuffer](https://docs.python.org/3/c-api/typeobj.html?highlight=releasebuffer#c.PyBufferProcs.bf_releasebuffer)\) is called instead of keeping the value it was initially assigned. Presumable, PyPy didn?t even read that value. In the attached example, the internal field is read back by RefCountedBuffer\_releasebuffer when a buffer gets released in mymodule.c l118. The example is a wrapper around objects already exposing the buffer API, it adds a refcount to track how many views of the buffer exist and triggers a callback when that count reaches 0. From issues-reply at bitbucket.org Sun Dec 22 07:44:08 2019 From: issues-reply at bitbucket.org (Jan Vesely) Date: Sun, 22 Dec 2019 12:44:08 +0000 (UTC) Subject: [pypy-issue] =?utf-8?q?Issue_=233131=3A_scipy_1=2E4+_install=3A_?= =?utf-8?q?error=3A_=E2=80=98PyModule=5FAddFunctions=E2=80=99_was_not_decl?= =?utf-8?q?ared_in_this_scope_=28pypy/pypy=29?= Message-ID: <20191222124407.30462.73267@app-147.ash1.bb-inf.net> New issue 3131: scipy 1.4+ install: error: ?PyModule_AddFunctions? was not declared in this scope https://bitbucket.org/pypy/pypy/issues/3131/scipy-14-install-error Jan Vesely: updating scipy to 1.4 results in: ``` /var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/distutils/system_info.py:664: UserWarning: Specified path /var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/__init__.py/include is invalid. return self.get_paths(self.section, key) /var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/distutils/system_info.py:664: UserWarning: Specified path /usr/local/include/include is invalid. return self.get_paths(self.section, key) /var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/distutils/system_info.py:664: UserWarning: Specified path /usr/include/include is invalid. return self.get_paths(self.section, key) /var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/distutils/system_info.py:664: UserWarning: Specified path /home/user/pypy3-venv/include/include is invalid. return self.get_paths(self.section, key) error: Command "g++ -pthread -fPIC -DPOCKETFFT_PTHREADS -I/home/user/pypy3-venv/include/site/python3.6 -I/home/user/pypy3-venv/include/site/python3.6 -I/var/tmp/pip-build-env-q588n5yp/overlay/site-packages/numpy/core/include -I/home/user/pypy3-venv/include -I/usr/lib/pypy3.6/include -c scipy/fft/_pocketfft/pypocketfft.cxx -o build/temp.linux-x86_64-3.6/scipy/fft/_pocketfft/pypocketfft.o -MMD -MF build/temp.linux-x86_64-3.6/scipy/fft/_pocketfft/pypocketfft.o.d -std=c++14 -fvisibility=hidden" failed with exit status 1 scipy/fft/_pocketfft/pypocketfft.cxx: In function ?void pybind11_init_pypocketfft(pybind11::module&)?: scipy/fft/_pocketfft/pypocketfft.cxx:731:3: error: ?PyModule_AddFunctions? was not declared in this scope 731 | PyModule_AddFunctions(m.ptr(), good_size_meth); | ^~~~~~~~~~~~~~~~~~~~~ scipy/fft/_pocketfft/pypocketfft.cxx: In function ?void pybind11_init_pypocketfft(pybind11::module&)?: scipy/fft/_pocketfft/pypocketfft.cxx:731:3: error: ?PyModule_AddFunctions? was not declared in this scope 731 | PyModule_AddFunctions(m.ptr(), good_size_meth); ``` the attached log is for: ``` $ pypy3 --version Python 3.6.9 (5da45ced70e515f94686be0df47c59abd1348ebc, Nov 02 2019, 18:56:40) [PyPy 7.2.0 with GCC 8.3.0] ``` but the same problem appears in: ```shell $ python --version Python 3.7.4 (47c4c0ed3274, Dec 20 2019, 17:37:49) [PyPy 7.3.0-alpha0 with GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] ``` and: ``` $ python --version Python 3.6.9 (574325fb0c26, Dec 20 2019, 17:38:07) [PyPy 7.3.1-alpha0 with GCC 9.2.1 20190827 (Red Hat 9.2.1-1)] ``` scipy 1.3.x works OK. ? From issues-reply at bitbucket.org Mon Dec 23 15:47:29 2019 From: issues-reply at bitbucket.org (Christoph Reiter) Date: Mon, 23 Dec 2019 20:47:29 +0000 (UTC) Subject: [pypy-issue] Issue #3132: pypy3: utf-16 + surrogatepass doesn't error out on invalid input (pypy/pypy) Message-ID: <20191223204729.37361.14872@app-161.ash1.bb-inf.net> New issue 3132: pypy3: utf-16 + surrogatepass doesn't error out on invalid input https://bitbucket.org/pypy/pypy/issues/3132/pypy3-utf-16-surrogatepass-doesnt-error Christoph Reiter: `b"\xd8=a".decode("utf-16-be", "surrogatepass")` Expected: `UnicodeDecodeError: 'utf-16-be' codec can't decode byte 0x61 in position 2: truncated data` Actual: No error, wrong result returned. ? From issues-reply at bitbucket.org Mon Dec 23 16:03:34 2019 From: issues-reply at bitbucket.org (Christoph Reiter) Date: Mon, 23 Dec 2019 21:03:34 +0000 (UTC) Subject: [pypy-issue] Issue #3133: ctypes: surrogate pairs in unicode buffer not merged (pypy/pypy) Message-ID: <20191223210333.30060.52978@celery-worker-109.ash1.bb-inf.net> New issue 3133: ctypes: surrogate pairs in unicode buffer not merged https://bitbucket.org/pypy/pypy/issues/3133/ctypes-surrogate-pairs-in-unicode-buffer Christoph Reiter: ``` buf = ctypes.create_unicode_buffer(2) buf[0] = "\ud800" buf[1] = "\udc01" assert buf[:] == '\U00010001' ``` Works in CPython 3, fails with PyPy 3 ? From issues-reply at bitbucket.org Mon Dec 23 16:11:51 2019 From: issues-reply at bitbucket.org (Christoph Reiter) Date: Mon, 23 Dec 2019 21:11:51 +0000 (UTC) Subject: [pypy-issue] Issue #3134: pypy3+Windows: Non-ASCII filenames broken (pypy/pypy) Message-ID: <20191223211151.8657.60793@app-137.ash1.bb-inf.net> New issue 3134: pypy3+Windows: Non-ASCII filenames broken https://bitbucket.org/pypy/pypy/issues/3134/pypy3-windows-non-ascii-filenames-broken Christoph Reiter: ```python import os fn = '???.mp3' with open(fn, 'wb'): assert os.path.exists(fn) ``` Works with Python 3, fails with PyPy 3 on Windows 10. The file gets creates with PyPy3 though, even with the right name. ? From issues-reply at bitbucket.org Tue Dec 24 03:33:20 2019 From: issues-reply at bitbucket.org (mattip) Date: Tue, 24 Dec 2019 08:33:20 +0000 (UTC) Subject: [pypy-issue] Issue #3135: Compiler warnings when translating (pypy/pypy) Message-ID: <20191224083320.26718.544@celery-worker-110.ash1.bb-inf.net> New issue 3135: Compiler warnings when translating https://bitbucket.org/pypy/pypy/issues/3135/compiler-warnings-when-translating mattip: There are many warnings when translating. ? This one \(one example of tens of such warnings\) ``` [platform:WARNING] rpython_rlib_4.c: In function ?pypy_g_TimSort_merge_collapse_13?: [platform:WARNING] //pypy/rpython/translator/c/src/int.h:32:30: warning: assuming \ signed overflow does not occur when assuming that (X - c) <= X is always true \ [-Wstrict-overflow] [platform:WARNING] #define OP_INT_LT(x,y,r) r = ((x) < (y)) [platform:WARNING] rpython_rlib_4.c:9390:4: note: in expansion of macro ?OP_INT_LT? [platform:WARNING] OP_INT_LT(l_index_11327, l_v2221820, l_v2221848); ``` is strange. All the values are `Signed` which is `long`. When I try to [replicate with godbolt](https://godbolt.org/z/u-cBQw), I do not get that warning We also discard `const` qualifiers when accessing a struct field: ``` platform:WARNING] pypy_module_time.c: In function ?pypy_g__init_timezone?: [platform:WARNING] pypy_module_time.c:370:11: warning: assignment discards ?const? qualifier from pointer target type [-Wdiscarded-qualifiers] [platform:WARNING] l_cp_134 = RPyField(l_res_2143, tm_zone); ``` There are many more warnings, but these overshadow the other warnings. From issues-reply at bitbucket.org Wed Dec 25 08:00:36 2019 From: issues-reply at bitbucket.org (Christoph Reiter) Date: Wed, 25 Dec 2019 13:00:36 +0000 (UTC) Subject: [pypy-issue] Issue #3136: os.putenv crashes in case of errors (win32) (pypy/pypy) Message-ID: <20191225130035.39649.91046@app-161.ash1.bb-inf.net> New issue 3136: os.putenv crashes in case of errors (win32) https://bitbucket.org/pypy/pypy/issues/3136/osputenv-crashes-in-case-of-errors-win32 Christoph Reiter: ``` import os while 1: os.putenv("==", "foo") ``` On Windows 10 using PyPy 3 7.3.0rc3: no exception raised, process crashes On Windows 10 using CPython 3.8.1: ``` ValueError: illegal environment variable name ``` ? From issues-reply at bitbucket.org Sat Dec 28 07:40:33 2019 From: issues-reply at bitbucket.org (=?utf-8?q?Vilhj=C3=A1lmur_Thorsteinsson?=) Date: Sat, 28 Dec 2019 12:40:33 +0000 (UTC) Subject: [pypy-issue] Issue #3137: SystemError/internal exception in PyPy3 7.3 (pypy/pypy) Message-ID: <20191228124033.13702.95633@celery-worker-112.ash1.bb-inf.net> New issue 3137: SystemError/internal exception in PyPy3 7.3 https://bitbucket.org/pypy/pypy/issues/3137/systemerror-internal-exception-in-pypy3-73 Vilhj?lmur Thorsteinsson: When I run my code on the released PyPy3 7.3, I get the following internal exception and traceback: ? ``` RPython traceback: File "pypy_interpreter.c", line 37221, in BuiltinCode_funcrun_obj File "implement_1.c", line 13304, in BuiltinActivation_UwS_W_UnicodeObject_ObjSpace_W File "pypy_interpreter_2.c", line 5947, in newlist_utf8 2019-12-28 12:36:31,989 WARNING:[0] Exception when parsing article at https://mbl.is/frettir/erlent/2019/12/25/genarannsoknir_til_bjargar_simponsum/: SystemError('unexpected internal exception (please report a bug): ; internal traceback was dumped to stderr',) ``` This is a regression from 7.2. From issues-reply at bitbucket.org Mon Dec 30 14:47:35 2019 From: issues-reply at bitbucket.org (Yannick Jadoul) Date: Mon, 30 Dec 2019 19:47:35 +0000 (UTC) Subject: [pypy-issue] Issue #3138: `space.eq_w` and NaN (pypy/pypy) Message-ID: <20191230194734.30775.47122@app-147.ash1.bb-inf.net> New issue 3138: `space.eq_w` and NaN https://bitbucket.org/pypy/pypy/issues/3138/spaceeq_w-and-nan Yannick Jadoul: Investigating the failure of a test in `lib-python/3/test/test_array.py`, I noticed that the only reason it?s only failing on the `py3.7` branch is because the test \(comparing two `array.array`s containing each one `float('nan')`\) was added in CPython 3.7 \(see [https://bugs.python.org/issue24700](https://bugs.python.org/issue24700) & [https://github.com/python/cpython/pull/3009](https://github.com/python/cpython/pull/3009)\). The same bug is present in `py3.6` and `default`. Even more worryingly, the problem seems to be that `space.eq_w` is used in `pypy/module/array/interp_array.py`'s function `compare_arrays`: ? ```python # ... if comp_op == EQ: res = space.eq_w(w_elem1, w_elem2) if not res: return space.w_False elif comp_op == NE: res = space.is_true(space.ne(w_elem1, w_elem2)) if res: return space.w_True # ... ``` ? When `space.eq_w(w_elem1, w_elem2)` is replaced by `space.is_true(space.eq(w_elem1, w_elem2))`, the test succeeds, and the two `array.array`s of one NaN are not compared to be equal anymore. The problem seems to be that `space.eq_w` is defined as `return self.is_w(w_obj1, w_obj2) or self.is_true(self.eq(w_obj1, w_obj2))`, and that the evalutation of `is` works as a shortcut for most types and instances, but not for NaN `float`s or classes that define a weird kind of equality operator. Rather than fixing `array.array` by replacing `eq_w(...)` with `is_true(eq(...))`, I thought I?d report the issue, as this might affect a whole bunch of other things? From issues-reply at bitbucket.org Tue Dec 31 11:06:36 2019 From: issues-reply at bitbucket.org (Ned Batchelder) Date: Tue, 31 Dec 2019 16:06:36 +0000 (UTC) Subject: [pypy-issue] Issue #3139: Tracing of decorated functions has changed between 7.2.0 and 7.3.0 (pypy/pypy) Message-ID: <20191231160635.1453.24382@celery-worker-109.ash1.bb-inf.net> New issue 3139: Tracing of decorated functions has changed between 7.2.0 and 7.3.0 https://bitbucket.org/pypy/pypy/issues/3139/tracing-of-decorated-functions-has-changed Ned Batchelder: The line numbers compiled into code objects has changed for decorated functions In 7.2.0, the def line was included for decorated functions. In 7.3.0, the def line is not included. Decorated methods include the def line in all versions. CPython has always included the def line for decorated functions. For decorated methods, they changed in 3.8 to include the def line for decorated methods also. CPython changed their behavior in Python 3.8 to include the def line for methods, but not functions. ``` $ cat decorators.py # 1 @foo(3) @bar def func(x, y=5): return 6 class Foo: '''9''' @foo def __init__(self): '''12''' return 13 @foo( 16, 17, ) def meth(self): return 20 @foo( 23 ) def func(x=25): return 26 $ /usr/local/pythonz/pythons/PyPy3-v7.2.0/bin/pypy3 -m dis decorators.py 3 0 LOAD_NAME 0 (foo) 2 LOAD_CONST 0 (3) 4 CALL_FUNCTION 1 4 6 LOAD_NAME 1 (bar) 5 8 LOAD_CONST 1 (5) 10 BUILD_TUPLE 1 12 LOAD_CONST 2 () 14 LOAD_CONST 3 ('func') 16 MAKE_FUNCTION 1 18 CALL_FUNCTION 1 20 CALL_FUNCTION 1 22 STORE_NAME 2 (func) 8 24 LOAD_BUILD_CLASS 26 LOAD_CONST 4 () 28 LOAD_CONST 5 ('Foo') 30 MAKE_FUNCTION 0 32 LOAD_CONST 5 ('Foo') 34 CALL_FUNCTION 2 36 STORE_NAME 3 (Foo) 22 38 LOAD_NAME 0 (foo) 23 40 LOAD_CONST 6 (23) 42 CALL_FUNCTION 1 25 44 LOAD_CONST 7 (25) 46 BUILD_TUPLE 1 48 LOAD_CONST 8 () 50 LOAD_CONST 3 ('func') 52 MAKE_FUNCTION 1 54 CALL_FUNCTION 1 56 STORE_NAME 2 (func) 58 LOAD_CONST 9 (None) 60 RETURN_VALUE $ /usr/local/pythonz/pythons/PyPy3-v7.3.0/bin/pypy3 -m dis decorators.py 3 0 LOAD_NAME 0 (foo) 2 LOAD_CONST 0 (3) 4 CALL_FUNCTION 1 4 6 LOAD_NAME 1 (bar) 8 LOAD_CONST 1 ((5,)) 10 LOAD_CONST 2 () 12 LOAD_CONST 3 ('func') 14 MAKE_FUNCTION 1 16 CALL_FUNCTION 1 18 CALL_FUNCTION 1 20 STORE_NAME 2 (func) 8 22 LOAD_BUILD_CLASS 24 LOAD_CONST 4 () 26 LOAD_CONST 5 ('Foo') 28 MAKE_FUNCTION 0 30 LOAD_CONST 5 ('Foo') 32 CALL_FUNCTION 2 34 STORE_NAME 3 (Foo) 22 36 LOAD_NAME 0 (foo) 23 38 LOAD_CONST 6 (23) 40 CALL_FUNCTION 1 42 LOAD_CONST 7 ((25,)) 44 LOAD_CONST 8 () 46 LOAD_CONST 3 ('func') 48 MAKE_FUNCTION 1 50 CALL_FUNCTION 1 52 STORE_NAME 2 (func) 54 LOAD_CONST 9 (None) 56 RETURN_VALUE ``` ?