mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Merge branch 'main' into issue-54434
This commit is contained in:
commit
c1729c6c88
117 changed files with 1247 additions and 538 deletions
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
|
@ -518,7 +518,6 @@ jobs:
|
|||
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe
|
||||
with:
|
||||
allowed-failures: >-
|
||||
build_macos,
|
||||
build_macos_free_threaded,
|
||||
build_ubuntu_free_threaded,
|
||||
build_ubuntu_ssltests,
|
||||
|
|
|
@ -155,6 +155,7 @@ called with a non-bytes parameter.
|
|||
|
||||
Return the null-terminated contents of the object *obj*
|
||||
through the output variables *buffer* and *length*.
|
||||
Returns ``0`` on success.
|
||||
|
||||
If *length* is ``NULL``, the bytes object
|
||||
may not contain embedded null bytes;
|
||||
|
|
|
@ -824,7 +824,8 @@ iterations of the loop.
|
|||
oparg set to be the exception block depth, for efficient closing of generators.
|
||||
|
||||
.. versionchanged:: 3.13
|
||||
this opcode no longer has an oparg
|
||||
oparg is ``1`` if this instruction is part of a yield-from or await, and ``0``
|
||||
otherwise.
|
||||
|
||||
.. opcode:: SETUP_ANNOTATIONS
|
||||
|
||||
|
|
|
@ -1954,7 +1954,7 @@ without the dedicated syntax, as documented below.
|
|||
|
||||
.. doctest::
|
||||
|
||||
>>> from typing import ParamSpec
|
||||
>>> from typing import ParamSpec, get_origin
|
||||
>>> P = ParamSpec("P")
|
||||
>>> get_origin(P.args) is P
|
||||
True
|
||||
|
@ -3059,14 +3059,14 @@ Introspection helpers
|
|||
|
||||
Return the set of members defined in a :class:`Protocol`.
|
||||
|
||||
::
|
||||
.. doctest::
|
||||
|
||||
>>> from typing import Protocol, get_protocol_members
|
||||
>>> class P(Protocol):
|
||||
... def a(self) -> str: ...
|
||||
... b: int
|
||||
>>> get_protocol_members(P)
|
||||
frozenset({'a', 'b'})
|
||||
>>> get_protocol_members(P) == frozenset({'a', 'b'})
|
||||
True
|
||||
|
||||
Raise :exc:`TypeError` for arguments that are not Protocols.
|
||||
|
||||
|
|
|
@ -948,7 +948,8 @@ Others
|
|||
CPython bytecode changes
|
||||
========================
|
||||
|
||||
* ``YIELD_VALUE`` no longer has an oparg. The oparg of ``RESUME`` was
|
||||
* The oparg of ``YIELD_VALUE`` is now ``1`` if the yield is part of a
|
||||
yield-from or await, and ``0`` otherwise. The oparg of ``RESUME`` was
|
||||
changed to add a bit indicating whether the except-depth is 1, which
|
||||
is needed to optimize closing of generators.
|
||||
(Contributed by Irit Katriel in :gh:`111354`.)
|
||||
|
@ -1048,8 +1049,6 @@ New Features
|
|||
* If Python is built in :ref:`debug mode <debug-build>` or :option:`with
|
||||
assertions <--with-assertions>`, :c:func:`PyTuple_SET_ITEM` and
|
||||
:c:func:`PyList_SET_ITEM` now check the index argument with an assertion.
|
||||
If the assertion fails in :c:func:`PyTuple_SET_ITEM`, make sure that the
|
||||
tuple size is set before.
|
||||
(Contributed by Victor Stinner in :gh:`106168`.)
|
||||
|
||||
* Add :c:func:`PyModule_Add` function: similar to
|
||||
|
|
|
@ -22,6 +22,8 @@ PyAPI_FUNC(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyO
|
|||
|
||||
extern int _PyEval_SetTrace(PyThreadState *tstate, Py_tracefunc func, PyObject *arg);
|
||||
|
||||
extern int _PyEval_SetOpcodeTrace(PyFrameObject *f, bool enable);
|
||||
|
||||
// Helper to look up a builtin object
|
||||
// Export for 'array' shared extension
|
||||
PyAPI_FUNC(PyObject*) _PyEval_GetBuiltin(PyObject *);
|
||||
|
|
|
@ -271,6 +271,8 @@ extern int _PyStaticCode_Init(PyCodeObject *co);
|
|||
|
||||
#ifdef Py_STATS
|
||||
|
||||
#include "pycore_bitutils.h" // _Py_bit_length
|
||||
|
||||
#define STAT_INC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name++; } while (0)
|
||||
#define STAT_DEC(opname, name) do { if (_Py_stats) _Py_stats->opcode_stats[opname].specialization.name--; } while (0)
|
||||
#define OPCODE_EXE_INC(opname) do { if (_Py_stats) _Py_stats->opcode_stats[opname].execution_count++; } while (0)
|
||||
|
|
|
@ -36,13 +36,16 @@ extern PyFrameObject* _PyFrame_New_NoTrack(PyCodeObject *code);
|
|||
/* other API */
|
||||
|
||||
typedef enum _framestate {
|
||||
FRAME_CREATED = -2,
|
||||
FRAME_SUSPENDED = -1,
|
||||
FRAME_CREATED = -3,
|
||||
FRAME_SUSPENDED = -2,
|
||||
FRAME_SUSPENDED_YIELD_FROM = -1,
|
||||
FRAME_EXECUTING = 0,
|
||||
FRAME_COMPLETED = 1,
|
||||
FRAME_CLEARED = 4
|
||||
} PyFrameState;
|
||||
|
||||
#define FRAME_STATE_SUSPENDED(S) ((S) == FRAME_SUSPENDED || (S) == FRAME_SUSPENDED_YIELD_FROM)
|
||||
|
||||
enum _frameowner {
|
||||
FRAME_OWNED_BY_THREAD = 0,
|
||||
FRAME_OWNED_BY_GENERATOR = 1,
|
||||
|
|
|
@ -63,6 +63,8 @@ typedef uint32_t _PyMonitoringEventSet;
|
|||
PyObject *_PyMonitoring_RegisterCallback(int tool_id, int event_id, PyObject *obj);
|
||||
|
||||
int _PyMonitoring_SetEvents(int tool_id, _PyMonitoringEventSet events);
|
||||
int _PyMonitoring_SetLocalEvents(PyCodeObject *code, int tool_id, _PyMonitoringEventSet events);
|
||||
int _PyMonitoring_GetLocalEvents(PyCodeObject *code, int tool_id, _PyMonitoringEventSet *events);
|
||||
|
||||
extern int
|
||||
_Py_call_instrumentation(PyThreadState *tstate, int event,
|
||||
|
|
|
@ -200,7 +200,6 @@ struct _is {
|
|||
uint32_t next_func_version;
|
||||
|
||||
_Py_GlobalMonitors monitors;
|
||||
bool f_opcode_trace_set;
|
||||
bool sys_profile_initialized;
|
||||
bool sys_trace_initialized;
|
||||
Py_ssize_t sys_profiling_threads; /* Count of threads with c_profilefunc set */
|
||||
|
|
|
@ -51,8 +51,8 @@ _PyList_AppendTakeRef(PyListObject *self, PyObject *newitem)
|
|||
Py_ssize_t allocated = self->allocated;
|
||||
assert((size_t)len + 1 < PY_SSIZE_T_MAX);
|
||||
if (allocated > len) {
|
||||
Py_SET_SIZE(self, len + 1);
|
||||
PyList_SET_ITEM(self, len, newitem);
|
||||
Py_SET_SIZE(self, len + 1);
|
||||
return 0;
|
||||
}
|
||||
return _PyList_AppendTakeRefListResize(self, newitem);
|
||||
|
|
6
Include/internal/pycore_opcode_metadata.h
generated
6
Include/internal/pycore_opcode_metadata.h
generated
|
@ -1525,8 +1525,8 @@ const struct opcode_metadata _PyOpcode_opcode_metadata[OPCODE_METADATA_SIZE] = {
|
|||
[_SEND] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG },
|
||||
[SEND] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_JUMP_FLAG | HAS_ERROR_FLAG },
|
||||
[SEND_GEN] = { true, INSTR_FMT_IBC, HAS_ARG_FLAG | HAS_DEOPT_FLAG },
|
||||
[INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG },
|
||||
[YIELD_VALUE] = { true, INSTR_FMT_IX, 0 },
|
||||
[INSTRUMENTED_YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
|
||||
[YIELD_VALUE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG },
|
||||
[POP_EXCEPT] = { true, INSTR_FMT_IX, 0 },
|
||||
[RERAISE] = { true, INSTR_FMT_IB, HAS_ARG_FLAG | HAS_ERROR_FLAG },
|
||||
[END_ASYNC_FOR] = { true, INSTR_FMT_IX, HAS_ERROR_FLAG },
|
||||
|
@ -2043,7 +2043,6 @@ const char *const _PyOpcode_OpName[268] = {
|
|||
[UNARY_NEGATIVE] = "UNARY_NEGATIVE",
|
||||
[UNARY_NOT] = "UNARY_NOT",
|
||||
[WITH_EXCEPT_START] = "WITH_EXCEPT_START",
|
||||
[YIELD_VALUE] = "YIELD_VALUE",
|
||||
[BINARY_OP] = "BINARY_OP",
|
||||
[BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP",
|
||||
[BUILD_LIST] = "BUILD_LIST",
|
||||
|
@ -2117,6 +2116,7 @@ const char *const _PyOpcode_OpName[268] = {
|
|||
[SWAP] = "SWAP",
|
||||
[UNPACK_EX] = "UNPACK_EX",
|
||||
[UNPACK_SEQUENCE] = "UNPACK_SEQUENCE",
|
||||
[YIELD_VALUE] = "YIELD_VALUE",
|
||||
[BINARY_OP_ADD_FLOAT] = "BINARY_OP_ADD_FLOAT",
|
||||
[BINARY_OP_ADD_INT] = "BINARY_OP_ADD_INT",
|
||||
[BINARY_OP_ADD_UNICODE] = "BINARY_OP_ADD_UNICODE",
|
||||
|
|
|
@ -194,11 +194,6 @@ Py_DEPRECATED(3.12) extern void _PyErr_ChainExceptions(PyObject *, PyObject *, P
|
|||
// Export for '_zoneinfo' shared extension
|
||||
PyAPI_FUNC(void) _PyErr_ChainExceptions1(PyObject *);
|
||||
|
||||
// Export for '_lsprof' shared extension
|
||||
PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg(
|
||||
const char *err_msg,
|
||||
PyObject *obj);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -327,7 +327,15 @@ static inline int Py_IS_TYPE(PyObject *ob, PyTypeObject *type) {
|
|||
#endif
|
||||
|
||||
|
||||
// Py_SET_REFCNT() implementation for stable ABI
|
||||
PyAPI_FUNC(void) _Py_SetRefcnt(PyObject *ob, Py_ssize_t refcnt);
|
||||
|
||||
static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
|
||||
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000
|
||||
// Stable ABI implements Py_SET_REFCNT() as a function call
|
||||
// on limited C API version 3.13 and newer.
|
||||
_Py_SetRefcnt(ob, refcnt);
|
||||
#else
|
||||
// This immortal check is for code that is unaware of immortal objects.
|
||||
// The runtime tracks these objects and we should avoid as much
|
||||
// as possible having extensions inadvertently change the refcnt
|
||||
|
@ -335,7 +343,7 @@ static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
|
|||
if (_Py_IsImmortal(ob)) {
|
||||
return;
|
||||
}
|
||||
#if !defined(Py_NOGIL)
|
||||
#ifndef Py_NOGIL
|
||||
ob->ob_refcnt = refcnt;
|
||||
#else
|
||||
if (_Py_IsOwnedByCurrentThread(ob)) {
|
||||
|
@ -352,7 +360,8 @@ static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
|
|||
ob->ob_ref_local = 0;
|
||||
ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
|
||||
}
|
||||
#endif
|
||||
#endif // Py_NOGIL
|
||||
#endif // Py_LIMITED_API+0 < 0x030d0000
|
||||
}
|
||||
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
|
||||
# define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
|
||||
|
|
150
Include/opcode_ids.h
generated
150
Include/opcode_ids.h
generated
|
@ -55,81 +55,81 @@ extern "C" {
|
|||
#define UNARY_NEGATIVE 42
|
||||
#define UNARY_NOT 43
|
||||
#define WITH_EXCEPT_START 44
|
||||
#define YIELD_VALUE 45
|
||||
#define HAVE_ARGUMENT 46
|
||||
#define BINARY_OP 46
|
||||
#define BUILD_CONST_KEY_MAP 47
|
||||
#define BUILD_LIST 48
|
||||
#define BUILD_MAP 49
|
||||
#define BUILD_SET 50
|
||||
#define BUILD_SLICE 51
|
||||
#define BUILD_STRING 52
|
||||
#define BUILD_TUPLE 53
|
||||
#define CALL 54
|
||||
#define CALL_FUNCTION_EX 55
|
||||
#define CALL_INTRINSIC_1 56
|
||||
#define CALL_INTRINSIC_2 57
|
||||
#define CALL_KW 58
|
||||
#define COMPARE_OP 59
|
||||
#define CONTAINS_OP 60
|
||||
#define CONVERT_VALUE 61
|
||||
#define COPY 62
|
||||
#define COPY_FREE_VARS 63
|
||||
#define DELETE_ATTR 64
|
||||
#define DELETE_DEREF 65
|
||||
#define DELETE_FAST 66
|
||||
#define DELETE_GLOBAL 67
|
||||
#define DELETE_NAME 68
|
||||
#define DICT_MERGE 69
|
||||
#define DICT_UPDATE 70
|
||||
#define ENTER_EXECUTOR 71
|
||||
#define EXTENDED_ARG 72
|
||||
#define FOR_ITER 73
|
||||
#define GET_AWAITABLE 74
|
||||
#define IMPORT_FROM 75
|
||||
#define IMPORT_NAME 76
|
||||
#define IS_OP 77
|
||||
#define JUMP_BACKWARD 78
|
||||
#define JUMP_BACKWARD_NO_INTERRUPT 79
|
||||
#define JUMP_FORWARD 80
|
||||
#define LIST_APPEND 81
|
||||
#define LIST_EXTEND 82
|
||||
#define LOAD_ATTR 83
|
||||
#define LOAD_CONST 84
|
||||
#define LOAD_DEREF 85
|
||||
#define LOAD_FAST 86
|
||||
#define LOAD_FAST_AND_CLEAR 87
|
||||
#define LOAD_FAST_CHECK 88
|
||||
#define LOAD_FAST_LOAD_FAST 89
|
||||
#define LOAD_FROM_DICT_OR_DEREF 90
|
||||
#define LOAD_FROM_DICT_OR_GLOBALS 91
|
||||
#define LOAD_GLOBAL 92
|
||||
#define LOAD_NAME 93
|
||||
#define LOAD_SUPER_ATTR 94
|
||||
#define MAKE_CELL 95
|
||||
#define MAP_ADD 96
|
||||
#define MATCH_CLASS 97
|
||||
#define POP_JUMP_IF_FALSE 98
|
||||
#define POP_JUMP_IF_NONE 99
|
||||
#define POP_JUMP_IF_NOT_NONE 100
|
||||
#define POP_JUMP_IF_TRUE 101
|
||||
#define RAISE_VARARGS 102
|
||||
#define RERAISE 103
|
||||
#define RETURN_CONST 104
|
||||
#define SEND 105
|
||||
#define SET_ADD 106
|
||||
#define SET_FUNCTION_ATTRIBUTE 107
|
||||
#define SET_UPDATE 108
|
||||
#define STORE_ATTR 109
|
||||
#define STORE_DEREF 110
|
||||
#define STORE_FAST 111
|
||||
#define STORE_FAST_LOAD_FAST 112
|
||||
#define STORE_FAST_STORE_FAST 113
|
||||
#define STORE_GLOBAL 114
|
||||
#define STORE_NAME 115
|
||||
#define SWAP 116
|
||||
#define UNPACK_EX 117
|
||||
#define UNPACK_SEQUENCE 118
|
||||
#define HAVE_ARGUMENT 45
|
||||
#define BINARY_OP 45
|
||||
#define BUILD_CONST_KEY_MAP 46
|
||||
#define BUILD_LIST 47
|
||||
#define BUILD_MAP 48
|
||||
#define BUILD_SET 49
|
||||
#define BUILD_SLICE 50
|
||||
#define BUILD_STRING 51
|
||||
#define BUILD_TUPLE 52
|
||||
#define CALL 53
|
||||
#define CALL_FUNCTION_EX 54
|
||||
#define CALL_INTRINSIC_1 55
|
||||
#define CALL_INTRINSIC_2 56
|
||||
#define CALL_KW 57
|
||||
#define COMPARE_OP 58
|
||||
#define CONTAINS_OP 59
|
||||
#define CONVERT_VALUE 60
|
||||
#define COPY 61
|
||||
#define COPY_FREE_VARS 62
|
||||
#define DELETE_ATTR 63
|
||||
#define DELETE_DEREF 64
|
||||
#define DELETE_FAST 65
|
||||
#define DELETE_GLOBAL 66
|
||||
#define DELETE_NAME 67
|
||||
#define DICT_MERGE 68
|
||||
#define DICT_UPDATE 69
|
||||
#define ENTER_EXECUTOR 70
|
||||
#define EXTENDED_ARG 71
|
||||
#define FOR_ITER 72
|
||||
#define GET_AWAITABLE 73
|
||||
#define IMPORT_FROM 74
|
||||
#define IMPORT_NAME 75
|
||||
#define IS_OP 76
|
||||
#define JUMP_BACKWARD 77
|
||||
#define JUMP_BACKWARD_NO_INTERRUPT 78
|
||||
#define JUMP_FORWARD 79
|
||||
#define LIST_APPEND 80
|
||||
#define LIST_EXTEND 81
|
||||
#define LOAD_ATTR 82
|
||||
#define LOAD_CONST 83
|
||||
#define LOAD_DEREF 84
|
||||
#define LOAD_FAST 85
|
||||
#define LOAD_FAST_AND_CLEAR 86
|
||||
#define LOAD_FAST_CHECK 87
|
||||
#define LOAD_FAST_LOAD_FAST 88
|
||||
#define LOAD_FROM_DICT_OR_DEREF 89
|
||||
#define LOAD_FROM_DICT_OR_GLOBALS 90
|
||||
#define LOAD_GLOBAL 91
|
||||
#define LOAD_NAME 92
|
||||
#define LOAD_SUPER_ATTR 93
|
||||
#define MAKE_CELL 94
|
||||
#define MAP_ADD 95
|
||||
#define MATCH_CLASS 96
|
||||
#define POP_JUMP_IF_FALSE 97
|
||||
#define POP_JUMP_IF_NONE 98
|
||||
#define POP_JUMP_IF_NOT_NONE 99
|
||||
#define POP_JUMP_IF_TRUE 100
|
||||
#define RAISE_VARARGS 101
|
||||
#define RERAISE 102
|
||||
#define RETURN_CONST 103
|
||||
#define SEND 104
|
||||
#define SET_ADD 105
|
||||
#define SET_FUNCTION_ATTRIBUTE 106
|
||||
#define SET_UPDATE 107
|
||||
#define STORE_ATTR 108
|
||||
#define STORE_DEREF 109
|
||||
#define STORE_FAST 110
|
||||
#define STORE_FAST_LOAD_FAST 111
|
||||
#define STORE_FAST_STORE_FAST 112
|
||||
#define STORE_GLOBAL 113
|
||||
#define STORE_NAME 114
|
||||
#define SWAP 115
|
||||
#define UNPACK_EX 116
|
||||
#define UNPACK_SEQUENCE 117
|
||||
#define YIELD_VALUE 118
|
||||
#define RESUME 149
|
||||
#define BINARY_OP_ADD_FLOAT 150
|
||||
#define BINARY_OP_ADD_INT 151
|
||||
|
|
150
Lib/_opcode_metadata.py
generated
150
Lib/_opcode_metadata.py
generated
|
@ -224,80 +224,80 @@ opmap = {
|
|||
'UNARY_NEGATIVE': 42,
|
||||
'UNARY_NOT': 43,
|
||||
'WITH_EXCEPT_START': 44,
|
||||
'YIELD_VALUE': 45,
|
||||
'BINARY_OP': 46,
|
||||
'BUILD_CONST_KEY_MAP': 47,
|
||||
'BUILD_LIST': 48,
|
||||
'BUILD_MAP': 49,
|
||||
'BUILD_SET': 50,
|
||||
'BUILD_SLICE': 51,
|
||||
'BUILD_STRING': 52,
|
||||
'BUILD_TUPLE': 53,
|
||||
'CALL': 54,
|
||||
'CALL_FUNCTION_EX': 55,
|
||||
'CALL_INTRINSIC_1': 56,
|
||||
'CALL_INTRINSIC_2': 57,
|
||||
'CALL_KW': 58,
|
||||
'COMPARE_OP': 59,
|
||||
'CONTAINS_OP': 60,
|
||||
'CONVERT_VALUE': 61,
|
||||
'COPY': 62,
|
||||
'COPY_FREE_VARS': 63,
|
||||
'DELETE_ATTR': 64,
|
||||
'DELETE_DEREF': 65,
|
||||
'DELETE_FAST': 66,
|
||||
'DELETE_GLOBAL': 67,
|
||||
'DELETE_NAME': 68,
|
||||
'DICT_MERGE': 69,
|
||||
'DICT_UPDATE': 70,
|
||||
'ENTER_EXECUTOR': 71,
|
||||
'EXTENDED_ARG': 72,
|
||||
'FOR_ITER': 73,
|
||||
'GET_AWAITABLE': 74,
|
||||
'IMPORT_FROM': 75,
|
||||
'IMPORT_NAME': 76,
|
||||
'IS_OP': 77,
|
||||
'JUMP_BACKWARD': 78,
|
||||
'JUMP_BACKWARD_NO_INTERRUPT': 79,
|
||||
'JUMP_FORWARD': 80,
|
||||
'LIST_APPEND': 81,
|
||||
'LIST_EXTEND': 82,
|
||||
'LOAD_ATTR': 83,
|
||||
'LOAD_CONST': 84,
|
||||
'LOAD_DEREF': 85,
|
||||
'LOAD_FAST': 86,
|
||||
'LOAD_FAST_AND_CLEAR': 87,
|
||||
'LOAD_FAST_CHECK': 88,
|
||||
'LOAD_FAST_LOAD_FAST': 89,
|
||||
'LOAD_FROM_DICT_OR_DEREF': 90,
|
||||
'LOAD_FROM_DICT_OR_GLOBALS': 91,
|
||||
'LOAD_GLOBAL': 92,
|
||||
'LOAD_NAME': 93,
|
||||
'LOAD_SUPER_ATTR': 94,
|
||||
'MAKE_CELL': 95,
|
||||
'MAP_ADD': 96,
|
||||
'MATCH_CLASS': 97,
|
||||
'POP_JUMP_IF_FALSE': 98,
|
||||
'POP_JUMP_IF_NONE': 99,
|
||||
'POP_JUMP_IF_NOT_NONE': 100,
|
||||
'POP_JUMP_IF_TRUE': 101,
|
||||
'RAISE_VARARGS': 102,
|
||||
'RERAISE': 103,
|
||||
'RETURN_CONST': 104,
|
||||
'SEND': 105,
|
||||
'SET_ADD': 106,
|
||||
'SET_FUNCTION_ATTRIBUTE': 107,
|
||||
'SET_UPDATE': 108,
|
||||
'STORE_ATTR': 109,
|
||||
'STORE_DEREF': 110,
|
||||
'STORE_FAST': 111,
|
||||
'STORE_FAST_LOAD_FAST': 112,
|
||||
'STORE_FAST_STORE_FAST': 113,
|
||||
'STORE_GLOBAL': 114,
|
||||
'STORE_NAME': 115,
|
||||
'SWAP': 116,
|
||||
'UNPACK_EX': 117,
|
||||
'UNPACK_SEQUENCE': 118,
|
||||
'BINARY_OP': 45,
|
||||
'BUILD_CONST_KEY_MAP': 46,
|
||||
'BUILD_LIST': 47,
|
||||
'BUILD_MAP': 48,
|
||||
'BUILD_SET': 49,
|
||||
'BUILD_SLICE': 50,
|
||||
'BUILD_STRING': 51,
|
||||
'BUILD_TUPLE': 52,
|
||||
'CALL': 53,
|
||||
'CALL_FUNCTION_EX': 54,
|
||||
'CALL_INTRINSIC_1': 55,
|
||||
'CALL_INTRINSIC_2': 56,
|
||||
'CALL_KW': 57,
|
||||
'COMPARE_OP': 58,
|
||||
'CONTAINS_OP': 59,
|
||||
'CONVERT_VALUE': 60,
|
||||
'COPY': 61,
|
||||
'COPY_FREE_VARS': 62,
|
||||
'DELETE_ATTR': 63,
|
||||
'DELETE_DEREF': 64,
|
||||
'DELETE_FAST': 65,
|
||||
'DELETE_GLOBAL': 66,
|
||||
'DELETE_NAME': 67,
|
||||
'DICT_MERGE': 68,
|
||||
'DICT_UPDATE': 69,
|
||||
'ENTER_EXECUTOR': 70,
|
||||
'EXTENDED_ARG': 71,
|
||||
'FOR_ITER': 72,
|
||||
'GET_AWAITABLE': 73,
|
||||
'IMPORT_FROM': 74,
|
||||
'IMPORT_NAME': 75,
|
||||
'IS_OP': 76,
|
||||
'JUMP_BACKWARD': 77,
|
||||
'JUMP_BACKWARD_NO_INTERRUPT': 78,
|
||||
'JUMP_FORWARD': 79,
|
||||
'LIST_APPEND': 80,
|
||||
'LIST_EXTEND': 81,
|
||||
'LOAD_ATTR': 82,
|
||||
'LOAD_CONST': 83,
|
||||
'LOAD_DEREF': 84,
|
||||
'LOAD_FAST': 85,
|
||||
'LOAD_FAST_AND_CLEAR': 86,
|
||||
'LOAD_FAST_CHECK': 87,
|
||||
'LOAD_FAST_LOAD_FAST': 88,
|
||||
'LOAD_FROM_DICT_OR_DEREF': 89,
|
||||
'LOAD_FROM_DICT_OR_GLOBALS': 90,
|
||||
'LOAD_GLOBAL': 91,
|
||||
'LOAD_NAME': 92,
|
||||
'LOAD_SUPER_ATTR': 93,
|
||||
'MAKE_CELL': 94,
|
||||
'MAP_ADD': 95,
|
||||
'MATCH_CLASS': 96,
|
||||
'POP_JUMP_IF_FALSE': 97,
|
||||
'POP_JUMP_IF_NONE': 98,
|
||||
'POP_JUMP_IF_NOT_NONE': 99,
|
||||
'POP_JUMP_IF_TRUE': 100,
|
||||
'RAISE_VARARGS': 101,
|
||||
'RERAISE': 102,
|
||||
'RETURN_CONST': 103,
|
||||
'SEND': 104,
|
||||
'SET_ADD': 105,
|
||||
'SET_FUNCTION_ATTRIBUTE': 106,
|
||||
'SET_UPDATE': 107,
|
||||
'STORE_ATTR': 108,
|
||||
'STORE_DEREF': 109,
|
||||
'STORE_FAST': 110,
|
||||
'STORE_FAST_LOAD_FAST': 111,
|
||||
'STORE_FAST_STORE_FAST': 112,
|
||||
'STORE_GLOBAL': 113,
|
||||
'STORE_NAME': 114,
|
||||
'SWAP': 115,
|
||||
'UNPACK_EX': 116,
|
||||
'UNPACK_SEQUENCE': 117,
|
||||
'YIELD_VALUE': 118,
|
||||
'RESUME': 149,
|
||||
'INSTRUMENTED_RESUME': 236,
|
||||
'INSTRUMENTED_END_FOR': 237,
|
||||
|
@ -332,4 +332,4 @@ opmap = {
|
|||
'STORE_FAST_MAYBE_NULL': 267,
|
||||
}
|
||||
MIN_INSTRUMENTED_OPCODE = 236
|
||||
HAVE_ARGUMENT = 46
|
||||
HAVE_ARGUMENT = 45
|
||||
|
|
|
@ -460,6 +460,7 @@ _code_type = type(_write_atomic.__code__)
|
|||
# Python 3.13a1 3562 (Assign opcode IDs for internal ops in separate range)
|
||||
# Python 3.13a1 3563 (Add CALL_KW and remove KW_NAMES)
|
||||
# Python 3.13a1 3564 (Removed oparg from YIELD_VALUE, changed oparg values of RESUME)
|
||||
# Python 3.13a1 3565 (Oparg of YIELD_VALUE indicates whether it is in a yield-from)
|
||||
|
||||
# Python 3.14 will start with 3600
|
||||
|
||||
|
@ -476,7 +477,7 @@ _code_type = type(_write_atomic.__code__)
|
|||
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
|
||||
# in PC/launcher.c must also be updated.
|
||||
|
||||
MAGIC_NUMBER = (3564).to_bytes(2, 'little') + b'\r\n'
|
||||
MAGIC_NUMBER = (3565).to_bytes(2, 'little') + b'\r\n'
|
||||
|
||||
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
|
||||
|
||||
|
|
|
@ -19,7 +19,9 @@ class GeneralTest(unittest.TestCase):
|
|||
atexit.register(func, *args)
|
||||
atexit._run_exitfuncs()
|
||||
|
||||
self.assertEqual(cm.unraisable.object, func)
|
||||
self.assertIsNone(cm.unraisable.object)
|
||||
self.assertEqual(cm.unraisable.err_msg,
|
||||
f'Exception ignored in atexit callback {func!r}')
|
||||
self.assertEqual(cm.unraisable.exc_type, exc_type)
|
||||
self.assertEqual(type(cm.unraisable.exc_value), exc_type)
|
||||
|
||||
|
@ -125,7 +127,9 @@ class GeneralTest(unittest.TestCase):
|
|||
try:
|
||||
with support.catch_unraisable_exception() as cm:
|
||||
atexit._run_exitfuncs()
|
||||
self.assertEqual(cm.unraisable.object, func)
|
||||
self.assertIsNone(cm.unraisable.object)
|
||||
self.assertEqual(cm.unraisable.err_msg,
|
||||
f'Exception ignored in atexit callback {func!r}')
|
||||
self.assertEqual(cm.unraisable.exc_type, ZeroDivisionError)
|
||||
self.assertEqual(type(cm.unraisable.exc_value), ZeroDivisionError)
|
||||
finally:
|
||||
|
|
|
@ -289,7 +289,7 @@ def test_excepthook():
|
|||
|
||||
|
||||
def test_unraisablehook():
|
||||
from _testinternalcapi import write_unraisable_exc
|
||||
from _testcapi import err_formatunraisable
|
||||
|
||||
def unraisablehook(hookargs):
|
||||
pass
|
||||
|
@ -302,7 +302,8 @@ def test_unraisablehook():
|
|||
|
||||
sys.addaudithook(hook)
|
||||
sys.unraisablehook = unraisablehook
|
||||
write_unraisable_exc(RuntimeError("nonfatal-error"), "for audit hook test", None)
|
||||
err_formatunraisable(RuntimeError("nonfatal-error"),
|
||||
"Exception ignored for audit hook test")
|
||||
|
||||
|
||||
def test_winreg():
|
||||
|
|
|
@ -22,34 +22,37 @@ from test import support
|
|||
|
||||
|
||||
def threading_setup():
|
||||
return _thread._count(), threading._dangling.copy()
|
||||
return _thread._count(), len(threading._dangling)
|
||||
|
||||
|
||||
def threading_cleanup(*original_values):
|
||||
_MAX_COUNT = 100
|
||||
orig_count, orig_ndangling = original_values
|
||||
|
||||
for count in range(_MAX_COUNT):
|
||||
values = _thread._count(), threading._dangling
|
||||
if values == original_values:
|
||||
break
|
||||
timeout = 1.0
|
||||
for _ in support.sleeping_retry(timeout, error=False):
|
||||
# Copy the thread list to get a consistent output. threading._dangling
|
||||
# is a WeakSet, its value changes when it's read.
|
||||
dangling_threads = list(threading._dangling)
|
||||
count = _thread._count()
|
||||
|
||||
if not count:
|
||||
# Display a warning at the first iteration
|
||||
support.environment_altered = True
|
||||
dangling_threads = values[1]
|
||||
support.print_warning(f"threading_cleanup() failed to cleanup "
|
||||
f"{values[0] - original_values[0]} threads "
|
||||
f"(count: {values[0]}, "
|
||||
f"dangling: {len(dangling_threads)})")
|
||||
for thread in dangling_threads:
|
||||
support.print_warning(f"Dangling thread: {thread!r}")
|
||||
if count <= orig_count:
|
||||
return
|
||||
|
||||
# Don't hold references to threads
|
||||
dangling_threads = None
|
||||
values = None
|
||||
# Timeout!
|
||||
support.environment_altered = True
|
||||
support.print_warning(
|
||||
f"threading_cleanup() failed to clean up threads "
|
||||
f"in {timeout:.1f} seconds\n"
|
||||
f" before: thread count={orig_count}, dangling={orig_ndangling}\n"
|
||||
f" after: thread count={count}, dangling={len(dangling_threads)}")
|
||||
for thread in dangling_threads:
|
||||
support.print_warning(f"Dangling thread: {thread!r}")
|
||||
|
||||
time.sleep(0.01)
|
||||
support.gc_collect()
|
||||
# The warning happens when a test spawns threads and some of these threads
|
||||
# are still running after the test completes. To fix this warning, join
|
||||
# threads explicitly to wait until they complete.
|
||||
#
|
||||
# To make the warning more likely, reduce the timeout.
|
||||
|
||||
|
||||
def reap_threads(func):
|
||||
|
|
|
@ -37,8 +37,7 @@ class StreamTests(test_utils.TestCase):
|
|||
# just in case if we have transport close callbacks
|
||||
test_utils.run_briefly(self.loop)
|
||||
|
||||
self.loop.close()
|
||||
gc.collect()
|
||||
# set_event_loop() takes care of closing self.loop in a safe way
|
||||
super().tearDown()
|
||||
|
||||
def _basetest_open_connection(self, open_connection_fut):
|
||||
|
@ -1124,6 +1123,8 @@ os.close(fd)
|
|||
|
||||
self.assertEqual(messages[0]['message'],
|
||||
'Unhandled exception in client_connected_cb')
|
||||
# Break explicitly reference cycle
|
||||
messages = None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -322,9 +322,9 @@ class SampleCallbacksTestCase(unittest.TestCase):
|
|||
|
||||
self.assertIsInstance(cm.unraisable.exc_value, TypeError)
|
||||
self.assertEqual(cm.unraisable.err_msg,
|
||||
"Exception ignored on converting result "
|
||||
"of ctypes callback function")
|
||||
self.assertIs(cm.unraisable.object, func)
|
||||
f"Exception ignored on converting result "
|
||||
f"of ctypes callback function {func!r}")
|
||||
self.assertIsNone(cm.unraisable.object)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
@ -51,9 +51,9 @@ class CallbackTracbackTestCase(unittest.TestCase):
|
|||
if exc_msg is not None:
|
||||
self.assertEqual(str(cm.unraisable.exc_value), exc_msg)
|
||||
self.assertEqual(cm.unraisable.err_msg,
|
||||
"Exception ignored on calling ctypes "
|
||||
"callback function")
|
||||
self.assertIs(cm.unraisable.object, callback_func)
|
||||
f"Exception ignored on calling ctypes "
|
||||
f"callback function {callback_func!r}")
|
||||
self.assertIsNone(cm.unraisable.object)
|
||||
|
||||
def test_ValueError(self):
|
||||
cb = CFUNCTYPE(c_int, c_int)(callback_func)
|
||||
|
|
|
@ -532,7 +532,7 @@ dis_asyncwith = """\
|
|||
GET_AWAITABLE 1
|
||||
LOAD_CONST 0 (None)
|
||||
>> SEND 3 (to 24)
|
||||
YIELD_VALUE
|
||||
YIELD_VALUE 1
|
||||
RESUME 3
|
||||
JUMP_BACKWARD_NO_INTERRUPT 5 (to 14)
|
||||
>> END_SEND
|
||||
|
@ -548,7 +548,7 @@ dis_asyncwith = """\
|
|||
GET_AWAITABLE 2
|
||||
LOAD_CONST 0 (None)
|
||||
>> SEND 3 (to 60)
|
||||
YIELD_VALUE
|
||||
YIELD_VALUE 1
|
||||
RESUME 3
|
||||
JUMP_BACKWARD_NO_INTERRUPT 5 (to 50)
|
||||
>> END_SEND
|
||||
|
@ -571,7 +571,7 @@ None JUMP_BACKWARD 11 (to 60)
|
|||
GET_AWAITABLE 2
|
||||
LOAD_CONST 0 (None)
|
||||
>> SEND 4 (to 102)
|
||||
YIELD_VALUE
|
||||
YIELD_VALUE 1
|
||||
RESUME 3
|
||||
JUMP_BACKWARD_NO_INTERRUPT 5 (to 90)
|
||||
>> CLEANUP_THROW
|
||||
|
@ -762,7 +762,7 @@ None COPY_FREE_VARS 1
|
|||
LOAD_DEREF 2 (x)
|
||||
LOAD_FAST 1 (z)
|
||||
BINARY_OP 0 (+)
|
||||
YIELD_VALUE
|
||||
YIELD_VALUE 0
|
||||
RESUME 5
|
||||
POP_TOP
|
||||
JUMP_BACKWARD 12 (to 10)
|
||||
|
@ -1637,197 +1637,197 @@ def _prepare_test_cases():
|
|||
Instruction = dis.Instruction
|
||||
|
||||
expected_opinfo_outer = [
|
||||
Instruction(opname='MAKE_CELL', opcode=95, arg=0, argval='a', argrepr='a', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=95, arg=1, argval='b', argrepr='b', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=94, arg=0, argval='a', argrepr='a', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=94, arg=1, argval='b', argrepr='b', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=4, start_offset=4, starts_line=True, line_number=1, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=5, argval=(3, 4), argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='a', argrepr='a', offset=8, start_offset=8, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=1, argval='b', argrepr='b', offset=10, start_offset=10, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_TUPLE', opcode=53, arg=2, argval=2, argrepr='', offset=12, start_offset=12, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=1, argval=code_object_f, argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=(3, 4), argrepr='(3, 4)', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='a', argrepr='a', offset=8, start_offset=8, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=1, argval='b', argrepr='b', offset=10, start_offset=10, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_TUPLE', opcode=52, arg=2, argval=2, argrepr='', offset=12, start_offset=12, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=code_object_f, argrepr=repr(code_object_f), offset=14, start_offset=14, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_FUNCTION', opcode=26, arg=None, argval=None, argrepr='', offset=16, start_offset=16, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=107, arg=8, argval=8, argrepr='closure', offset=18, start_offset=18, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=107, arg=1, argval=1, argrepr='defaults', offset=20, start_offset=20, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=111, arg=2, argval='f', argrepr='f', offset=22, start_offset=22, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=1, argval='print', argrepr='print + NULL', offset=24, start_offset=24, starts_line=True, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=0, argval='a', argrepr='a', offset=34, start_offset=34, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=1, argval='b', argrepr='b', offset=36, start_offset=36, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=2, argval='', argrepr="''", offset=38, start_offset=38, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=3, argval=1, argrepr='1', offset=40, start_offset=40, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_LIST', opcode=48, arg=0, argval=0, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_MAP', opcode=49, arg=0, argval=0, argrepr='', offset=44, start_offset=44, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=4, argval='Hello world!', argrepr="'Hello world!'", offset=46, start_offset=46, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=7, argval=7, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=8, argval=8, argrepr='closure', offset=18, start_offset=18, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=1, argval=1, argrepr='defaults', offset=20, start_offset=20, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=110, arg=2, argval='f', argrepr='f', offset=22, start_offset=22, starts_line=False, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=24, start_offset=24, starts_line=True, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=0, argval='a', argrepr='a', offset=34, start_offset=34, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=1, argval='b', argrepr='b', offset=36, start_offset=36, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval='', argrepr="''", offset=38, start_offset=38, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=1, argrepr='1', offset=40, start_offset=40, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_LIST', opcode=47, arg=0, argval=0, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_MAP', opcode=48, arg=0, argval=0, argrepr='', offset=44, start_offset=44, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=4, argval='Hello world!', argrepr="'Hello world!'", offset=46, start_offset=46, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=7, argval=7, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=2, argval='f', argrepr='f', offset=58, start_offset=58, starts_line=True, line_number=8, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=2, argval='f', argrepr='f', offset=58, start_offset=58, starts_line=True, line_number=8, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_VALUE', opcode=36, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=8, is_jump_target=False, positions=None),
|
||||
]
|
||||
|
||||
expected_opinfo_f = [
|
||||
Instruction(opname='COPY_FREE_VARS', opcode=63, arg=2, argval=2, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=95, arg=0, argval='c', argrepr='c', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=95, arg=1, argval='d', argrepr='d', offset=4, start_offset=4, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY_FREE_VARS', opcode=62, arg=2, argval=2, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=94, arg=0, argval='c', argrepr='c', offset=2, start_offset=2, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_CELL', opcode=94, arg=1, argval='d', argrepr='d', offset=4, start_offset=4, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=6, start_offset=6, starts_line=True, line_number=2, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=2, argval=(5, 6), argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=3, argval='a', argrepr='a', offset=10, start_offset=10, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=4, argval='b', argrepr='b', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='c', argrepr='c', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=1, argval='d', argrepr='d', offset=16, start_offset=16, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_TUPLE', opcode=53, arg=4, argval=4, argrepr='', offset=18, start_offset=18, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=1, argval=code_object_inner, argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=(5, 6), argrepr='(5, 6)', offset=8, start_offset=8, starts_line=True, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=3, argval='a', argrepr='a', offset=10, start_offset=10, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=4, argval='b', argrepr='b', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='c', argrepr='c', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=1, argval='d', argrepr='d', offset=16, start_offset=16, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BUILD_TUPLE', opcode=52, arg=4, argval=4, argrepr='', offset=18, start_offset=18, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=code_object_inner, argrepr=repr(code_object_inner), offset=20, start_offset=20, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='MAKE_FUNCTION', opcode=26, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=107, arg=8, argval=8, argrepr='closure', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=107, arg=1, argval=1, argrepr='defaults', offset=26, start_offset=26, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=111, arg=2, argval='inner', argrepr='inner', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=1, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=3, argval='a', argrepr='a', offset=40, start_offset=40, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=4, argval='b', argrepr='b', offset=42, start_offset=42, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=0, argval='c', argrepr='c', offset=44, start_offset=44, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=1, argval='d', argrepr='d', offset=46, start_offset=46, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=4, argval=4, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=8, argval=8, argrepr='closure', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='SET_FUNCTION_ATTRIBUTE', opcode=106, arg=1, argval=1, argrepr='defaults', offset=26, start_offset=26, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=110, arg=2, argval='inner', argrepr='inner', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=3, argval='a', argrepr='a', offset=40, start_offset=40, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=4, argval='b', argrepr='b', offset=42, start_offset=42, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=0, argval='c', argrepr='c', offset=44, start_offset=44, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=1, argval='d', argrepr='d', offset=46, start_offset=46, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=4, argval=4, argrepr='', offset=48, start_offset=48, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=2, argval='inner', argrepr='inner', offset=58, start_offset=58, starts_line=True, line_number=6, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=2, argval='inner', argrepr='inner', offset=58, start_offset=58, starts_line=True, line_number=6, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_VALUE', opcode=36, arg=None, argval=None, argrepr='', offset=60, start_offset=60, starts_line=False, line_number=6, is_jump_target=False, positions=None),
|
||||
]
|
||||
|
||||
expected_opinfo_inner = [
|
||||
Instruction(opname='COPY_FREE_VARS', opcode=63, arg=4, argval=4, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY_FREE_VARS', opcode=62, arg=4, argval=4, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=1, argval='print', argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=2, argval='a', argrepr='a', offset=14, start_offset=14, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=3, argval='b', argrepr='b', offset=16, start_offset=16, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=4, argval='c', argrepr='c', offset=18, start_offset=18, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=85, arg=5, argval='d', argrepr='d', offset=20, start_offset=20, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST_LOAD_FAST', opcode=89, arg=1, argval=('e', 'f'), argrepr='e, f', offset=22, start_offset=22, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=6, argval=6, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='print', argrepr='print + NULL', offset=4, start_offset=4, starts_line=True, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=2, argval='a', argrepr='a', offset=14, start_offset=14, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=3, argval='b', argrepr='b', offset=16, start_offset=16, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=4, argval='c', argrepr='c', offset=18, start_offset=18, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_DEREF', opcode=84, arg=5, argval='d', argrepr='d', offset=20, start_offset=20, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST_LOAD_FAST', opcode=88, arg=1, argval=('e', 'f'), argrepr='e, f', offset=22, start_offset=22, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=6, argval=6, argrepr='', offset=24, start_offset=24, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=32, start_offset=32, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_CONST', opcode=104, arg=0, argval=None, argrepr='None', offset=34, start_offset=34, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=34, start_offset=34, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
]
|
||||
|
||||
expected_opinfo_jumpy = [
|
||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=1, argval='range', argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=1, argval=10, argrepr='10', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=1, argval='range', argrepr='range + NULL', offset=2, start_offset=2, starts_line=True, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=10, argrepr='10', offset=12, start_offset=12, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='GET_ITER', opcode=19, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='FOR_ITER', opcode=73, arg=30, argval=88, argrepr='to 88', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=True, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=111, arg=0, argval='i', argrepr='i', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=40, start_offset=40, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='FOR_ITER', opcode=72, arg=30, argval=88, argrepr='to 88', offset=24, start_offset=24, starts_line=False, line_number=3, is_jump_target=True, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=28, start_offset=28, starts_line=False, line_number=3, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=30, start_offset=30, starts_line=True, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=40, start_offset=40, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=50, start_offset=50, starts_line=False, line_number=4, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=52, start_offset=52, starts_line=True, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=2, argval=4, argrepr='4', offset=54, start_offset=54, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=59, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=2, argval=68, argrepr='to 68', offset=60, start_offset=60, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=22, argval=24, argrepr='to 24', offset=64, start_offset=64, starts_line=True, line_number=6, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=68, start_offset=68, starts_line=True, line_number=7, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=3, argval=6, argrepr='6', offset=70, start_offset=70, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=59, arg=148, argval='>', argrepr='bool(>)', offset=72, start_offset=72, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=101, arg=2, argval=84, argrepr='to 84', offset=76, start_offset=76, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=30, argval=24, argrepr='to 24', offset=80, start_offset=80, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=52, start_offset=52, starts_line=True, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=54, start_offset=54, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=68, argrepr='to 68', offset=60, start_offset=60, starts_line=False, line_number=5, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=22, argval=24, argrepr='to 24', offset=64, start_offset=64, starts_line=True, line_number=6, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=68, start_offset=68, starts_line=True, line_number=7, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=70, start_offset=70, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=72, start_offset=72, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=2, argval=84, argrepr='to 84', offset=76, start_offset=76, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=30, argval=24, argrepr='to 24', offset=80, start_offset=80, starts_line=False, line_number=7, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=True, line_number=8, is_jump_target=True, positions=None),
|
||||
Instruction(opname='JUMP_FORWARD', opcode=80, arg=12, argval=112, argrepr='to 112', offset=86, start_offset=86, starts_line=False, line_number=8, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_FORWARD', opcode=79, arg=12, argval=112, argrepr='to 112', offset=86, start_offset=86, starts_line=False, line_number=8, is_jump_target=False, positions=None),
|
||||
Instruction(opname='END_FOR', opcode=11, arg=None, argval=None, argrepr='', offset=88, start_offset=88, starts_line=True, line_number=3, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=90, start_offset=90, starts_line=True, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=100, start_offset=100, starts_line=False, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=102, start_offset=102, starts_line=False, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=90, start_offset=90, starts_line=True, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=100, start_offset=100, starts_line=False, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=102, start_offset=102, starts_line=False, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=110, start_offset=110, starts_line=False, line_number=10, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST_CHECK', opcode=88, arg=0, argval='i', argrepr='i', offset=112, start_offset=112, starts_line=True, line_number=11, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_FAST_CHECK', opcode=87, arg=0, argval='i', argrepr='i', offset=112, start_offset=112, starts_line=True, line_number=11, is_jump_target=True, positions=None),
|
||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=114, start_offset=114, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=40, argval=206, argrepr='to 206', offset=122, start_offset=122, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=126, start_offset=126, starts_line=True, line_number=12, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=136, start_offset=136, starts_line=False, line_number=12, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=138, start_offset=138, starts_line=False, line_number=12, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=40, argval=206, argrepr='to 206', offset=122, start_offset=122, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=126, start_offset=126, starts_line=True, line_number=12, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=136, start_offset=136, starts_line=False, line_number=12, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=138, start_offset=138, starts_line=False, line_number=12, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=146, start_offset=146, starts_line=False, line_number=12, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=148, start_offset=148, starts_line=True, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=5, argval=1, argrepr='1', offset=150, start_offset=150, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BINARY_OP', opcode=46, arg=23, argval=23, argrepr='-=', offset=152, start_offset=152, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=111, arg=0, argval='i', argrepr='i', offset=156, start_offset=156, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=158, start_offset=158, starts_line=True, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=3, argval=6, argrepr='6', offset=160, start_offset=160, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=59, arg=148, argval='>', argrepr='bool(>)', offset=162, start_offset=162, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=2, argval=174, argrepr='to 174', offset=166, start_offset=166, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=31, argval=112, argrepr='to 112', offset=170, start_offset=170, starts_line=True, line_number=15, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=174, start_offset=174, starts_line=True, line_number=16, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=2, argval=4, argrepr='4', offset=176, start_offset=176, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=59, arg=18, argval='<', argrepr='bool(<)', offset=178, start_offset=178, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=1, argval=188, argrepr='to 188', offset=182, start_offset=182, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_FORWARD', opcode=80, arg=20, argval=228, argrepr='to 228', offset=186, start_offset=186, starts_line=True, line_number=17, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=188, start_offset=188, starts_line=True, line_number=11, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=148, start_offset=148, starts_line=True, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=150, start_offset=150, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BINARY_OP', opcode=45, arg=23, argval=23, argrepr='-=', offset=152, start_offset=152, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=156, start_offset=156, starts_line=False, line_number=13, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=158, start_offset=158, starts_line=True, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=160, start_offset=160, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=162, start_offset=162, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=174, argrepr='to 174', offset=166, start_offset=166, starts_line=False, line_number=14, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=31, argval=112, argrepr='to 112', offset=170, start_offset=170, starts_line=True, line_number=15, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=174, start_offset=174, starts_line=True, line_number=16, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=176, start_offset=176, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=178, start_offset=178, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=1, argval=188, argrepr='to 188', offset=182, start_offset=182, starts_line=False, line_number=16, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_FORWARD', opcode=79, arg=20, argval=228, argrepr='to 228', offset=186, start_offset=186, starts_line=True, line_number=17, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=188, start_offset=188, starts_line=True, line_number=11, is_jump_target=True, positions=None),
|
||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=190, start_offset=190, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=2, argval=206, argrepr='to 206', offset=198, start_offset=198, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=40, argval=126, argrepr='to 126', offset=202, start_offset=202, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=206, start_offset=206, starts_line=True, line_number=19, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=216, start_offset=216, starts_line=False, line_number=19, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=218, start_offset=218, starts_line=False, line_number=19, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=206, argrepr='to 206', offset=198, start_offset=198, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=40, argval=126, argrepr='to 126', offset=202, start_offset=202, starts_line=False, line_number=11, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=206, start_offset=206, starts_line=True, line_number=19, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=216, start_offset=216, starts_line=False, line_number=19, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=218, start_offset=218, starts_line=False, line_number=19, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=226, start_offset=226, starts_line=False, line_number=19, is_jump_target=False, positions=None),
|
||||
Instruction(opname='NOP', opcode=30, arg=None, argval=None, argrepr='', offset=228, start_offset=228, starts_line=True, line_number=20, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=5, argval=1, argrepr='1', offset=230, start_offset=230, starts_line=True, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=7, argval=0, argrepr='0', offset=232, start_offset=232, starts_line=False, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BINARY_OP', opcode=46, arg=11, argval=11, argrepr='/', offset=234, start_offset=234, starts_line=False, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=230, start_offset=230, starts_line=True, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=7, argval=0, argrepr='0', offset=232, start_offset=232, starts_line=False, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BINARY_OP', opcode=45, arg=11, argval=11, argrepr='/', offset=234, start_offset=234, starts_line=False, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=238, start_offset=238, starts_line=False, line_number=21, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=86, arg=0, argval='i', argrepr='i', offset=240, start_offset=240, starts_line=True, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=240, start_offset=240, starts_line=True, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='BEFORE_WITH', opcode=2, arg=None, argval=None, argrepr='', offset=242, start_offset=242, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=111, arg=1, argval='dodgy', argrepr='dodgy', offset=244, start_offset=244, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=246, start_offset=246, starts_line=True, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=8, argval='Never reach this', argrepr="'Never reach this'", offset=256, start_offset=256, starts_line=False, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=258, start_offset=258, starts_line=False, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='STORE_FAST', opcode=110, arg=1, argval='dodgy', argrepr='dodgy', offset=244, start_offset=244, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=246, start_offset=246, starts_line=True, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=8, argval='Never reach this', argrepr="'Never reach this'", offset=256, start_offset=256, starts_line=False, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=258, start_offset=258, starts_line=False, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=266, start_offset=266, starts_line=False, line_number=26, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=0, argval=None, argrepr='None', offset=268, start_offset=268, starts_line=True, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=0, argval=None, argrepr='None', offset=270, start_offset=270, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=0, argval=None, argrepr='None', offset=272, start_offset=272, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=2, argval=2, argrepr='', offset=274, start_offset=274, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=268, start_offset=268, starts_line=True, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=270, start_offset=270, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=272, start_offset=272, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=2, argval=2, argrepr='', offset=274, start_offset=274, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=282, start_offset=282, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=284, start_offset=284, starts_line=True, line_number=28, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=294, start_offset=294, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=296, start_offset=296, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=284, start_offset=284, starts_line=True, line_number=28, is_jump_target=True, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=294, start_offset=294, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=296, start_offset=296, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=304, start_offset=304, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_CONST', opcode=104, arg=0, argval=None, argrepr='None', offset=306, start_offset=306, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=306, start_offset=306, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=308, start_offset=308, starts_line=True, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='WITH_EXCEPT_START', opcode=44, arg=None, argval=None, argrepr='', offset=310, start_offset=310, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=312, start_offset=312, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=101, arg=1, argval=326, argrepr='to 326', offset=320, start_offset=320, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=2, argval=2, argrepr='', offset=324, start_offset=324, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=1, argval=326, argrepr='to 326', offset=320, start_offset=320, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=2, argval=2, argrepr='', offset=324, start_offset=324, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=326, start_offset=326, starts_line=False, line_number=25, is_jump_target=True, positions=None),
|
||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=328, start_offset=328, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=332, start_offset=332, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=27, argval=284, argrepr='to 284', offset=334, start_offset=334, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY', opcode=62, arg=3, argval=3, argrepr='', offset=338, start_offset=338, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=27, argval=284, argrepr='to 284', offset=334, start_offset=334, starts_line=False, line_number=25, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=338, start_offset=338, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=340, start_offset=340, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=1, argval=1, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=344, start_offset=344, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=346, start_offset=346, starts_line=True, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=346, start_offset=346, starts_line=True, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CHECK_EXC_MATCH', opcode=7, arg=None, argval=None, argrepr='', offset=356, start_offset=356, starts_line=False, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=98, arg=15, argval=392, argrepr='to 392', offset=358, start_offset=358, starts_line=False, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=15, argval=392, argrepr='to 392', offset=358, start_offset=358, starts_line=False, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=362, start_offset=362, starts_line=False, line_number=22, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=364, start_offset=364, starts_line=True, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=374, start_offset=374, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=376, start_offset=376, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=364, start_offset=364, starts_line=True, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=374, start_offset=374, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=376, start_offset=376, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=386, start_offset=386, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=78, arg=54, argval=284, argrepr='to 284', offset=388, start_offset=388, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=0, argval=0, argrepr='', offset=392, start_offset=392, starts_line=True, line_number=22, is_jump_target=True, positions=None),
|
||||
Instruction(opname='COPY', opcode=62, arg=3, argval=3, argrepr='', offset=394, start_offset=394, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=54, argval=284, argrepr='to 284', offset=388, start_offset=388, starts_line=False, line_number=23, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=392, start_offset=392, starts_line=True, line_number=22, is_jump_target=True, positions=None),
|
||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=394, start_offset=394, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=396, start_offset=396, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=1, argval=1, argrepr='', offset=398, start_offset=398, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=398, start_offset=398, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=400, start_offset=400, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=92, arg=3, argval='print', argrepr='print + NULL', offset=402, start_offset=402, starts_line=True, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=84, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=412, start_offset=412, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=54, arg=1, argval=1, argrepr='', offset=414, start_offset=414, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=402, start_offset=402, starts_line=True, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=412, start_offset=412, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=414, start_offset=414, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=422, start_offset=422, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=0, argval=0, argrepr='', offset=424, start_offset=424, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY', opcode=62, arg=3, argval=3, argrepr='', offset=426, start_offset=426, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=424, start_offset=424, starts_line=False, line_number=28, is_jump_target=False, positions=None),
|
||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=426, start_offset=426, starts_line=True, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=428, start_offset=428, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=103, arg=1, argval=1, argrepr='', offset=430, start_offset=430, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=430, start_offset=430, starts_line=False, line_number=None, is_jump_target=False, positions=None),
|
||||
]
|
||||
|
||||
# One last piece of inspect fodder to check the default line number handling
|
||||
def simple(): pass
|
||||
expected_opinfo_simple = [
|
||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=simple.__code__.co_firstlineno, is_jump_target=False, positions=None),
|
||||
Instruction(opname='RETURN_CONST', opcode=104, arg=0, argval=None, argrepr='None', offset=2, start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno, is_jump_target=False),
|
||||
Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=2, start_offset=2, starts_line=False, line_number=simple.__code__.co_firstlineno, is_jump_target=False),
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -4342,8 +4342,8 @@ class CPUCountTests(unittest.TestCase):
|
|||
@unittest.skipUnless(hasattr(os, 'sched_setaffinity'),
|
||||
"don't have sched affinity support")
|
||||
def test_process_cpu_count_affinity(self):
|
||||
ncpu = os.cpu_count()
|
||||
if ncpu is None:
|
||||
affinity1 = os.process_cpu_count()
|
||||
if affinity1 is None:
|
||||
self.skipTest("Could not determine the number of CPUs")
|
||||
|
||||
# Disable one CPU
|
||||
|
@ -4356,8 +4356,8 @@ class CPUCountTests(unittest.TestCase):
|
|||
os.sched_setaffinity(0, mask)
|
||||
|
||||
# test process_cpu_count()
|
||||
affinity = os.process_cpu_count()
|
||||
self.assertEqual(affinity, ncpu - 1)
|
||||
affinity2 = os.process_cpu_count()
|
||||
self.assertEqual(affinity2, affinity1 - 1)
|
||||
|
||||
|
||||
# FD inheritance check is only useful for systems with process support.
|
||||
|
|
|
@ -544,7 +544,7 @@ class sf1296433Test(unittest.TestCase):
|
|||
parser = expat.ParserCreate()
|
||||
parser.CharacterDataHandler = handler
|
||||
|
||||
self.assertRaises(Exception, parser.Parse, xml.encode('iso8859'))
|
||||
self.assertRaises(SpecificException, parser.Parse, xml.encode('iso8859'))
|
||||
|
||||
class ChardataBufferTest(unittest.TestCase):
|
||||
"""
|
||||
|
|
1
Lib/test/test_stable_abi_ctypes.py
generated
1
Lib/test/test_stable_abi_ctypes.py
generated
|
@ -907,6 +907,7 @@ SYMBOL_NAMES = (
|
|||
"_Py_IncRef",
|
||||
"_Py_NoneStruct",
|
||||
"_Py_NotImplementedStruct",
|
||||
"_Py_SetRefcnt",
|
||||
"_Py_SwappedOp",
|
||||
"_Py_TrueStruct",
|
||||
"_Py_VaBuildValue_SizeT",
|
||||
|
|
|
@ -1215,38 +1215,38 @@ class SysModuleTest(unittest.TestCase):
|
|||
|
||||
@test.support.cpython_only
|
||||
class UnraisableHookTest(unittest.TestCase):
|
||||
def write_unraisable_exc(self, exc, err_msg, obj):
|
||||
import _testinternalcapi
|
||||
import types
|
||||
err_msg2 = f"Exception ignored {err_msg}"
|
||||
try:
|
||||
_testinternalcapi.write_unraisable_exc(exc, err_msg, obj)
|
||||
return types.SimpleNamespace(exc_type=type(exc),
|
||||
exc_value=exc,
|
||||
exc_traceback=exc.__traceback__,
|
||||
err_msg=err_msg2,
|
||||
object=obj)
|
||||
finally:
|
||||
# Explicitly break any reference cycle
|
||||
exc = None
|
||||
|
||||
def test_original_unraisablehook(self):
|
||||
for err_msg in (None, "original hook"):
|
||||
with self.subTest(err_msg=err_msg):
|
||||
obj = "an object"
|
||||
_testcapi = import_helper.import_module('_testcapi')
|
||||
from _testcapi import err_writeunraisable, err_formatunraisable
|
||||
obj = hex
|
||||
|
||||
with test.support.captured_output("stderr") as stderr:
|
||||
with test.support.swap_attr(sys, 'unraisablehook',
|
||||
sys.__unraisablehook__):
|
||||
self.write_unraisable_exc(ValueError(42), err_msg, obj)
|
||||
with support.swap_attr(sys, 'unraisablehook',
|
||||
sys.__unraisablehook__):
|
||||
with support.captured_stderr() as stderr:
|
||||
err_writeunraisable(ValueError(42), obj)
|
||||
lines = stderr.getvalue().splitlines()
|
||||
self.assertEqual(lines[0], f'Exception ignored in: {obj!r}')
|
||||
self.assertEqual(lines[1], 'Traceback (most recent call last):')
|
||||
self.assertEqual(lines[-1], 'ValueError: 42')
|
||||
|
||||
err = stderr.getvalue()
|
||||
if err_msg is not None:
|
||||
self.assertIn(f'Exception ignored {err_msg}: {obj!r}\n', err)
|
||||
else:
|
||||
self.assertIn(f'Exception ignored in: {obj!r}\n', err)
|
||||
self.assertIn('Traceback (most recent call last):\n', err)
|
||||
self.assertIn('ValueError: 42\n', err)
|
||||
with support.captured_stderr() as stderr:
|
||||
err_writeunraisable(ValueError(42), None)
|
||||
lines = stderr.getvalue().splitlines()
|
||||
self.assertEqual(lines[0], 'Traceback (most recent call last):')
|
||||
self.assertEqual(lines[-1], 'ValueError: 42')
|
||||
|
||||
with support.captured_stderr() as stderr:
|
||||
err_formatunraisable(ValueError(42), 'Error in %R', obj)
|
||||
lines = stderr.getvalue().splitlines()
|
||||
self.assertEqual(lines[0], f'Error in {obj!r}:')
|
||||
self.assertEqual(lines[1], 'Traceback (most recent call last):')
|
||||
self.assertEqual(lines[-1], 'ValueError: 42')
|
||||
|
||||
with support.captured_stderr() as stderr:
|
||||
err_formatunraisable(ValueError(42), None)
|
||||
lines = stderr.getvalue().splitlines()
|
||||
self.assertEqual(lines[0], 'Traceback (most recent call last):')
|
||||
self.assertEqual(lines[-1], 'ValueError: 42')
|
||||
|
||||
def test_original_unraisablehook_err(self):
|
||||
# bpo-22836: PyErr_WriteUnraisable() should give sensible reports
|
||||
|
@ -1293,6 +1293,8 @@ class UnraisableHookTest(unittest.TestCase):
|
|||
# Check that the exception is printed with its qualified name
|
||||
# rather than just classname, and the module names appears
|
||||
# unless it is one of the hard-coded exclusions.
|
||||
_testcapi = import_helper.import_module('_testcapi')
|
||||
from _testcapi import err_writeunraisable
|
||||
class A:
|
||||
class B:
|
||||
class X(Exception):
|
||||
|
@ -1304,9 +1306,7 @@ class UnraisableHookTest(unittest.TestCase):
|
|||
with test.support.captured_stderr() as stderr, test.support.swap_attr(
|
||||
sys, 'unraisablehook', sys.__unraisablehook__
|
||||
):
|
||||
expected = self.write_unraisable_exc(
|
||||
A.B.X(), "msg", "obj"
|
||||
)
|
||||
err_writeunraisable(A.B.X(), "obj")
|
||||
report = stderr.getvalue()
|
||||
self.assertIn(A.B.X.__qualname__, report)
|
||||
if moduleName in ['builtins', '__main__']:
|
||||
|
@ -1322,34 +1322,45 @@ class UnraisableHookTest(unittest.TestCase):
|
|||
sys.unraisablehook(exc)
|
||||
|
||||
def test_custom_unraisablehook(self):
|
||||
_testcapi = import_helper.import_module('_testcapi')
|
||||
from _testcapi import err_writeunraisable, err_formatunraisable
|
||||
hook_args = None
|
||||
|
||||
def hook_func(args):
|
||||
nonlocal hook_args
|
||||
hook_args = args
|
||||
|
||||
obj = object()
|
||||
obj = hex
|
||||
try:
|
||||
with test.support.swap_attr(sys, 'unraisablehook', hook_func):
|
||||
expected = self.write_unraisable_exc(ValueError(42),
|
||||
"custom hook", obj)
|
||||
for attr in "exc_type exc_value exc_traceback err_msg object".split():
|
||||
self.assertEqual(getattr(hook_args, attr),
|
||||
getattr(expected, attr),
|
||||
(hook_args, expected))
|
||||
exc = ValueError(42)
|
||||
err_writeunraisable(exc, obj)
|
||||
self.assertIs(hook_args.exc_type, type(exc))
|
||||
self.assertIs(hook_args.exc_value, exc)
|
||||
self.assertIs(hook_args.exc_traceback, exc.__traceback__)
|
||||
self.assertIsNone(hook_args.err_msg)
|
||||
self.assertEqual(hook_args.object, obj)
|
||||
|
||||
err_formatunraisable(exc, "custom hook %R", obj)
|
||||
self.assertIs(hook_args.exc_type, type(exc))
|
||||
self.assertIs(hook_args.exc_value, exc)
|
||||
self.assertIs(hook_args.exc_traceback, exc.__traceback__)
|
||||
self.assertEqual(hook_args.err_msg, f'custom hook {obj!r}')
|
||||
self.assertIsNone(hook_args.object)
|
||||
finally:
|
||||
# expected and hook_args contain an exception: break reference cycle
|
||||
expected = None
|
||||
hook_args = None
|
||||
|
||||
def test_custom_unraisablehook_fail(self):
|
||||
_testcapi = import_helper.import_module('_testcapi')
|
||||
from _testcapi import err_writeunraisable
|
||||
def hook_func(*args):
|
||||
raise Exception("hook_func failed")
|
||||
|
||||
with test.support.captured_output("stderr") as stderr:
|
||||
with test.support.swap_attr(sys, 'unraisablehook', hook_func):
|
||||
self.write_unraisable_exc(ValueError(42),
|
||||
"custom hook fail", None)
|
||||
err_writeunraisable(ValueError(42), "custom hook fail")
|
||||
|
||||
err = stderr.getvalue()
|
||||
self.assertIn(f'Exception ignored in sys.unraisablehook: '
|
||||
|
|
|
@ -9,6 +9,10 @@ from functools import wraps
|
|||
import asyncio
|
||||
from test.support import import_helper
|
||||
import contextlib
|
||||
import os
|
||||
import tempfile
|
||||
import textwrap
|
||||
import subprocess
|
||||
import warnings
|
||||
|
||||
support.requires_working_socket(module=True)
|
||||
|
@ -1802,6 +1806,39 @@ class TraceOpcodesTestCase(TraceTestCase):
|
|||
def make_tracer():
|
||||
return Tracer(trace_opcode_events=True)
|
||||
|
||||
def test_trace_opcodes_after_settrace(self):
|
||||
"""Make sure setting f_trace_opcodes after starting trace works even
|
||||
if it's the first time f_trace_opcodes is being set. GH-103615"""
|
||||
|
||||
code = textwrap.dedent("""
|
||||
import sys
|
||||
|
||||
def opcode_trace_func(frame, event, arg):
|
||||
if event == "opcode":
|
||||
print("opcode trace triggered")
|
||||
return opcode_trace_func
|
||||
|
||||
sys.settrace(opcode_trace_func)
|
||||
sys._getframe().f_trace = opcode_trace_func
|
||||
sys._getframe().f_trace_opcodes = True
|
||||
a = 1
|
||||
""")
|
||||
|
||||
# We can't use context manager because Windows can't execute a file while
|
||||
# it's being written
|
||||
tmp = tempfile.NamedTemporaryFile(delete=False, suffix='.py')
|
||||
tmp.write(code.encode('utf-8'))
|
||||
tmp.close()
|
||||
try:
|
||||
p = subprocess.Popen([sys.executable, tmp.name], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
p.wait()
|
||||
out = p.stdout.read()
|
||||
finally:
|
||||
os.remove(tmp.name)
|
||||
p.stdout.close()
|
||||
p.stderr.close()
|
||||
self.assertIn(b"opcode trace triggered", out)
|
||||
|
||||
|
||||
class RaisingTraceFuncTestCase(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
|
|
@ -155,9 +155,9 @@ class ThreadRunningTests(BasicThreadTest):
|
|||
started.acquire()
|
||||
|
||||
self.assertEqual(str(cm.unraisable.exc_value), "task failed")
|
||||
self.assertIs(cm.unraisable.object, task)
|
||||
self.assertIsNone(cm.unraisable.object)
|
||||
self.assertEqual(cm.unraisable.err_msg,
|
||||
"Exception ignored in thread started by")
|
||||
f"Exception ignored in thread started by {task!r}")
|
||||
self.assertIsNotNone(cm.unraisable.exc_traceback)
|
||||
|
||||
|
||||
|
|
|
@ -9,8 +9,7 @@ import itertools
|
|||
import pickle
|
||||
import re
|
||||
import sys
|
||||
import warnings
|
||||
from unittest import TestCase, main, skipUnless, skip
|
||||
from unittest import TestCase, main, skip
|
||||
from unittest.mock import patch
|
||||
from copy import copy, deepcopy
|
||||
|
||||
|
@ -45,7 +44,7 @@ import typing
|
|||
import weakref
|
||||
import types
|
||||
|
||||
from test.support import import_helper, captured_stderr, cpython_only
|
||||
from test.support import captured_stderr, cpython_only
|
||||
from test import mod_generics_cache
|
||||
from test import _typed_dict_helper
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
In the limited C API version 3.13, :c:func:`Py_SET_REFCNT` function is now
|
||||
implemented as an opaque function call. Patch by Victor Stinner.
|
|
@ -0,0 +1 @@
|
|||
Use local events for opcode tracing
|
|
@ -0,0 +1,5 @@
|
|||
The oparg of :opcode:`YIELD_VALUE` is now ``1`` if the instruction is part
|
||||
of a yield-from or await, and ``0`` otherwise.
|
||||
|
||||
The SUSPENDED frame state is now split into ``SUSPENDED`` and
|
||||
``SUSPENDED_YIELD_FROM``. This simplifies the code in ``_PyGen_yf``.
|
|
@ -0,0 +1 @@
|
|||
Define ``USE_XATTRS`` on Cygwin so that XATTR-related functions in the :mod:`os` module become available.
|
|
@ -2480,3 +2480,6 @@
|
|||
added = '3.13'
|
||||
[function.PyUnicode_AsUTF8]
|
||||
added = '3.13'
|
||||
[function._Py_SetRefcnt]
|
||||
added = '3.13'
|
||||
abi_only = true
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
#endif
|
||||
|
||||
#include "pycore_call.h" // _PyObject_CallNoArgs()
|
||||
#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg()
|
||||
#include "pycore_runtime.h" // _Py_ID()
|
||||
|
||||
#include <stdbool.h>
|
||||
|
@ -216,8 +215,9 @@ static void _CallPythonObject(void *mem,
|
|||
|
||||
result = PyObject_Vectorcall(callable, args, nargs, NULL);
|
||||
if (result == NULL) {
|
||||
_PyErr_WriteUnraisableMsg("on calling ctypes callback function",
|
||||
callable);
|
||||
PyErr_FormatUnraisable(
|
||||
"Exception ignored on calling ctypes callback function %R",
|
||||
callable);
|
||||
}
|
||||
|
||||
#ifdef MS_WIN32
|
||||
|
@ -258,9 +258,10 @@ static void _CallPythonObject(void *mem,
|
|||
|
||||
if (keep == NULL) {
|
||||
/* Could not convert callback result. */
|
||||
_PyErr_WriteUnraisableMsg("on converting result "
|
||||
"of ctypes callback function",
|
||||
callable);
|
||||
PyErr_FormatUnraisable(
|
||||
"Exception ignored on converting result "
|
||||
"of ctypes callback function %R",
|
||||
callable);
|
||||
}
|
||||
else if (setfunc != _ctypes_get_fielddesc("O")->setfunc) {
|
||||
if (keep == Py_None) {
|
||||
|
@ -270,9 +271,10 @@ static void _CallPythonObject(void *mem,
|
|||
else if (PyErr_WarnEx(PyExc_RuntimeWarning,
|
||||
"memory leak in callback function.",
|
||||
1) == -1) {
|
||||
_PyErr_WriteUnraisableMsg("on converting result "
|
||||
"of ctypes callback function",
|
||||
callable);
|
||||
PyErr_FormatUnraisable(
|
||||
"Exception ignored on converting result "
|
||||
"of ctypes callback function %R",
|
||||
callable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1518,37 +1518,6 @@ restore_crossinterp_data(PyObject *self, PyObject *args)
|
|||
}
|
||||
|
||||
|
||||
/*[clinic input]
|
||||
_testinternalcapi.write_unraisable_exc
|
||||
exception as exc: object
|
||||
err_msg: object
|
||||
obj: object
|
||||
/
|
||||
[clinic start generated code]*/
|
||||
|
||||
static PyObject *
|
||||
_testinternalcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc,
|
||||
PyObject *err_msg, PyObject *obj)
|
||||
/*[clinic end generated code: output=a0f063cdd04aad83 input=274381b1a3fa5cd6]*/
|
||||
{
|
||||
|
||||
const char *err_msg_utf8;
|
||||
if (err_msg != Py_None) {
|
||||
err_msg_utf8 = PyUnicode_AsUTF8(err_msg);
|
||||
if (err_msg_utf8 == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
err_msg_utf8 = NULL;
|
||||
}
|
||||
|
||||
PyErr_SetObject((PyObject *)Py_TYPE(exc), exc);
|
||||
_PyErr_WriteUnraisableMsg(err_msg_utf8, obj);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
|
||||
static PyObject *
|
||||
raiseTestError(const char* test_name, const char* msg)
|
||||
{
|
||||
|
@ -1699,7 +1668,6 @@ static PyMethodDef module_functions[] = {
|
|||
{"perf_trampoline_set_persist_after_fork", perf_trampoline_set_persist_after_fork, METH_VARARGS},
|
||||
{"get_crossinterp_data", get_crossinterp_data, METH_VARARGS},
|
||||
{"restore_crossinterp_data", restore_crossinterp_data, METH_VARARGS},
|
||||
_TESTINTERNALCAPI_WRITE_UNRAISABLE_EXC_METHODDEF
|
||||
_TESTINTERNALCAPI_TEST_LONG_NUMBITS_METHODDEF
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include "Python.h"
|
||||
#include "pycore_interp.h" // _PyInterpreterState.threads.count
|
||||
#include "pycore_moduleobject.h" // _PyModule_GetState()
|
||||
#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg()
|
||||
#include "pycore_pylifecycle.h"
|
||||
#include "pycore_pystate.h" // _PyThreadState_SetCurrent()
|
||||
#include "pycore_sysmodule.h" // _PySys_GetAttr()
|
||||
|
@ -1071,7 +1070,8 @@ thread_run(void *boot_raw)
|
|||
/* SystemExit is ignored silently */
|
||||
PyErr_Clear();
|
||||
else {
|
||||
_PyErr_WriteUnraisableMsg("in thread started by", boot->func);
|
||||
PyErr_FormatUnraisable(
|
||||
"Exception ignored in thread started by %R", boot->func);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -0,0 +1,134 @@
|
|||
tok_1="<"
|
||||
tok_2=">"
|
||||
tok_3="/"
|
||||
tok_4="<![CDATA["
|
||||
tok_5="]]>"
|
||||
tok_6="<?xml"
|
||||
tok_6a="?>"
|
||||
tok_7="version"
|
||||
tok_8="encoding"
|
||||
tok_9="UTF-8"
|
||||
tok_9a="UTF-16"
|
||||
tok_9b="ASCII"
|
||||
tok_9c="LATIN-1"
|
||||
tok_9d="UTF-32"
|
||||
tok_9e="UTF-7"
|
||||
tok_10="\""
|
||||
tok_11="&"
|
||||
tok_11a="&#"
|
||||
tok_11b=";"
|
||||
tok_12="'"
|
||||
tok_13="<!--"
|
||||
tok_13a="-->"
|
||||
tok_14="</"
|
||||
tok_15="="
|
||||
tok_16=">"
|
||||
tok_17="<"
|
||||
tok_18="&"
|
||||
tok_19="'"
|
||||
tok_20="""
|
||||
tok_21="中"
|
||||
tok_22="中"
|
||||
tok_23="�"
|
||||
tok_24="<!ENTITY"
|
||||
tok_25="SYSTEM"
|
||||
tok_26="PUBLIC"
|
||||
tok_27="NDATA"
|
||||
tok_28="["
|
||||
tok_29="]"
|
||||
tok_30="\\"
|
||||
tok_30a="\\x00"
|
||||
tok_31="0"
|
||||
tok_32="1"
|
||||
tok_33="2"
|
||||
tok_34="3"
|
||||
tok_35="4"
|
||||
tok_36="5"
|
||||
tok_37="6"
|
||||
tok_38="7"
|
||||
tok_39="8"
|
||||
tok_40="9"
|
||||
tok_41="iso8859_1"
|
||||
tok_42="latin_1"
|
||||
tok_43="us.ascii"
|
||||
tok_43a="us_ascii"
|
||||
tok_43b="ascii"
|
||||
tok_44="xml:"
|
||||
tok_45="surrogate"
|
||||
tok_46="replace"
|
||||
tok_47="strict"
|
||||
|
||||
attr_encoding=" encoding=\"1\""
|
||||
attr_generic=" a=\"1\""
|
||||
attr_href=" href=\"1\""
|
||||
attr_standalone=" standalone=\"no\""
|
||||
attr_version=" version=\"1\""
|
||||
attr_xml_base=" xml:base=\"1\""
|
||||
attr_xml_id=" xml:id=\"1\""
|
||||
attr_xml_lang=" xml:lang=\"1\""
|
||||
attr_xml_space=" xml:space=\"1\""
|
||||
attr_xmlns=" xmlns=\"1\""
|
||||
|
||||
entity_builtin="<"
|
||||
entity_decimal=""
|
||||
entity_external="&a;"
|
||||
entity_hex=""
|
||||
|
||||
string_any="ANY"
|
||||
string_brackets="[]"
|
||||
string_cdata="CDATA"
|
||||
string_col_fallback=":fallback"
|
||||
string_col_generic=":a"
|
||||
string_col_include=":include"
|
||||
string_dashes="--"
|
||||
string_empty="EMPTY"
|
||||
string_empty_dblquotes="\"\""
|
||||
string_empty_quotes="''"
|
||||
string_entities="ENTITIES"
|
||||
string_entity="ENTITY"
|
||||
string_fixed="#FIXED"
|
||||
string_id="ID"
|
||||
string_idref="IDREF"
|
||||
string_idrefs="IDREFS"
|
||||
string_implied="#IMPLIED"
|
||||
string_nmtoken="NMTOKEN"
|
||||
string_nmtokens="NMTOKENS"
|
||||
string_notation="NOTATION"
|
||||
string_parentheses="()"
|
||||
string_pcdata="#PCDATA"
|
||||
string_percent="%a"
|
||||
string_public="PUBLIC"
|
||||
string_required="#REQUIRED"
|
||||
string_schema=":schema"
|
||||
string_system="SYSTEM"
|
||||
string_ucs4="UCS-4"
|
||||
string_utf16="UTF-16"
|
||||
string_utf8="UTF-8"
|
||||
string_xmlns="xmlns:"
|
||||
|
||||
tag_attlist="<!ATTLIST"
|
||||
tag_cdata="<![CDATA["
|
||||
tag_close="</a>"
|
||||
tag_doctype="<!DOCTYPE"
|
||||
tag_element="<!ELEMENT"
|
||||
tag_entity="<!ENTITY"
|
||||
tag_ignore="<![IGNORE["
|
||||
tag_include="<![INCLUDE["
|
||||
tag_notation="<!NOTATION"
|
||||
tag_open="<a>"
|
||||
tag_open_close="<a />"
|
||||
tag_open_exclamation="<!"
|
||||
tag_open_q="<?"
|
||||
tag_sq2_close="]]>"
|
||||
tag_xml_q="<?xml?>"
|
||||
|
||||
encoding_utf="UTF-"
|
||||
encoding_iso1="ISO-8859"
|
||||
encoding_iso3="ISO-10646-UCS"
|
||||
encoding_iso5="ISO-LATIN-1"
|
||||
encoding_jis="SHIFT_JIS"
|
||||
encoding_utf7="UTF-7"
|
||||
encoding_utf16le="UTF-16BE"
|
||||
encoding_utf16le="UTF-16LE"
|
||||
encoding_ascii="US-ASCII"
|
||||
encoding_latin1="latin1"
|
|
@ -0,0 +1,4 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:IgnoreComments>true</c14n2:IgnoreComments>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:PrefixRewrite>sequential</c14n2:PrefixRewrite>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:PrefixRewrite>sequential</c14n2:PrefixRewrite>
|
||||
<c14n2:QNameAware>
|
||||
<c14n2:QualifiedAttr Name="type" NS="http://www.w3.org/2001/XMLSchema-instance"/>
|
||||
</c14n2:QNameAware>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:PrefixRewrite>sequential</c14n2:PrefixRewrite>
|
||||
<c14n2:QNameAware>
|
||||
<c14n2:Element Name="bar" NS="http://a"/>
|
||||
<c14n2:XPathElement Name="IncludedXPath" NS="http://www.w3.org/2010/xmldsig2#"/>
|
||||
</c14n2:QNameAware>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:QNameAware>
|
||||
<c14n2:QualifiedAttr Name="type" NS="http://www.w3.org/2001/XMLSchema-instance"/>
|
||||
</c14n2:QNameAware>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:QNameAware>
|
||||
<c14n2:Element Name="bar" NS="http://a"/>
|
||||
</c14n2:QNameAware>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:QNameAware>
|
||||
<c14n2:Element Name="bar" NS="http://a"/>
|
||||
<c14n2:XPathElement Name="IncludedXPath" NS="http://www.w3.org/2010/xmldsig2#"/>
|
||||
</c14n2:QNameAware>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
<dsig:CanonicalizationMethod xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:c14n2="http://www.w3.org/2010/xml-c14n2" Algorithm="http://www.w3.org/2010/xml-c14n2">
|
||||
<c14n2:TrimTextNodes>true</c14n2:TrimTextNodes>
|
||||
</dsig:CanonicalizationMethod>
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
<a b='01234567890123456古人咏雪抽幽思骋妍辞竞险韵偶得一编奇绝辄擅美当时流声后代是以北门之风南山之雅梁园之简黄台之赋至今为作家称述尚矣及至洛阳之卧剡溪之兴灞桥之思亦皆传为故事钱塘沈履德先生隐居西湖两峰间孤高贞洁与雪同调方大雪满天皴肤粟背之际先生乃鹿中豹舄端居闭门或扶童曳杖踏遍六桥三竺时取古人诗讽咏之合唐宋元诸名家集句成诗得二百四十章联络通穿如出一人如呵一气气立于言表格备于篇中略无掇拾补凑之形非胸次包罗壮阔笔底驱走鲍谢欧苏诸公不能为此世称王荆公为集句擅长观其在钟山对雪仅题数篇未见有此噫嘻奇矣哉亦富矣哉予慕先生有袁安之节愧不能为慧可之立乃取新集命工传写使海内同好者知先生为博古传述之士而一新世人之耳目他日必有慕潜德阐幽光而剞劂以传者余实为之执殳矣
|
||||
弘治戊午仲冬望日慈溪杨子器衵于海虞官舍序毕诗部' />
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<?xml-stylesheet href="doc.xsl"
|
||||
type="text/xsl" ?>
|
||||
|
||||
<!DOCTYPE doc SYSTEM "doc.dtd">
|
||||
|
||||
<doc>Hello, world!<!-- Comment 1 --></doc>
|
||||
|
||||
<?pi-without-data ?>
|
||||
|
||||
<!-- Comment 2 -->
|
||||
|
||||
<!-- Comment 3 -->
|
|
@ -0,0 +1,11 @@
|
|||
<doc>
|
||||
<clean> </clean>
|
||||
<dirty> A B </dirty>
|
||||
<mixed>
|
||||
A
|
||||
<clean> </clean>
|
||||
B
|
||||
<dirty> A B </dirty>
|
||||
C
|
||||
</mixed>
|
||||
</doc>
|
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE doc [<!ATTLIST e9 attr CDATA "default">]>
|
||||
<doc>
|
||||
<e1 />
|
||||
<e2 ></e2>
|
||||
<e3 name = "elem3" id="elem3" />
|
||||
<e4 name="elem4" id="elem4" ></e4>
|
||||
<e5 a:attr="out" b:attr="sorted" attr2="all" attr="I'm"
|
||||
xmlns:b="http://www.ietf.org"
|
||||
xmlns:a="http://www.w3.org"
|
||||
xmlns="http://example.org"/>
|
||||
<e6 xmlns="" xmlns:a="http://www.w3.org">
|
||||
<e7 xmlns="http://www.ietf.org">
|
||||
<e8 xmlns="" xmlns:a="http://www.w3.org">
|
||||
<e9 xmlns="" xmlns:a="http://www.ietf.org"/>
|
||||
</e8>
|
||||
</e7>
|
||||
</e6>
|
||||
</doc>
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE doc [
|
||||
<!ATTLIST normId id ID #IMPLIED>
|
||||
<!ATTLIST normNames attr NMTOKENS #IMPLIED>
|
||||
]>
|
||||
<doc>
|
||||
<text>First line
 Second line</text>
|
||||
<value>2</value>
|
||||
<compute><![CDATA[value>"0" && value<"10" ?"valid":"error"]]></compute>
|
||||
<compute expr='value>"0" && value<"10" ?"valid":"error"'>valid</compute>
|
||||
<norm attr=' '   
	 ' '/>
|
||||
<normNames attr=' A   
	 B '/>
|
||||
<normId id=' '  
	 ' '/>
|
||||
</doc>
|
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE doc [
|
||||
<!ATTLIST doc attrExtEnt CDATA #IMPLIED>
|
||||
<!ENTITY ent1 "Hello">
|
||||
<!ENTITY ent2 SYSTEM "world.txt">
|
||||
<!ENTITY entExt SYSTEM "earth.gif" NDATA gif>
|
||||
<!NOTATION gif SYSTEM "viewgif.exe">
|
||||
]>
|
||||
<doc attrExtEnt="entExt">
|
||||
&ent1;, &ent2;!
|
||||
</doc>
|
||||
|
||||
<!-- Let world.txt contain "world" (excluding the quotes) -->
|
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<doc>©</doc>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://a" xmlns:b="http://b" xmlns:child="http://c" xmlns:soap-env="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
||||
<a:bar>xsd:string</a:bar>
|
||||
<dsig2:IncludedXPath xmlns:dsig2="http://www.w3.org/2010/xmldsig2#">/soap-env:body/child::b:foo[@att1 != "c:val" and @att2 != 'xsd:string']</dsig2:IncludedXPath>
|
||||
</a:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns:a="http://a" xmlns:b="http://b">
|
||||
<b:bar b:att1="val" att2="val"/>
|
||||
</foo>
|
|
@ -0,0 +1,6 @@
|
|||
<a:foo xmlns:a="http://a" xmlns:b="http://b" xmlns:c="http://c">
|
||||
<b:bar/>
|
||||
<b:bar/>
|
||||
<b:bar/>
|
||||
<a:bar b:att1="val"/>
|
||||
</a:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns:a="http://z3" xmlns:b="http://z2" a:att1="val1" b:att2="val2">
|
||||
<bar xmlns="http://z0" xmlns:a="http://z2" a:att1="val1" b:att2="val2" xmlns:b="http://z3" />
|
||||
</foo>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://z3" xmlns:b="http://z2" b:att1="val1" c:att3="val3" b:att2="val2" xmlns:c="http://z1" xmlns:d="http://z0">
|
||||
<c:bar/>
|
||||
<c:bar d:att3="val3"/>
|
||||
</a:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<foo xmlns:a="http://z0" xmlns:b="http://z0" a:att1="val1" b:att2="val2" xmlns="http://z0">
|
||||
<c:bar xmlns:a="http://z0" xmlns:c="http://z0" c:att3="val3"/>
|
||||
<d:bar xmlns:d="http://z0"/>
|
||||
</foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns="http://z0" xml:id="23">
|
||||
<bar xsi:type="xsd:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">data</bar>
|
||||
</foo>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml-stylesheet href="doc.xsl"
|
||||
type="text/xsl" ?>
|
||||
<doc>Hello, world!<!-- Comment 1 --></doc>
|
||||
<?pi-without-data?>
|
||||
<!-- Comment 2 -->
|
||||
<!-- Comment 3 -->
|
|
@ -0,0 +1,4 @@
|
|||
<?xml-stylesheet href="doc.xsl"
|
||||
type="text/xsl" ?>
|
||||
<doc>Hello, world!</doc>
|
||||
<?pi-without-data?>
|
|
@ -0,0 +1,11 @@
|
|||
<doc>
|
||||
<clean> </clean>
|
||||
<dirty> A B </dirty>
|
||||
<mixed>
|
||||
A
|
||||
<clean> </clean>
|
||||
B
|
||||
<dirty> A B </dirty>
|
||||
C
|
||||
</mixed>
|
||||
</doc>
|
|
@ -0,0 +1 @@
|
|||
<doc><clean></clean><dirty>A B</dirty><mixed>A<clean></clean>B<dirty>A B</dirty>C</mixed></doc>
|
|
@ -0,0 +1,14 @@
|
|||
<doc>
|
||||
<e1></e1>
|
||||
<e2></e2>
|
||||
<e3 id="elem3" name="elem3"></e3>
|
||||
<e4 id="elem4" name="elem4"></e4>
|
||||
<e5 xmlns="http://example.org" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5>
|
||||
<e6>
|
||||
<e7 xmlns="http://www.ietf.org">
|
||||
<e8 xmlns="">
|
||||
<e9 attr="default"></e9>
|
||||
</e8>
|
||||
</e7>
|
||||
</e6>
|
||||
</doc>
|
|
@ -0,0 +1,14 @@
|
|||
<n0:doc xmlns:n0="">
|
||||
<n0:e1></n0:e1>
|
||||
<n0:e2></n0:e2>
|
||||
<n0:e3 id="elem3" name="elem3"></n0:e3>
|
||||
<n0:e4 id="elem4" name="elem4"></n0:e4>
|
||||
<n1:e5 xmlns:n1="http://example.org" xmlns:n2="http://www.ietf.org" xmlns:n3="http://www.w3.org" attr="I'm" attr2="all" n2:attr="sorted" n3:attr="out"></n1:e5>
|
||||
<n0:e6>
|
||||
<n2:e7 xmlns:n2="http://www.ietf.org">
|
||||
<n0:e8>
|
||||
<n0:e9 attr="default"></n0:e9>
|
||||
</n0:e8>
|
||||
</n2:e7>
|
||||
</n0:e6>
|
||||
</n0:doc>
|
|
@ -0,0 +1 @@
|
|||
<doc><e1></e1><e2></e2><e3 id="elem3" name="elem3"></e3><e4 id="elem4" name="elem4"></e4><e5 xmlns="http://example.org" xmlns:a="http://www.w3.org" xmlns:b="http://www.ietf.org" attr="I'm" attr2="all" b:attr="sorted" a:attr="out"></e5><e6><e7 xmlns="http://www.ietf.org"><e8 xmlns=""><e9 attr="default"></e9></e8></e7></e6></doc>
|
|
@ -0,0 +1,10 @@
|
|||
<doc>
|
||||
<text>First line
|
||||
Second line</text>
|
||||
<value>2</value>
|
||||
<compute>value>"0" && value<"10" ?"valid":"error"</compute>
|
||||
<compute expr="value>"0" && value<"10" ?"valid":"error"">valid</compute>
|
||||
<norm attr=" ' 
	 ' "></norm>
|
||||
<normNames attr="A 
	 B"></normNames>
|
||||
<normId id="' 
	 '"></normId>
|
||||
</doc>
|
|
@ -0,0 +1,2 @@
|
|||
<doc><text>First line
|
||||
Second line</text><value>2</value><compute>value>"0" && value<"10" ?"valid":"error"</compute><compute expr="value>"0" && value<"10" ?"valid":"error"">valid</compute><norm attr=" ' 
	 ' "></norm><normNames attr="A 
	 B"></normNames><normId id="' 
	 '"></normId></doc>
|
|
@ -0,0 +1,3 @@
|
|||
<doc attrExtEnt="entExt">
|
||||
Hello, world!
|
||||
</doc>
|
|
@ -0,0 +1 @@
|
|||
<doc attrExtEnt="entExt">Hello, world!</doc>
|
|
@ -0,0 +1 @@
|
|||
<doc>©</doc>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://a">
|
||||
<a:bar>xsd:string</a:bar>
|
||||
<dsig2:IncludedXPath xmlns:dsig2="http://www.w3.org/2010/xmldsig2#">/soap-env:body/child::b:foo[@att1 != "c:val" and @att2 != 'xsd:string']</dsig2:IncludedXPath>
|
||||
</a:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<n0:foo xmlns:n0="http://a">
|
||||
<n0:bar xmlns:n1="http://www.w3.org/2001/XMLSchema">n1:string</n0:bar>
|
||||
<n4:IncludedXPath xmlns:n2="http://b" xmlns:n3="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:n4="http://www.w3.org/2010/xmldsig2#">/n3:body/child::n2:foo[@att1 != "c:val" and @att2 != 'xsd:string']</n4:IncludedXPath>
|
||||
</n0:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://a">
|
||||
<a:bar xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</a:bar>
|
||||
<dsig2:IncludedXPath xmlns:dsig2="http://www.w3.org/2010/xmldsig2#">/soap-env:body/child::b:foo[@att1 != "c:val" and @att2 != 'xsd:string']</dsig2:IncludedXPath>
|
||||
</a:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://a">
|
||||
<a:bar xmlns:xsd="http://www.w3.org/2001/XMLSchema">xsd:string</a:bar>
|
||||
<dsig2:IncludedXPath xmlns:b="http://b" xmlns:dsig2="http://www.w3.org/2010/xmldsig2#" xmlns:soap-env="http://schemas.xmlsoap.org/wsdl/soap/">/soap-env:body/child::b:foo[@att1 != "c:val" and @att2 != 'xsd:string']</dsig2:IncludedXPath>
|
||||
</a:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo>
|
||||
<b:bar xmlns:b="http://b" att2="val" b:att1="val"></b:bar>
|
||||
</foo>
|
|
@ -0,0 +1,3 @@
|
|||
<n0:foo xmlns:n0="">
|
||||
<n1:bar xmlns:n1="http://b" att2="val" n1:att1="val"></n1:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,6 @@
|
|||
<a:foo xmlns:a="http://a">
|
||||
<b:bar xmlns:b="http://b"></b:bar>
|
||||
<b:bar xmlns:b="http://b"></b:bar>
|
||||
<b:bar xmlns:b="http://b"></b:bar>
|
||||
<a:bar xmlns:b="http://b" b:att1="val"></a:bar>
|
||||
</a:foo>
|
|
@ -0,0 +1,6 @@
|
|||
<n0:foo xmlns:n0="http://a">
|
||||
<n1:bar xmlns:n1="http://b"></n1:bar>
|
||||
<n1:bar xmlns:n1="http://b"></n1:bar>
|
||||
<n1:bar xmlns:n1="http://b"></n1:bar>
|
||||
<n0:bar xmlns:n1="http://b" n1:att1="val"></n0:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns:a="http://z3" xmlns:b="http://z2" b:att2="val2" a:att1="val1">
|
||||
<bar xmlns="http://z0" xmlns:a="http://z2" xmlns:b="http://z3" a:att1="val1" b:att2="val2"></bar>
|
||||
</foo>
|
|
@ -0,0 +1,3 @@
|
|||
<n0:foo xmlns:n0="" xmlns:n1="http://z2" xmlns:n2="http://z3" n1:att2="val2" n2:att1="val1">
|
||||
<n3:bar xmlns:n3="http://z0" n1:att1="val1" n2:att2="val2"></n3:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<a:foo xmlns:a="http://z3" xmlns:b="http://z2" xmlns:c="http://z1" c:att3="val3" b:att1="val1" b:att2="val2">
|
||||
<c:bar></c:bar>
|
||||
<c:bar xmlns:d="http://z0" d:att3="val3"></c:bar>
|
||||
</a:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<n2:foo xmlns:n0="http://z1" xmlns:n1="http://z2" xmlns:n2="http://z3" n0:att3="val3" n1:att1="val1" n1:att2="val2">
|
||||
<n0:bar></n0:bar>
|
||||
<n0:bar xmlns:n3="http://z0" n3:att3="val3"></n0:bar>
|
||||
</n2:foo>
|
|
@ -0,0 +1,4 @@
|
|||
<foo xmlns="http://z0" xmlns:a="http://z0" xmlns:b="http://z0" a:att1="val1" b:att2="val2">
|
||||
<c:bar xmlns:c="http://z0" c:att3="val3"></c:bar>
|
||||
<d:bar xmlns:d="http://z0"></d:bar>
|
||||
</foo>
|
|
@ -0,0 +1,4 @@
|
|||
<n0:foo xmlns:n0="http://z0" n0:att1="val1" n0:att2="val2">
|
||||
<n0:bar n0:att3="val3"></n0:bar>
|
||||
<n0:bar></n0:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns="http://z0" xml:id="23">
|
||||
<bar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">data</bar>
|
||||
</foo>
|
|
@ -0,0 +1,3 @@
|
|||
<n0:foo xmlns:n0="http://z0" xml:id="23">
|
||||
<n0:bar xmlns:n1="http://www.w3.org/2001/XMLSchema-instance" n1:type="xsd:string">data</n0:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<n0:foo xmlns:n0="http://z0" xml:id="23">
|
||||
<n0:bar xmlns:n1="http://www.w3.org/2001/XMLSchema" xmlns:n2="http://www.w3.org/2001/XMLSchema-instance" n2:type="n1:string">data</n0:bar>
|
||||
</n0:foo>
|
|
@ -0,0 +1,3 @@
|
|||
<foo xmlns="http://z0" xml:id="23">
|
||||
<bar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">data</bar>
|
||||
</foo>
|
|
@ -0,0 +1,7 @@
|
|||
<?pi data?>
|
||||
<!-- comment -->
|
||||
<root xmlns='namespace'>
|
||||
<element key='value'>text</element>
|
||||
<element>text</element>tail
|
||||
<empty-element/>
|
||||
</root>
|
|
@ -0,0 +1,6 @@
|
|||
<!-- comment -->
|
||||
<root>
|
||||
<element key='value'>text</element>
|
||||
<element>text</element>tail
|
||||
<empty-element/>
|
||||
</root>
|
115
Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/test.xml
Normal file
115
Modules/_xxtestfuzz/fuzz_elementtree_parsewhole_corpus/test.xml
Normal file
|
@ -0,0 +1,115 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<HTML xmlns:pp="http://www.isogen.com/paul/post-processor">
|
||||
<TITLE>Introduction to XSL</TITLE>
|
||||
<H1>Introduction to XSL</H1>
|
||||
|
||||
|
||||
|
||||
<HR/>
|
||||
<H2>Overview
|
||||
</H2>
|
||||
<UL>
|
||||
|
||||
<LI>1.Intro</LI>
|
||||
|
||||
<LI>2.History</LI>
|
||||
|
||||
<LI>3.XSL Basics</LI>
|
||||
|
||||
<LI>Lunch</LI>
|
||||
|
||||
<LI>4.An XML Data Model</LI>
|
||||
|
||||
<LI>5.XSL Patterns</LI>
|
||||
|
||||
<LI>6.XSL Templates</LI>
|
||||
|
||||
<LI>7.XSL Formatting Model
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR/>
|
||||
<H2>Intro</H2>
|
||||
<UL>
|
||||
|
||||
<LI>Who am I?</LI>
|
||||
|
||||
<LI>Who are you?</LI>
|
||||
|
||||
<LI>Why are we here?
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR/>
|
||||
<H2>History: XML and SGML</H2>
|
||||
<UL>
|
||||
|
||||
<LI>XML is a subset of SGML.</LI>
|
||||
|
||||
<LI>SGML allows the separation of abstract content from formatting.</LI>
|
||||
|
||||
<LI>Also one of XML's primary virtues (in the doc publishing domain).
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR/>
|
||||
<H2>History: What are stylesheets?</H2>
|
||||
<UL>
|
||||
|
||||
<LI>Stylesheets specify the formatting of SGML/XML documents.</LI>
|
||||
|
||||
<LI>Stylesheets put the "style" back into documents.</LI>
|
||||
|
||||
<LI>New York Times content+NYT Stylesheet = NYT paper
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<HR/>
|
||||
<H2>History: FOSI</H2>
|
||||
<UL>
|
||||
|
||||
<LI>FOSI: "Formatted Output Specification Instance"
|
||||
<UL>
|
||||
<LI>MIL-STD-28001
|
||||
</LI>
|
||||
|
||||
<LI>FOSI's are SGML documents
|
||||
</LI>
|
||||
|
||||
<LI>A stylesheet for another document
|
||||
</LI>
|
||||
</UL></LI>
|
||||
|
||||
<LI>Obsolete but implemented...
|
||||
</LI>
|
||||
|
||||
</UL>
|
||||
|
||||
|
||||
µ
|
||||
|
||||
</HTML>
|
|
@ -7,3 +7,4 @@ fuzz_sre_match
|
|||
fuzz_csv_reader
|
||||
fuzz_struct_unpack
|
||||
fuzz_ast_literal_eval
|
||||
fuzz_elementtree_parsewhole
|
||||
|
|
|
@ -439,6 +439,68 @@ static int fuzz_ast_literal_eval(const char* data, size_t size) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define MAX_ELEMENTTREE_PARSEWHOLE_TEST_SIZE 0x100000
|
||||
PyObject* xmlparser_type = NULL;
|
||||
PyObject* bytesio_type = NULL;
|
||||
/* Called by LLVMFuzzerTestOneInput for initialization */
|
||||
static int init_elementtree_parsewhole(void) {
|
||||
PyObject* elementtree_module = PyImport_ImportModule("_elementtree");
|
||||
if (elementtree_module == NULL) {
|
||||
return 0;
|
||||
}
|
||||
xmlparser_type = PyObject_GetAttrString(elementtree_module, "XMLParser");
|
||||
Py_DECREF(elementtree_module);
|
||||
if (xmlparser_type == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
PyObject* io_module = PyImport_ImportModule("io");
|
||||
if (io_module == NULL) {
|
||||
return 0;
|
||||
}
|
||||
bytesio_type = PyObject_GetAttrString(io_module, "BytesIO");
|
||||
Py_DECREF(io_module);
|
||||
if (bytesio_type == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
/* Fuzz _elementtree.XMLParser._parse_whole(x) */
|
||||
static int fuzz_elementtree_parsewhole(const char* data, size_t size) {
|
||||
if (size > MAX_ELEMENTTREE_PARSEWHOLE_TEST_SIZE) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
PyObject *input = PyObject_CallFunction(bytesio_type, "y#", data, (Py_ssize_t)size);
|
||||
if (input == NULL) {
|
||||
assert(PyErr_Occurred());
|
||||
PyErr_Print();
|
||||
abort();
|
||||
}
|
||||
|
||||
PyObject *xmlparser_instance = PyObject_CallObject(xmlparser_type, NULL);
|
||||
if (xmlparser_instance == NULL) {
|
||||
assert(PyErr_Occurred());
|
||||
PyErr_Print();
|
||||
abort();
|
||||
}
|
||||
|
||||
PyObject *result = PyObject_CallMethod(xmlparser_instance, "_parse_whole", "O", input);
|
||||
if (result == NULL) {
|
||||
/* Ignore exception here, which can be caused by invalid XML input */
|
||||
PyErr_Clear();
|
||||
} else {
|
||||
Py_DECREF(result);
|
||||
}
|
||||
|
||||
Py_DECREF(xmlparser_instance);
|
||||
Py_DECREF(input);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Run fuzzer and abort on failure. */
|
||||
static int _run_fuzz(const uint8_t *data, size_t size, int(*fuzzer)(const char* , size_t)) {
|
||||
int rv = fuzzer((const char*) data, size);
|
||||
|
@ -569,6 +631,17 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
|||
}
|
||||
|
||||
rv |= _run_fuzz(data, size, fuzz_ast_literal_eval);
|
||||
#endif
|
||||
#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_elementtree_parsewhole)
|
||||
static int ELEMENTTREE_PARSEWHOLE_INITIALIZED = 0;
|
||||
if (!ELEMENTTREE_PARSEWHOLE_INITIALIZED && !init_elementtree_parsewhole()) {
|
||||
PyErr_Print();
|
||||
abort();
|
||||
} else {
|
||||
ELEMENTTREE_PARSEWHOLE_INITIALIZED = 1;
|
||||
}
|
||||
|
||||
rv |= _run_fuzz(data, size, fuzz_elementtree_parsewhole);
|
||||
#endif
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "pycore_atexit.h" // export _Py_AtExit()
|
||||
#include "pycore_initconfig.h" // _PyStatus_NO_MEMORY
|
||||
#include "pycore_interp.h" // PyInterpreterState.atexit
|
||||
#include "pycore_pyerrors.h" // _PyErr_WriteUnraisableMsg()
|
||||
#include "pycore_pystate.h" // _PyInterpreterState_GET
|
||||
|
||||
/* ===================================================================== */
|
||||
|
@ -137,7 +136,8 @@ atexit_callfuncs(struct atexit_state *state)
|
|||
PyObject* the_func = Py_NewRef(cb->func);
|
||||
PyObject *res = PyObject_Call(cb->func, cb->args, cb->kwargs);
|
||||
if (res == NULL) {
|
||||
_PyErr_WriteUnraisableMsg("in atexit callback", the_func);
|
||||
PyErr_FormatUnraisable(
|
||||
"Exception ignored in atexit callback %R", the_func);
|
||||
}
|
||||
else {
|
||||
Py_DECREF(res);
|
||||
|
|
34
Modules/clinic/_testinternalcapi.c.h
generated
34
Modules/clinic/_testinternalcapi.c.h
generated
|
@ -266,38 +266,6 @@ exit:
|
|||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_testinternalcapi_write_unraisable_exc__doc__,
|
||||
"write_unraisable_exc($module, exception, err_msg, obj, /)\n"
|
||||
"--\n"
|
||||
"\n");
|
||||
|
||||
#define _TESTINTERNALCAPI_WRITE_UNRAISABLE_EXC_METHODDEF \
|
||||
{"write_unraisable_exc", _PyCFunction_CAST(_testinternalcapi_write_unraisable_exc), METH_FASTCALL, _testinternalcapi_write_unraisable_exc__doc__},
|
||||
|
||||
static PyObject *
|
||||
_testinternalcapi_write_unraisable_exc_impl(PyObject *module, PyObject *exc,
|
||||
PyObject *err_msg, PyObject *obj);
|
||||
|
||||
static PyObject *
|
||||
_testinternalcapi_write_unraisable_exc(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
PyObject *exc;
|
||||
PyObject *err_msg;
|
||||
PyObject *obj;
|
||||
|
||||
if (!_PyArg_CheckPositional("write_unraisable_exc", nargs, 3, 3)) {
|
||||
goto exit;
|
||||
}
|
||||
exc = args[0];
|
||||
err_msg = args[1];
|
||||
obj = args[2];
|
||||
return_value = _testinternalcapi_write_unraisable_exc_impl(module, exc, err_msg, obj);
|
||||
|
||||
exit:
|
||||
return return_value;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(_testinternalcapi_test_long_numbits__doc__,
|
||||
"test_long_numbits($module, /)\n"
|
||||
"--\n"
|
||||
|
@ -314,4 +282,4 @@ _testinternalcapi_test_long_numbits(PyObject *module, PyObject *Py_UNUSED(ignore
|
|||
{
|
||||
return _testinternalcapi_test_long_numbits_impl(module);
|
||||
}
|
||||
/*[clinic end generated code: output=3425f97821fc7462 input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=679bf53bbae20085 input=a9049054013a1b77]*/
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue