mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
GH-112354: END_FOR
instruction to only pop one value. (GH-114247)
* Compiler emits END_FOR; POP_TOP instead of END_FOR. To support tier 2 side exits in loops.
This commit is contained in:
parent
6fadd68da5
commit
981d172f7f
16 changed files with 238 additions and 184 deletions
|
@ -546,8 +546,8 @@ operations on it as if it was a Python list. The top of the stack corresponds to
|
||||||
|
|
||||||
.. opcode:: END_FOR
|
.. opcode:: END_FOR
|
||||||
|
|
||||||
Removes the top two values from the stack.
|
Removes the top-of-stack item.
|
||||||
Equivalent to ``POP_TOP``; ``POP_TOP``.
|
Equivalent to ``POP_TOP``.
|
||||||
Used to clean up at the end of loops, hence the name.
|
Used to clean up at the end of loops, hence the name.
|
||||||
|
|
||||||
.. versionadded:: 3.12
|
.. versionadded:: 3.12
|
||||||
|
|
|
@ -787,9 +787,11 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_child));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_child));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_parent));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(after_in_parent));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(aggregate_class));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(aggregate_class));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(alias));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(allow_code));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(allow_code));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(append));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(append));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argdefs));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argdefs));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(args));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arguments));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(arguments));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argv));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(argv));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(as_integer_ratio));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(as_integer_ratio));
|
||||||
|
@ -913,6 +915,8 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(errors));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(errors));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(event));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(event));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eventmask));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(eventmask));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_type));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exc_value));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(excepthook));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(excepthook));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exception));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(exception));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(existing_file_name));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(existing_file_name));
|
||||||
|
@ -1166,6 +1170,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seek));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seek));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seekable));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seekable));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(selectors));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(selectors));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(self));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(send));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(send));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sep));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sep));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sequence));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sequence));
|
||||||
|
@ -1228,6 +1233,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timetuple));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(timetuple));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(top));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(top));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trace_callback));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trace_callback));
|
||||||
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(traceback));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trailers));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(trailers));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(translate));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(translate));
|
||||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(true));
|
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(true));
|
||||||
|
|
|
@ -276,9 +276,11 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(after_in_child)
|
STRUCT_FOR_ID(after_in_child)
|
||||||
STRUCT_FOR_ID(after_in_parent)
|
STRUCT_FOR_ID(after_in_parent)
|
||||||
STRUCT_FOR_ID(aggregate_class)
|
STRUCT_FOR_ID(aggregate_class)
|
||||||
|
STRUCT_FOR_ID(alias)
|
||||||
STRUCT_FOR_ID(allow_code)
|
STRUCT_FOR_ID(allow_code)
|
||||||
STRUCT_FOR_ID(append)
|
STRUCT_FOR_ID(append)
|
||||||
STRUCT_FOR_ID(argdefs)
|
STRUCT_FOR_ID(argdefs)
|
||||||
|
STRUCT_FOR_ID(args)
|
||||||
STRUCT_FOR_ID(arguments)
|
STRUCT_FOR_ID(arguments)
|
||||||
STRUCT_FOR_ID(argv)
|
STRUCT_FOR_ID(argv)
|
||||||
STRUCT_FOR_ID(as_integer_ratio)
|
STRUCT_FOR_ID(as_integer_ratio)
|
||||||
|
@ -402,6 +404,8 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(errors)
|
STRUCT_FOR_ID(errors)
|
||||||
STRUCT_FOR_ID(event)
|
STRUCT_FOR_ID(event)
|
||||||
STRUCT_FOR_ID(eventmask)
|
STRUCT_FOR_ID(eventmask)
|
||||||
|
STRUCT_FOR_ID(exc_type)
|
||||||
|
STRUCT_FOR_ID(exc_value)
|
||||||
STRUCT_FOR_ID(excepthook)
|
STRUCT_FOR_ID(excepthook)
|
||||||
STRUCT_FOR_ID(exception)
|
STRUCT_FOR_ID(exception)
|
||||||
STRUCT_FOR_ID(existing_file_name)
|
STRUCT_FOR_ID(existing_file_name)
|
||||||
|
@ -655,6 +659,7 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(seek)
|
STRUCT_FOR_ID(seek)
|
||||||
STRUCT_FOR_ID(seekable)
|
STRUCT_FOR_ID(seekable)
|
||||||
STRUCT_FOR_ID(selectors)
|
STRUCT_FOR_ID(selectors)
|
||||||
|
STRUCT_FOR_ID(self)
|
||||||
STRUCT_FOR_ID(send)
|
STRUCT_FOR_ID(send)
|
||||||
STRUCT_FOR_ID(sep)
|
STRUCT_FOR_ID(sep)
|
||||||
STRUCT_FOR_ID(sequence)
|
STRUCT_FOR_ID(sequence)
|
||||||
|
@ -717,6 +722,7 @@ struct _Py_global_strings {
|
||||||
STRUCT_FOR_ID(timetuple)
|
STRUCT_FOR_ID(timetuple)
|
||||||
STRUCT_FOR_ID(top)
|
STRUCT_FOR_ID(top)
|
||||||
STRUCT_FOR_ID(trace_callback)
|
STRUCT_FOR_ID(trace_callback)
|
||||||
|
STRUCT_FOR_ID(traceback)
|
||||||
STRUCT_FOR_ID(trailers)
|
STRUCT_FOR_ID(trailers)
|
||||||
STRUCT_FOR_ID(translate)
|
STRUCT_FOR_ID(translate)
|
||||||
STRUCT_FOR_ID(true)
|
STRUCT_FOR_ID(true)
|
||||||
|
|
6
Include/internal/pycore_opcode_metadata.h
generated
6
Include/internal/pycore_opcode_metadata.h
generated
|
@ -176,7 +176,7 @@ int _PyOpcode_num_popped(int opcode, int oparg) {
|
||||||
case END_ASYNC_FOR:
|
case END_ASYNC_FOR:
|
||||||
return 2;
|
return 2;
|
||||||
case END_FOR:
|
case END_FOR:
|
||||||
return 2;
|
return 1;
|
||||||
case END_SEND:
|
case END_SEND:
|
||||||
return 2;
|
return 2;
|
||||||
case ENTER_EXECUTOR:
|
case ENTER_EXECUTOR:
|
||||||
|
@ -647,7 +647,7 @@ int _PyOpcode_num_pushed(int opcode, int oparg) {
|
||||||
case INSTRUMENTED_CALL_KW:
|
case INSTRUMENTED_CALL_KW:
|
||||||
return 0;
|
return 0;
|
||||||
case INSTRUMENTED_END_FOR:
|
case INSTRUMENTED_END_FOR:
|
||||||
return 0;
|
return 1;
|
||||||
case INSTRUMENTED_END_SEND:
|
case INSTRUMENTED_END_SEND:
|
||||||
return 1;
|
return 1;
|
||||||
case INSTRUMENTED_FOR_ITER:
|
case INSTRUMENTED_FOR_ITER:
|
||||||
|
@ -1232,7 +1232,7 @@ _PyOpcode_macro_expansion[256] = {
|
||||||
[DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, 0, 0 } } },
|
[DELETE_SUBSCR] = { .nuops = 1, .uops = { { _DELETE_SUBSCR, 0, 0 } } },
|
||||||
[DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, 0, 0 } } },
|
[DICT_MERGE] = { .nuops = 1, .uops = { { _DICT_MERGE, 0, 0 } } },
|
||||||
[DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, 0, 0 } } },
|
[DICT_UPDATE] = { .nuops = 1, .uops = { { _DICT_UPDATE, 0, 0 } } },
|
||||||
[END_FOR] = { .nuops = 2, .uops = { { _POP_TOP, 0, 0 }, { _POP_TOP, 0, 0 } } },
|
[END_FOR] = { .nuops = 1, .uops = { { _POP_TOP, 0, 0 } } },
|
||||||
[END_SEND] = { .nuops = 1, .uops = { { _END_SEND, 0, 0 } } },
|
[END_SEND] = { .nuops = 1, .uops = { { _END_SEND, 0, 0 } } },
|
||||||
[EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, 0, 0 } } },
|
[EXIT_INIT_CHECK] = { .nuops = 1, .uops = { { _EXIT_INIT_CHECK, 0, 0 } } },
|
||||||
[FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, 0, 0 } } },
|
[FORMAT_SIMPLE] = { .nuops = 1, .uops = { { _FORMAT_SIMPLE, 0, 0 } } },
|
||||||
|
|
6
Include/internal/pycore_runtime_init_generated.h
generated
6
Include/internal/pycore_runtime_init_generated.h
generated
|
@ -785,9 +785,11 @@ extern "C" {
|
||||||
INIT_ID(after_in_child), \
|
INIT_ID(after_in_child), \
|
||||||
INIT_ID(after_in_parent), \
|
INIT_ID(after_in_parent), \
|
||||||
INIT_ID(aggregate_class), \
|
INIT_ID(aggregate_class), \
|
||||||
|
INIT_ID(alias), \
|
||||||
INIT_ID(allow_code), \
|
INIT_ID(allow_code), \
|
||||||
INIT_ID(append), \
|
INIT_ID(append), \
|
||||||
INIT_ID(argdefs), \
|
INIT_ID(argdefs), \
|
||||||
|
INIT_ID(args), \
|
||||||
INIT_ID(arguments), \
|
INIT_ID(arguments), \
|
||||||
INIT_ID(argv), \
|
INIT_ID(argv), \
|
||||||
INIT_ID(as_integer_ratio), \
|
INIT_ID(as_integer_ratio), \
|
||||||
|
@ -911,6 +913,8 @@ extern "C" {
|
||||||
INIT_ID(errors), \
|
INIT_ID(errors), \
|
||||||
INIT_ID(event), \
|
INIT_ID(event), \
|
||||||
INIT_ID(eventmask), \
|
INIT_ID(eventmask), \
|
||||||
|
INIT_ID(exc_type), \
|
||||||
|
INIT_ID(exc_value), \
|
||||||
INIT_ID(excepthook), \
|
INIT_ID(excepthook), \
|
||||||
INIT_ID(exception), \
|
INIT_ID(exception), \
|
||||||
INIT_ID(existing_file_name), \
|
INIT_ID(existing_file_name), \
|
||||||
|
@ -1164,6 +1168,7 @@ extern "C" {
|
||||||
INIT_ID(seek), \
|
INIT_ID(seek), \
|
||||||
INIT_ID(seekable), \
|
INIT_ID(seekable), \
|
||||||
INIT_ID(selectors), \
|
INIT_ID(selectors), \
|
||||||
|
INIT_ID(self), \
|
||||||
INIT_ID(send), \
|
INIT_ID(send), \
|
||||||
INIT_ID(sep), \
|
INIT_ID(sep), \
|
||||||
INIT_ID(sequence), \
|
INIT_ID(sequence), \
|
||||||
|
@ -1226,6 +1231,7 @@ extern "C" {
|
||||||
INIT_ID(timetuple), \
|
INIT_ID(timetuple), \
|
||||||
INIT_ID(top), \
|
INIT_ID(top), \
|
||||||
INIT_ID(trace_callback), \
|
INIT_ID(trace_callback), \
|
||||||
|
INIT_ID(traceback), \
|
||||||
INIT_ID(trailers), \
|
INIT_ID(trailers), \
|
||||||
INIT_ID(translate), \
|
INIT_ID(translate), \
|
||||||
INIT_ID(true), \
|
INIT_ID(true), \
|
||||||
|
|
18
Include/internal/pycore_unicodeobject_generated.h
generated
18
Include/internal/pycore_unicodeobject_generated.h
generated
|
@ -669,6 +669,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(aggregate_class);
|
string = &_Py_ID(aggregate_class);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(alias);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(allow_code);
|
string = &_Py_ID(allow_code);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
@ -678,6 +681,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(argdefs);
|
string = &_Py_ID(argdefs);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(args);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(arguments);
|
string = &_Py_ID(arguments);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
@ -1047,6 +1053,12 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(eventmask);
|
string = &_Py_ID(eventmask);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(exc_type);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(exc_value);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(excepthook);
|
string = &_Py_ID(excepthook);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
@ -1806,6 +1818,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(selectors);
|
string = &_Py_ID(selectors);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(self);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(send);
|
string = &_Py_ID(send);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
@ -1992,6 +2007,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
||||||
string = &_Py_ID(trace_callback);
|
string = &_Py_ID(trace_callback);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
string = &_Py_ID(traceback);
|
||||||
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
string = &_Py_ID(trailers);
|
string = &_Py_ID(trailers);
|
||||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||||
_PyUnicode_InternInPlace(interp, &string);
|
_PyUnicode_InternInPlace(interp, &string);
|
||||||
|
|
|
@ -464,6 +464,7 @@ _code_type = type(_write_atomic.__code__)
|
||||||
# Python 3.13a1 3565 (Oparg of YIELD_VALUE indicates whether it is in a yield-from)
|
# Python 3.13a1 3565 (Oparg of YIELD_VALUE indicates whether it is in a yield-from)
|
||||||
# Python 3.13a1 3566 (Emit JUMP_NO_INTERRUPT instead of JUMP for non-loop no-lineno cases)
|
# Python 3.13a1 3566 (Emit JUMP_NO_INTERRUPT instead of JUMP for non-loop no-lineno cases)
|
||||||
# Python 3.13a1 3567 (Reimplement line number propagation by the compiler)
|
# Python 3.13a1 3567 (Reimplement line number propagation by the compiler)
|
||||||
|
# Python 3.13a1 3568 (Change semantics of END_FOR)
|
||||||
|
|
||||||
# Python 3.14 will start with 3600
|
# Python 3.14 will start with 3600
|
||||||
|
|
||||||
|
@ -480,7 +481,7 @@ _code_type = type(_write_atomic.__code__)
|
||||||
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
|
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
|
||||||
# in PC/launcher.c must also be updated.
|
# in PC/launcher.c must also be updated.
|
||||||
|
|
||||||
MAGIC_NUMBER = (3567).to_bytes(2, 'little') + b'\r\n'
|
MAGIC_NUMBER = (3568).to_bytes(2, 'little') + b'\r\n'
|
||||||
|
|
||||||
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
|
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ class IsolatedCodeGenTests(CodegenTestCase):
|
||||||
('JUMP', loop_lbl),
|
('JUMP', loop_lbl),
|
||||||
exit_lbl,
|
exit_lbl,
|
||||||
('END_FOR', None),
|
('END_FOR', None),
|
||||||
|
('POP_TOP', None),
|
||||||
('LOAD_CONST', 0),
|
('LOAD_CONST', 0),
|
||||||
('RETURN_VALUE', None),
|
('RETURN_VALUE', None),
|
||||||
]
|
]
|
||||||
|
|
|
@ -158,6 +158,7 @@ dis_bug708901 = """\
|
||||||
%3d JUMP_BACKWARD 5 (to L1)
|
%3d JUMP_BACKWARD 5 (to L1)
|
||||||
|
|
||||||
%3d L2: END_FOR
|
%3d L2: END_FOR
|
||||||
|
POP_TOP
|
||||||
RETURN_CONST 0 (None)
|
RETURN_CONST 0 (None)
|
||||||
""" % (bug708901.__code__.co_firstlineno,
|
""" % (bug708901.__code__.co_firstlineno,
|
||||||
bug708901.__code__.co_firstlineno + 1,
|
bug708901.__code__.co_firstlineno + 1,
|
||||||
|
@ -791,6 +792,7 @@ Disassembly of <code object <genexpr> at 0x..., file "%s", line %d>:
|
||||||
POP_TOP
|
POP_TOP
|
||||||
JUMP_BACKWARD 12 (to L2)
|
JUMP_BACKWARD 12 (to L2)
|
||||||
L3: END_FOR
|
L3: END_FOR
|
||||||
|
POP_TOP
|
||||||
RETURN_CONST 0 (None)
|
RETURN_CONST 0 (None)
|
||||||
|
|
||||||
-- L4: CALL_INTRINSIC_1 3 (INTRINSIC_STOPITERATION_ERROR)
|
-- L4: CALL_INTRINSIC_1 3 (INTRINSIC_STOPITERATION_ERROR)
|
||||||
|
@ -843,6 +845,7 @@ dis_loop_test_quickened_code = """\
|
||||||
JUMP_BACKWARD 16 (to L1)
|
JUMP_BACKWARD 16 (to L1)
|
||||||
|
|
||||||
%3d L2: END_FOR
|
%3d L2: END_FOR
|
||||||
|
POP_TOP
|
||||||
RETURN_CONST 0 (None)
|
RETURN_CONST 0 (None)
|
||||||
""" % (loop_test.__code__.co_firstlineno,
|
""" % (loop_test.__code__.co_firstlineno,
|
||||||
loop_test.__code__.co_firstlineno + 1,
|
loop_test.__code__.co_firstlineno + 1,
|
||||||
|
@ -1648,122 +1651,123 @@ expected_opinfo_inner = [
|
||||||
]
|
]
|
||||||
|
|
||||||
expected_opinfo_jumpy = [
|
expected_opinfo_jumpy = [
|
||||||
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, label=None, positions=None),
|
Instruction(opname='RESUME', opcode=149, arg=0, argval=0, argrepr='', offset=0, start_offset=0, starts_line=True, line_number=1, label=None, positions=None, cache_info=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, label=None, 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, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=1, argval=10, argrepr='10', offset=12, start_offset=12, starts_line=False, line_number=3, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=14, start_offset=14, starts_line=False, line_number=3, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='GET_ITER', opcode=19, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, label=None, positions=None),
|
Instruction(opname='GET_ITER', opcode=19, arg=None, argval=None, argrepr='', offset=22, start_offset=22, starts_line=False, line_number=3, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='FOR_ITER', opcode=72, arg=30, argval=88, argrepr='to L4', offset=24, start_offset=24, starts_line=False, line_number=3, label=1, positions=None),
|
Instruction(opname='FOR_ITER', opcode=72, arg=30, argval=88, argrepr='to L4', offset=24, start_offset=24, starts_line=False, line_number=3, label=1, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=28, start_offset=28, starts_line=False, line_number=3, label=None, 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, label=None, positions=None, cache_info=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, label=None, 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, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=40, start_offset=40, starts_line=False, line_number=4, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=42, start_offset=42, starts_line=False, line_number=4, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=50, start_offset=50, starts_line=False, line_number=4, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=50, start_offset=50, starts_line=False, line_number=4, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=52, start_offset=52, starts_line=True, line_number=5, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=54, start_offset=54, starts_line=False, line_number=5, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, label=None, positions=None),
|
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=56, start_offset=56, starts_line=False, line_number=5, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=68, argrepr='to L2', offset=60, start_offset=60, starts_line=False, line_number=5, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=68, argrepr='to L2', offset=60, start_offset=60, starts_line=False, line_number=5, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=22, argval=24, argrepr='to L1', offset=64, start_offset=64, starts_line=True, line_number=6, label=None, positions=None),
|
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=22, argval=24, argrepr='to L1', offset=64, start_offset=64, starts_line=True, line_number=6, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=68, start_offset=68, starts_line=True, line_number=7, label=2, 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, label=2, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=70, start_offset=70, starts_line=False, line_number=7, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=72, start_offset=72, starts_line=False, line_number=7, label=None, positions=None),
|
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=72, start_offset=72, starts_line=False, line_number=7, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=2, argval=84, argrepr='to L3', offset=76, start_offset=76, starts_line=False, line_number=7, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=2, argval=84, argrepr='to L3', offset=76, start_offset=76, starts_line=False, line_number=7, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=30, argval=24, argrepr='to L1', offset=80, start_offset=80, starts_line=False, line_number=7, label=None, positions=None),
|
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=30, argval=24, argrepr='to L1', offset=80, start_offset=80, starts_line=False, line_number=7, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=True, line_number=8, label=3, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=84, start_offset=84, starts_line=True, line_number=8, label=3, positions=None, cache_info=None),
|
||||||
Instruction(opname='JUMP_FORWARD', opcode=79, arg=12, argval=112, argrepr='to L5', offset=86, start_offset=86, starts_line=False, line_number=8, label=None, positions=None),
|
Instruction(opname='JUMP_FORWARD', opcode=79, arg=13, argval=114, argrepr='to L5', offset=86, start_offset=86, starts_line=False, line_number=8, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='END_FOR', opcode=11, arg=None, argval=None, argrepr='', offset=88, start_offset=88, starts_line=True, line_number=3, label=4, positions=None),
|
Instruction(opname='END_FOR', opcode=11, arg=None, argval=None, argrepr='', offset=88, start_offset=88, starts_line=True, line_number=3, label=4, positions=None, cache_info=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, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=90, start_offset=90, starts_line=False, line_number=3, label=None, positions=None, cache_info=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, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=92, start_offset=92, starts_line=True, line_number=10, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=102, start_offset=102, starts_line=False, line_number=10, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=4, argval='I can haz else clause?', argrepr="'I can haz else clause?'", offset=102, start_offset=102, starts_line=False, line_number=10, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=110, start_offset=110, starts_line=False, line_number=10, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=104, start_offset=104, starts_line=False, line_number=10, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST_CHECK', opcode=87, arg=0, argval='i', argrepr='i', offset=112, start_offset=112, starts_line=True, line_number=11, label=5, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=112, start_offset=112, starts_line=False, line_number=10, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=114, start_offset=114, starts_line=False, line_number=11, label=None, positions=None),
|
Instruction(opname='LOAD_FAST_CHECK', opcode=87, arg=0, argval='i', argrepr='i', offset=114, start_offset=114, starts_line=True, line_number=11, label=5, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=40, argval=206, argrepr='to L9', offset=122, start_offset=122, starts_line=False, line_number=11, label=None, positions=None),
|
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=116, start_offset=116, starts_line=False, line_number=11, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=126, start_offset=126, starts_line=True, line_number=12, label=6, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=40, argval=208, argrepr='to L9', offset=124, start_offset=124, starts_line=False, line_number=11, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=136, start_offset=136, starts_line=False, line_number=12, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=128, start_offset=128, starts_line=True, line_number=12, label=6, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=138, start_offset=138, starts_line=False, line_number=12, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=138, start_offset=138, starts_line=False, line_number=12, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=146, start_offset=146, starts_line=False, line_number=12, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=140, start_offset=140, starts_line=False, line_number=12, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=148, start_offset=148, starts_line=True, line_number=13, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=148, start_offset=148, starts_line=False, line_number=12, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=150, start_offset=150, starts_line=False, line_number=13, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=150, start_offset=150, starts_line=True, line_number=13, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='BINARY_OP', opcode=45, arg=23, argval=23, argrepr='-=', offset=152, start_offset=152, starts_line=False, line_number=13, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=152, start_offset=152, starts_line=False, line_number=13, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=156, start_offset=156, starts_line=False, line_number=13, label=None, positions=None),
|
Instruction(opname='BINARY_OP', opcode=45, arg=23, argval=23, argrepr='-=', offset=154, start_offset=154, starts_line=False, line_number=13, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=158, start_offset=158, starts_line=True, line_number=14, label=None, positions=None),
|
Instruction(opname='STORE_FAST', opcode=110, arg=0, argval='i', argrepr='i', offset=158, start_offset=158, starts_line=False, line_number=13, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=160, start_offset=160, starts_line=False, line_number=14, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=160, start_offset=160, starts_line=True, line_number=14, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=162, start_offset=162, starts_line=False, line_number=14, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=3, argval=6, argrepr='6', offset=162, start_offset=162, starts_line=False, line_number=14, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=174, argrepr='to L7', offset=166, start_offset=166, starts_line=False, line_number=14, label=None, positions=None),
|
Instruction(opname='COMPARE_OP', opcode=58, arg=148, argval='>', argrepr='bool(>)', offset=164, start_offset=164, starts_line=False, line_number=14, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=31, argval=112, argrepr='to L5', offset=170, start_offset=170, starts_line=True, line_number=15, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=176, argrepr='to L7', offset=168, start_offset=168, starts_line=False, line_number=14, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=174, start_offset=174, starts_line=True, line_number=16, label=7, positions=None),
|
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=31, argval=114, argrepr='to L5', offset=172, start_offset=172, starts_line=True, line_number=15, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=176, start_offset=176, starts_line=False, line_number=16, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=176, start_offset=176, starts_line=True, line_number=16, label=7, positions=None, cache_info=None),
|
||||||
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=178, start_offset=178, starts_line=False, line_number=16, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=2, argval=4, argrepr='4', offset=178, start_offset=178, starts_line=False, line_number=16, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=1, argval=188, argrepr='to L8', offset=182, start_offset=182, starts_line=False, line_number=16, label=None, positions=None),
|
Instruction(opname='COMPARE_OP', opcode=58, arg=18, argval='<', argrepr='bool(<)', offset=180, start_offset=180, starts_line=False, line_number=16, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='JUMP_FORWARD', opcode=79, arg=20, argval=228, argrepr='to L10', offset=186, start_offset=186, starts_line=True, line_number=17, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=1, argval=190, argrepr='to L8', offset=184, start_offset=184, starts_line=False, line_number=16, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=188, start_offset=188, starts_line=True, line_number=11, label=8, positions=None),
|
Instruction(opname='JUMP_FORWARD', opcode=79, arg=20, argval=230, argrepr='to L10', offset=188, start_offset=188, starts_line=True, line_number=17, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=190, start_offset=190, starts_line=False, line_number=11, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=190, start_offset=190, starts_line=True, line_number=11, label=8, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=206, argrepr='to L9', offset=198, start_offset=198, starts_line=False, line_number=11, label=None, positions=None),
|
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=192, start_offset=192, starts_line=False, line_number=11, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=40, argval=126, argrepr='to L6', offset=202, start_offset=202, starts_line=False, line_number=11, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=2, argval=208, argrepr='to L9', offset=200, start_offset=200, starts_line=False, line_number=11, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=206, start_offset=206, starts_line=True, line_number=19, label=9, positions=None),
|
Instruction(opname='JUMP_BACKWARD', opcode=77, arg=40, argval=128, argrepr='to L6', offset=204, start_offset=204, starts_line=False, line_number=11, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
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, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=208, start_offset=208, starts_line=True, line_number=19, label=9, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=218, start_offset=218, starts_line=False, line_number=19, label=None, 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=218, start_offset=218, starts_line=False, line_number=19, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=226, start_offset=226, starts_line=False, line_number=19, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=220, start_offset=220, starts_line=False, line_number=19, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='NOP', opcode=30, arg=None, argval=None, argrepr='', offset=228, start_offset=228, starts_line=True, line_number=20, label=10, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=228, start_offset=228, starts_line=False, line_number=19, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=230, start_offset=230, starts_line=True, line_number=21, label=None, positions=None),
|
Instruction(opname='NOP', opcode=30, arg=None, argval=None, argrepr='', offset=230, start_offset=230, starts_line=True, line_number=20, label=10, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=7, argval=0, argrepr='0', offset=232, start_offset=232, starts_line=False, line_number=21, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=5, argval=1, argrepr='1', offset=232, start_offset=232, starts_line=True, line_number=21, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='BINARY_OP', opcode=45, arg=11, argval=11, argrepr='/', offset=234, start_offset=234, starts_line=False, line_number=21, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=7, argval=0, argrepr='0', offset=234, start_offset=234, starts_line=False, line_number=21, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=238, start_offset=238, starts_line=False, line_number=21, label=None, positions=None),
|
Instruction(opname='BINARY_OP', opcode=45, arg=11, argval=11, argrepr='/', offset=236, start_offset=236, starts_line=False, line_number=21, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=240, start_offset=240, starts_line=True, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=240, start_offset=240, starts_line=False, line_number=21, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='BEFORE_WITH', opcode=2, arg=None, argval=None, argrepr='', offset=242, start_offset=242, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='LOAD_FAST', opcode=85, arg=0, argval='i', argrepr='i', offset=242, start_offset=242, starts_line=True, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='STORE_FAST', opcode=110, arg=1, argval='dodgy', argrepr='dodgy', offset=244, start_offset=244, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='BEFORE_WITH', opcode=2, arg=None, argval=None, argrepr='', offset=244, start_offset=244, starts_line=False, line_number=25, label=None, positions=None, cache_info=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, label=None, positions=None),
|
Instruction(opname='STORE_FAST', opcode=110, arg=1, argval='dodgy', argrepr='dodgy', offset=246, start_offset=246, starts_line=False, line_number=25, label=None, positions=None, cache_info=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, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=248, start_offset=248, starts_line=True, line_number=26, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=258, start_offset=258, starts_line=False, line_number=26, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=8, argval='Never reach this', argrepr="'Never reach this'", offset=258, start_offset=258, starts_line=False, line_number=26, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=266, start_offset=266, starts_line=False, line_number=26, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=260, start_offset=260, starts_line=False, line_number=26, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=268, start_offset=268, starts_line=True, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=268, start_offset=268, starts_line=False, line_number=26, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=270, start_offset=270, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=270, start_offset=270, starts_line=True, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=272, start_offset=272, starts_line=False, line_number=25, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='CALL', opcode=53, arg=2, argval=2, argrepr='', offset=274, start_offset=274, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=0, argval=None, argrepr='None', offset=274, start_offset=274, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=282, start_offset=282, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=2, argval=2, argrepr='', offset=276, start_offset=276, starts_line=False, line_number=25, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=284, start_offset=284, starts_line=True, line_number=28, label=11, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=284, start_offset=284, starts_line=False, line_number=25, label=None, positions=None, cache_info=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, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=286, start_offset=286, starts_line=True, line_number=28, label=11, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=296, start_offset=296, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=296, start_offset=296, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=304, start_offset=304, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=298, start_offset=298, starts_line=False, line_number=28, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=306, start_offset=306, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=306, start_offset=306, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=308, start_offset=308, starts_line=True, line_number=25, label=None, positions=None),
|
Instruction(opname='RETURN_CONST', opcode=103, arg=0, argval=None, argrepr='None', offset=308, start_offset=308, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='WITH_EXCEPT_START', opcode=44, arg=None, argval=None, argrepr='', offset=310, start_offset=310, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=310, start_offset=310, starts_line=True, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=312, start_offset=312, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='WITH_EXCEPT_START', opcode=44, arg=None, argval=None, argrepr='', offset=312, start_offset=312, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=1, argval=326, argrepr='to L12', offset=320, start_offset=320, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='TO_BOOL', opcode=40, arg=None, argval=None, argrepr='', offset=314, start_offset=314, starts_line=False, line_number=25, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=2, argval=2, argrepr='', offset=324, start_offset=324, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_TRUE', opcode=100, arg=1, argval=328, argrepr='to L12', offset=322, start_offset=322, starts_line=False, line_number=25, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=326, start_offset=326, starts_line=False, line_number=25, label=12, positions=None),
|
Instruction(opname='RERAISE', opcode=102, arg=2, argval=2, argrepr='', offset=326, start_offset=326, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=328, start_offset=328, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=328, start_offset=328, starts_line=False, line_number=25, label=12, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=330, start_offset=330, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=332, start_offset=332, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=332, start_offset=332, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=78, arg=26, argval=284, argrepr='to L11', offset=334, start_offset=334, starts_line=False, line_number=25, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=334, start_offset=334, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=336, start_offset=336, starts_line=True, line_number=None, label=None, positions=None),
|
Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=78, arg=26, argval=286, argrepr='to L11', offset=336, start_offset=336, starts_line=False, line_number=25, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=338, start_offset=338, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=338, start_offset=338, starts_line=True, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=340, start_offset=340, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=340, start_offset=340, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=342, start_offset=342, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=4, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=344, start_offset=344, starts_line=True, line_number=22, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='CHECK_EXC_MATCH', opcode=7, arg=None, argval=None, argrepr='', offset=354, start_offset=354, starts_line=False, line_number=22, label=None, 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, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=14, argval=388, argrepr='to L13', offset=356, start_offset=356, starts_line=False, line_number=22, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=360, start_offset=360, starts_line=False, line_number=22, label=None, positions=None),
|
Instruction(opname='POP_JUMP_IF_FALSE', opcode=97, arg=14, argval=390, argrepr='to L13', offset=358, start_offset=358, starts_line=False, line_number=22, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=362, start_offset=362, starts_line=True, line_number=23, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=362, start_offset=362, starts_line=False, line_number=22, label=None, positions=None, cache_info=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=372, start_offset=372, starts_line=False, line_number=23, label=None, 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, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=374, start_offset=374, starts_line=False, line_number=23, label=None, 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, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=382, start_offset=382, starts_line=False, line_number=23, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=376, start_offset=376, starts_line=False, line_number=23, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=23, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=384, start_offset=384, starts_line=False, line_number=23, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=78, arg=52, argval=284, argrepr='to L11', offset=386, start_offset=386, starts_line=False, line_number=23, label=None, positions=None),
|
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=386, start_offset=386, starts_line=False, line_number=23, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=388, start_offset=388, starts_line=True, line_number=22, label=13, positions=None),
|
Instruction(opname='JUMP_BACKWARD_NO_INTERRUPT', opcode=78, arg=52, argval=286, argrepr='to L11', offset=388, start_offset=388, starts_line=False, line_number=23, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=390, start_offset=390, starts_line=True, line_number=None, label=None, positions=None),
|
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=390, start_offset=390, starts_line=True, line_number=22, label=13, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=392, start_offset=392, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=392, start_offset=392, starts_line=True, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=394, start_offset=394, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=394, start_offset=394, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=396, start_offset=396, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=396, start_offset=396, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=398, start_offset=398, starts_line=True, line_number=28, label=None, positions=None),
|
Instruction(opname='PUSH_EXC_INFO', opcode=33, arg=None, argval=None, argrepr='', offset=398, start_offset=398, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=408, start_offset=408, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='LOAD_GLOBAL', opcode=91, arg=3, argval='print', argrepr='print + NULL', offset=400, start_offset=400, starts_line=True, line_number=28, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('index', 1, b'\x00\x00'), ('module_keys_version', 1, b'\x00\x00'), ('builtin_keys_version', 1, b'\x00\x00')]),
|
||||||
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=410, start_offset=410, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='LOAD_CONST', opcode=83, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=410, start_offset=410, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=418, start_offset=418, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='CALL', opcode=53, arg=1, argval=1, argrepr='', offset=412, start_offset=412, starts_line=False, line_number=28, label=None, positions=None, cache_info=[('counter', 1, b'\x00\x00'), ('func_version', 2, b'\x00\x00\x00\x00')]),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=420, start_offset=420, starts_line=False, line_number=28, label=None, positions=None),
|
Instruction(opname='POP_TOP', opcode=32, arg=None, argval=None, argrepr='', offset=420, start_offset=420, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=422, start_offset=422, starts_line=True, line_number=None, label=None, positions=None),
|
Instruction(opname='RERAISE', opcode=102, arg=0, argval=0, argrepr='', offset=422, start_offset=422, starts_line=False, line_number=28, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=424, start_offset=424, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='COPY', opcode=61, arg=3, argval=3, argrepr='', offset=424, start_offset=424, starts_line=True, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=426, start_offset=426, starts_line=False, line_number=None, label=None, positions=None),
|
Instruction(opname='POP_EXCEPT', opcode=31, arg=None, argval=None, argrepr='', offset=426, start_offset=426, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
|
Instruction(opname='RERAISE', opcode=102, arg=1, argval=1, argrepr='', offset=428, start_offset=428, starts_line=False, line_number=None, label=None, positions=None, cache_info=None),
|
||||||
]
|
]
|
||||||
|
|
||||||
# One last piece of inspect fodder to check the default line number handling
|
# One last piece of inspect fodder to check the default line number handling
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
The ``END_FOR`` instruction now pops only one value. This is to better
|
||||||
|
support side exits in loops.
|
50
Programs/test_frozenmain.h
generated
50
Programs/test_frozenmain.h
generated
|
@ -1,7 +1,7 @@
|
||||||
// Auto-generated by Programs/freeze_test_frozenmain.py
|
// Auto-generated by Programs/freeze_test_frozenmain.py
|
||||||
unsigned char M_test_frozenmain[] = {
|
unsigned char M_test_frozenmain[] = {
|
||||||
227,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
|
227,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
|
||||||
0,0,0,0,0,243,164,0,0,0,149,0,83,0,83,1,
|
0,0,0,0,0,243,166,0,0,0,149,0,83,0,83,1,
|
||||||
75,0,114,0,83,0,83,1,75,1,114,1,92,2,34,0,
|
75,0,114,0,83,0,83,1,75,1,114,1,92,2,34,0,
|
||||||
83,2,53,1,0,0,0,0,0,0,32,0,92,2,34,0,
|
83,2,53,1,0,0,0,0,0,0,32,0,92,2,34,0,
|
||||||
83,3,92,0,82,6,0,0,0,0,0,0,0,0,0,0,
|
83,3,92,0,82,6,0,0,0,0,0,0,0,0,0,0,
|
||||||
|
@ -11,28 +11,28 @@ unsigned char M_test_frozenmain[] = {
|
||||||
0,0,83,4,5,0,0,0,114,5,83,5,19,0,72,20,
|
0,0,83,4,5,0,0,0,114,5,83,5,19,0,72,20,
|
||||||
0,0,114,6,92,2,34,0,83,6,92,6,14,0,83,7,
|
0,0,114,6,92,2,34,0,83,6,92,6,14,0,83,7,
|
||||||
92,5,92,6,5,0,0,0,14,0,51,4,53,1,0,0,
|
92,5,92,6,5,0,0,0,14,0,51,4,53,1,0,0,
|
||||||
0,0,0,0,32,0,77,22,0,0,11,0,103,1,41,8,
|
0,0,0,0,32,0,77,22,0,0,11,0,32,0,103,1,
|
||||||
233,0,0,0,0,78,122,18,70,114,111,122,101,110,32,72,
|
41,8,233,0,0,0,0,78,122,18,70,114,111,122,101,110,
|
||||||
101,108,108,111,32,87,111,114,108,100,122,8,115,121,115,46,
|
32,72,101,108,108,111,32,87,111,114,108,100,122,8,115,121,
|
||||||
97,114,103,118,218,6,99,111,110,102,105,103,41,5,218,12,
|
115,46,97,114,103,118,218,6,99,111,110,102,105,103,41,5,
|
||||||
112,114,111,103,114,97,109,95,110,97,109,101,218,10,101,120,
|
218,12,112,114,111,103,114,97,109,95,110,97,109,101,218,10,
|
||||||
101,99,117,116,97,98,108,101,218,15,117,115,101,95,101,110,
|
101,120,101,99,117,116,97,98,108,101,218,15,117,115,101,95,
|
||||||
118,105,114,111,110,109,101,110,116,218,17,99,111,110,102,105,
|
101,110,118,105,114,111,110,109,101,110,116,218,17,99,111,110,
|
||||||
103,117,114,101,95,99,95,115,116,100,105,111,218,14,98,117,
|
102,105,103,117,114,101,95,99,95,115,116,100,105,111,218,14,
|
||||||
102,102,101,114,101,100,95,115,116,100,105,111,122,7,99,111,
|
98,117,102,102,101,114,101,100,95,115,116,100,105,111,122,7,
|
||||||
110,102,105,103,32,122,2,58,32,41,7,218,3,115,121,115,
|
99,111,110,102,105,103,32,122,2,58,32,41,7,218,3,115,
|
||||||
218,17,95,116,101,115,116,105,110,116,101,114,110,97,108,99,
|
121,115,218,17,95,116,101,115,116,105,110,116,101,114,110,97,
|
||||||
97,112,105,218,5,112,114,105,110,116,218,4,97,114,103,118,
|
108,99,97,112,105,218,5,112,114,105,110,116,218,4,97,114,
|
||||||
218,11,103,101,116,95,99,111,110,102,105,103,115,114,3,0,
|
103,118,218,11,103,101,116,95,99,111,110,102,105,103,115,114,
|
||||||
0,0,218,3,107,101,121,169,0,243,0,0,0,0,250,18,
|
3,0,0,0,218,3,107,101,121,169,0,243,0,0,0,0,
|
||||||
116,101,115,116,95,102,114,111,122,101,110,109,97,105,110,46,
|
250,18,116,101,115,116,95,102,114,111,122,101,110,109,97,105,
|
||||||
112,121,250,8,60,109,111,100,117,108,101,62,114,18,0,0,
|
110,46,112,121,250,8,60,109,111,100,117,108,101,62,114,18,
|
||||||
0,1,0,0,0,115,99,0,0,0,240,3,1,1,1,243,
|
0,0,0,1,0,0,0,115,99,0,0,0,240,3,1,1,
|
||||||
8,0,1,11,219,0,24,225,0,5,208,6,26,212,0,27,
|
1,243,8,0,1,11,219,0,24,225,0,5,208,6,26,212,
|
||||||
217,0,5,128,106,144,35,151,40,145,40,212,0,27,216,9,
|
0,27,217,0,5,128,106,144,35,151,40,145,40,212,0,27,
|
||||||
26,215,9,38,210,9,38,211,9,40,168,24,209,9,50,128,
|
216,9,26,215,9,38,210,9,38,211,9,40,168,24,209,9,
|
||||||
6,240,2,6,12,2,242,0,7,1,42,128,67,241,14,0,
|
50,128,6,240,2,6,12,2,242,0,7,1,42,128,67,241,
|
||||||
5,10,136,71,144,67,144,53,152,2,152,54,160,35,153,59,
|
14,0,5,10,136,71,144,67,144,53,152,2,152,54,160,35,
|
||||||
152,45,208,10,40,214,4,41,241,15,7,1,42,114,16,0,
|
153,59,152,45,208,10,40,214,4,41,242,15,7,1,42,114,
|
||||||
0,0,
|
16,0,0,0,
|
||||||
};
|
};
|
||||||
|
|
|
@ -265,9 +265,9 @@ dummy_func(
|
||||||
res = NULL;
|
res = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
macro(END_FOR) = POP_TOP + POP_TOP;
|
macro(END_FOR) = POP_TOP;
|
||||||
|
|
||||||
inst(INSTRUMENTED_END_FOR, (receiver, value --)) {
|
inst(INSTRUMENTED_END_FOR, (receiver, value -- receiver)) {
|
||||||
TIER_ONE_ONLY
|
TIER_ONE_ONLY
|
||||||
/* Need to create a fake StopIteration error here,
|
/* Need to create a fake StopIteration error here,
|
||||||
* to conform to PEP 380 */
|
* to conform to PEP 380 */
|
||||||
|
@ -2550,8 +2550,8 @@ dummy_func(
|
||||||
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instruction */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
// Common case: no jump, leave it to the code generator
|
// Common case: no jump, leave it to the code generator
|
||||||
|
@ -2599,8 +2599,8 @@ dummy_func(
|
||||||
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
/* Skip END_FOR */
|
/* Skip END_FOR and POP_TOP */
|
||||||
target = next_instr + oparg + 1;
|
target = next_instr + oparg + 2;
|
||||||
}
|
}
|
||||||
INSTRUMENTED_JUMP(this_instr, target, PY_MONITORING_EVENT_BRANCH);
|
INSTRUMENTED_JUMP(this_instr, target, PY_MONITORING_EVENT_BRANCH);
|
||||||
}
|
}
|
||||||
|
@ -2621,8 +2621,8 @@ dummy_func(
|
||||||
}
|
}
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instructions */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2667,8 +2667,8 @@ dummy_func(
|
||||||
}
|
}
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instructions */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2709,8 +2709,8 @@ dummy_func(
|
||||||
if (r->len <= 0) {
|
if (r->len <= 0) {
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
Py_DECREF(r);
|
Py_DECREF(r);
|
||||||
// Jump over END_FOR instruction.
|
// Jump over END_FOR and POP_TOP instructions.
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3075,7 +3075,12 @@ compiler_for(struct compiler *c, stmt_ty s)
|
||||||
ADDOP_JUMP(c, NO_LOCATION, JUMP, start);
|
ADDOP_JUMP(c, NO_LOCATION, JUMP, start);
|
||||||
|
|
||||||
USE_LABEL(c, cleanup);
|
USE_LABEL(c, cleanup);
|
||||||
|
/* It is important for instrumentation that the `END_FOR` comes first.
|
||||||
|
* Iteration over a generator will jump to the first of these instructions,
|
||||||
|
* but a non-generator will jump to a later instruction.
|
||||||
|
*/
|
||||||
ADDOP(c, NO_LOCATION, END_FOR);
|
ADDOP(c, NO_LOCATION, END_FOR);
|
||||||
|
ADDOP(c, NO_LOCATION, POP_TOP);
|
||||||
|
|
||||||
compiler_pop_fblock(c, FOR_LOOP, start);
|
compiler_pop_fblock(c, FOR_LOOP, start);
|
||||||
|
|
||||||
|
@ -5390,7 +5395,12 @@ compiler_sync_comprehension_generator(struct compiler *c, location loc,
|
||||||
ADDOP_JUMP(c, elt_loc, JUMP, start);
|
ADDOP_JUMP(c, elt_loc, JUMP, start);
|
||||||
|
|
||||||
USE_LABEL(c, anchor);
|
USE_LABEL(c, anchor);
|
||||||
|
/* It is important for instrumentation that the `END_FOR` comes first.
|
||||||
|
* Iteration over a generator will jump to the first of these instructions,
|
||||||
|
* but a non-generator will jump to a later instruction.
|
||||||
|
*/
|
||||||
ADDOP(c, NO_LOCATION, END_FOR);
|
ADDOP(c, NO_LOCATION, END_FOR);
|
||||||
|
ADDOP(c, NO_LOCATION, POP_TOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|
35
Python/generated_cases.c.h
generated
35
Python/generated_cases.c.h
generated
|
@ -2342,17 +2342,9 @@
|
||||||
next_instr += 1;
|
next_instr += 1;
|
||||||
INSTRUCTION_STATS(END_FOR);
|
INSTRUCTION_STATS(END_FOR);
|
||||||
PyObject *value;
|
PyObject *value;
|
||||||
// _POP_TOP
|
|
||||||
value = stack_pointer[-1];
|
value = stack_pointer[-1];
|
||||||
{
|
Py_DECREF(value);
|
||||||
Py_DECREF(value);
|
stack_pointer += -1;
|
||||||
}
|
|
||||||
// _POP_TOP
|
|
||||||
value = stack_pointer[-2];
|
|
||||||
{
|
|
||||||
Py_DECREF(value);
|
|
||||||
}
|
|
||||||
stack_pointer += -2;
|
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2505,8 +2497,8 @@
|
||||||
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instruction */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
// Common case: no jump, leave it to the code generator
|
// Common case: no jump, leave it to the code generator
|
||||||
|
@ -2567,8 +2559,8 @@
|
||||||
}
|
}
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instructions */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2608,8 +2600,8 @@
|
||||||
if (r->len <= 0) {
|
if (r->len <= 0) {
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
Py_DECREF(r);
|
Py_DECREF(r);
|
||||||
// Jump over END_FOR instruction.
|
// Jump over END_FOR and POP_TOP instructions.
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2655,8 +2647,8 @@
|
||||||
}
|
}
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
/* Jump forward oparg, then skip following END_FOR instruction */
|
/* Jump forward oparg, then skip following END_FOR and POP_TOP instructions */
|
||||||
JUMPBY(oparg + 1);
|
JUMPBY(oparg + 2);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2952,9 +2944,8 @@
|
||||||
}
|
}
|
||||||
PyErr_SetRaisedException(NULL);
|
PyErr_SetRaisedException(NULL);
|
||||||
}
|
}
|
||||||
Py_DECREF(receiver);
|
|
||||||
Py_DECREF(value);
|
Py_DECREF(value);
|
||||||
stack_pointer += -2;
|
stack_pointer += -1;
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3005,8 +2996,8 @@
|
||||||
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
next_instr[oparg].op.code == INSTRUMENTED_END_FOR);
|
||||||
STACK_SHRINK(1);
|
STACK_SHRINK(1);
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
/* Skip END_FOR */
|
/* Skip END_FOR and POP_TOP */
|
||||||
target = next_instr + oparg + 1;
|
target = next_instr + oparg + 2;
|
||||||
}
|
}
|
||||||
INSTRUMENTED_JUMP(this_instr, target, PY_MONITORING_EVENT_BRANCH);
|
INSTRUMENTED_JUMP(this_instr, target, PY_MONITORING_EVENT_BRANCH);
|
||||||
DISPATCH();
|
DISPATCH();
|
||||||
|
|
|
@ -572,9 +572,10 @@ top: // Jump here after _PUSH_FRAME or likely branches
|
||||||
uop = _PyUOp_Replacements[uop];
|
uop = _PyUOp_Replacements[uop];
|
||||||
assert(uop != 0);
|
assert(uop != 0);
|
||||||
if (uop == _FOR_ITER_TIER_TWO) {
|
if (uop == _FOR_ITER_TIER_TWO) {
|
||||||
target += 1 + INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 + extended;
|
target += 1 + INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 2 + extended;
|
||||||
assert(_PyCode_CODE(code)[target-1].op.code == END_FOR ||
|
assert(_PyCode_CODE(code)[target-2].op.code == END_FOR ||
|
||||||
_PyCode_CODE(code)[target-1].op.code == INSTRUMENTED_END_FOR);
|
_PyCode_CODE(code)[target-2].op.code == INSTRUMENTED_END_FOR);
|
||||||
|
assert(_PyCode_CODE(code)[target-1].op.code == POP_TOP);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -123,6 +123,14 @@ IDENTIFIERS = [
|
||||||
'__rdivmod__',
|
'__rdivmod__',
|
||||||
'__buffer__',
|
'__buffer__',
|
||||||
'__release_buffer__',
|
'__release_buffer__',
|
||||||
|
|
||||||
|
#Workarounds for GH-108918
|
||||||
|
'alias',
|
||||||
|
'args',
|
||||||
|
'exc_type',
|
||||||
|
'exc_value',
|
||||||
|
'self',
|
||||||
|
'traceback',
|
||||||
]
|
]
|
||||||
|
|
||||||
NON_GENERATED_IMMORTAL_OBJECTS = [
|
NON_GENERATED_IMMORTAL_OBJECTS = [
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue