The whitespace around the numbers in full painting are impossible to uniquely solve. It would require a non-unique map where each individual byte maps more than once at the same time. UNSOLVED!

This mapping is unfinished: 11 of 2118 nodes are still unmarked.

This mapping has 1 all-to-all group: every node on one side corresponds to every node on the other, and none is deleted or inserted. Each member carries an all N:M badge; selecting one highlights all of its counterparts, in the tree and in the code view alike.

Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–22 unchanged (22 lines)
23void _PyOpcode_RecordFunction_NOS(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
24 _PyStackRef nos;
25 nos = stack_pointer[-2];
26 *recorded_value = (PyObject *)PyStackRef_AsPyObjectBorrow(nos);
27 Py_INCREF(*recorded_value);
28}
29
30void _PyOpcode_RecordFunction_4OS(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
31 _PyStackRef value;
32 value = stack_pointer[-4];
33 *recorded_value = (PyObject *)PyStackRef_AsPyObjectBorrow(value);
34 Py_INCREF(*recorded_value);
35}
…lines 36–48 unchanged (13 lines)
49 PyObject *func = ((PyMethodObject *)callable_o)->im_func;
50 *recorded_value = (PyObject *)func;
51 Py_INCREF(*recorded_value);
52 }
53}
54
55void _PyOpcode_RecordFunction_CALLER_CODE(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
56 _PyInterpreterFrame *caller_frame = frame->previous;
57 if (caller_frame->owner < FRAME_OWNED_BY_INTERPRETER) {
58 PyCodeObject *code = _PyFrame_GetCode(frame->previous);
59 *recorded_value = (PyObject *)code;
60 Py_INCREF(*recorded_value);
61 }
62}
63
64#define _RECORD_TOS_TYPE_INDEX 1
65#define _RECORD_TOS_INDEX 2
66#define _RECORD_CALLER_CODE_INDEX 3
67#define _RECORD_NOS_INDEX 4
68#define _RECORD_CALLABLE_INDEX 5
69#define _RECORD_BOUND_METHOD_INDEX 6
70#define _RECORD_4OS_INDEX 7
71const uint8_t _PyOpcode_RecordFunctionIndices[256] = {
72 [TO_BOOL_ALWAYS_TRUE] = _RECORD_TOS_TYPE_INDEX,
73 [BINARY_OP_SUBSCR_GETITEM] = _RECORD_TOS_INDEX,
74 [RETURN_VALUE] = _RECORD_CALLER_CODE_INDEX,
75 [YIELD_VALUE] = _RECORD_CALLER_CODE_INDEX,
76 [LOAD_ATTR_INSTANCE_VALUE] = _RECORD_TOS_TYPE_INDEX,
77 [LOAD_ATTR_WITH_HINT] = _RECORD_TOS_TYPE_INDEX,
78 [LOAD_ATTR_SLOT] = _RECORD_TOS_TYPE_INDEX,
79 [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _RECORD_TOS_TYPE_INDEX,
80 [LOAD_ATTR_PROPERTY] = _RECORD_TOS_TYPE_INDEX,
81 [STORE_ATTR_WITH_HINT] = _RECORD_TOS_TYPE_INDEX,
82 [STORE_ATTR_SLOT] = _RECORD_TOS_TYPE_INDEX,
83 [FOR_ITER_GEN] = _RECORD_NOS_INDEX,
84 [LOAD_ATTR_METHOD_WITH_VALUES] = _RECORD_TOS_TYPE_INDEX,
85 [LOAD_ATTR_METHOD_NO_DICT] = _RECORD_TOS_TYPE_INDEX,
86 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _RECORD_TOS_TYPE_INDEX,
87 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _RECORD_TOS_TYPE_INDEX,
88 [LOAD_ATTR_METHOD_LAZY_DICT] = _RECORD_TOS_TYPE_INDEX,
89 [CALL_PY_GENERAL] = _RECORD_CALLABLE_INDEX,
…lines 90–96 unchanged (7 lines)
97 [CALL_BUILTIN_FAST] = _RECORD_CALLABLE_INDEX,
98 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _RECORD_CALLABLE_INDEX,
99 [CALL_METHOD_DESCRIPTOR_O] = _RECORD_CALLABLE_INDEX,
100 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _RECORD_CALLABLE_INDEX,
101 [CALL_METHOD_DESCRIPTOR_NOARGS] = _RECORD_CALLABLE_INDEX,
102 [CALL_EX_PY] = _RECORD_4OS_INDEX,
103 [RETURN_GENERATOR] = _RECORD_CALLER_CODE_INDEX,
104};
105
106const _Py_RecordFuncPtr _PyOpcode_RecordFunctions[8] = {
107 [0] = NULL,
108 [_RECORD_TOS_TYPE_INDEX] = _PyOpcode_RecordFunction_TOS_TYPE,
109 [_RECORD_TOS_INDEX] = _PyOpcode_RecordFunction_TOS,
110 [_RECORD_CALLER_CODE_INDEX] = _PyOpcode_RecordFunction_CALLER_CODE,
111 [_RECORD_NOS_INDEX] = _PyOpcode_RecordFunction_NOS,
112 [_RECORD_CALLABLE_INDEX] = _PyOpcode_RecordFunction_CALLABLE,
113 [_RECORD_BOUND_METHOD_INDEX] = _PyOpcode_RecordFunction_BOUND_METHOD,
114 [_RECORD_4OS_INDEX] = _PyOpcode_RecordFunction_4OS,
115};
116

After

…lines 1–23 unchanged (23 lines)
24 _PyStackRef nos;
25 nos = stack_pointer[-2];
26 *recorded_value = (PyObject *)PyStackRef_AsPyObjectBorrow(nos);
27 Py_INCREF(*recorded_value);
28}
29
30void _PyOpcode_RecordFunction_NOS_GEN_FUNC(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
31 _PyStackRef nos;
32 nos = stack_pointer[-2];
33 PyObject *obj = PyStackRef_AsPyObjectBorrow(nos);
34 if (PyGen_Check(obj)) {
35 _PyFrame_SetStackPointer(frame, stack_pointer);
36 PyObject *func = (PyObject *)_PyFrame_GetFunction(&((PyGenObject *)obj)->gi_iframe);
37 stack_pointer = _PyFrame_GetStackPointer(frame);
38 *recorded_value = (PyObject *)func;
39 Py_INCREF(*recorded_value);
40 }
41}
42
43void _PyOpcode_RecordFunction_4OS(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
44 _PyStackRef value;
45 value = stack_pointer[-4];
46 *recorded_value = (PyObject *)PyStackRef_AsPyObjectBorrow(value);
47 Py_INCREF(*recorded_value);
…lines 48–61 unchanged (14 lines)
62 PyObject *func = ((PyMethodObject *)callable_o)->im_func;
63 *recorded_value = (PyObject *)func;
64 Py_INCREF(*recorded_value);
65 }
66}
67
68void _PyOpcode_RecordFunction_CODE(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer, int oparg, PyObject **recorded_value) {
69 *recorded_value = (PyObject *)NULL;
70 Py_INCREF(*recorded_value);
71}
72
73#define _RECORD_TOS_TYPE_INDEX 1
74#define _RECORD_NOS_INDEX 2
75#define _RECORD_NOS_GEN_FUNC_INDEX 3
76#define _RECORD_CALLABLE_INDEX 4
77#define _RECORD_BOUND_METHOD_INDEX 5
78#define _RECORD_4OS_INDEX 6
79const uint8_t _PyOpcode_RecordFunctionIndices[256] = {
80 [TO_BOOL_ALWAYS_TRUE] = _RECORD_TOS_TYPE_INDEX,
81 [BINARY_OP_SUBSCR_GETITEM] = _RECORD_NOS_INDEX,
82 [SEND_GEN] = _RECORD_NOS_GEN_FUNC_INDEX,
83 [LOAD_ATTR_INSTANCE_VALUE] = _RECORD_TOS_TYPE_INDEX,
84 [LOAD_ATTR_WITH_HINT] = _RECORD_TOS_TYPE_INDEX,
85 [LOAD_ATTR_SLOT] = _RECORD_TOS_TYPE_INDEX,
86 [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _RECORD_TOS_TYPE_INDEX,
87 [LOAD_ATTR_PROPERTY] = _RECORD_TOS_TYPE_INDEX,
88 [STORE_ATTR_WITH_HINT] = _RECORD_TOS_TYPE_INDEX,
89 [STORE_ATTR_SLOT] = _RECORD_TOS_TYPE_INDEX,
90 [FOR_ITER_GEN] = _RECORD_NOS_GEN_FUNC_INDEX,
91 [LOAD_ATTR_METHOD_WITH_VALUES] = _RECORD_TOS_TYPE_INDEX,
92 [LOAD_ATTR_METHOD_NO_DICT] = _RECORD_TOS_TYPE_INDEX,
93 [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _RECORD_TOS_TYPE_INDEX,
94 [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _RECORD_TOS_TYPE_INDEX,
95 [LOAD_ATTR_METHOD_LAZY_DICT] = _RECORD_TOS_TYPE_INDEX,
96 [CALL_PY_GENERAL] = _RECORD_CALLABLE_INDEX,
…lines 97–103 unchanged (7 lines)
104 [CALL_BUILTIN_FAST] = _RECORD_CALLABLE_INDEX,
105 [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _RECORD_CALLABLE_INDEX,
106 [CALL_METHOD_DESCRIPTOR_O] = _RECORD_CALLABLE_INDEX,
107 [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _RECORD_CALLABLE_INDEX,
108 [CALL_METHOD_DESCRIPTOR_NOARGS] = _RECORD_CALLABLE_INDEX,
109 [CALL_EX_PY] = _RECORD_4OS_INDEX,
110};
111
112const _Py_RecordFuncPtr _PyOpcode_RecordFunctions[7] = {
113 [0] = NULL,
114 [_RECORD_TOS_TYPE_INDEX] = _PyOpcode_RecordFunction_TOS_TYPE,
115 [_RECORD_NOS_INDEX] = _PyOpcode_RecordFunction_NOS,
116 [_RECORD_NOS_GEN_FUNC_INDEX] = _PyOpcode_RecordFunction_NOS_GEN_FUNC,
117 [_RECORD_CALLABLE_INDEX] = _PyOpcode_RecordFunction_CALLABLE,
118 [_RECORD_BOUND_METHOD_INDEX] = _PyOpcode_RecordFunction_BOUND_METHOD,
119 [_RECORD_4OS_INDEX] = _PyOpcode_RecordFunction_4OS,
120};
121

Before

translation_unit
comment "// This file is generated by Tools/cases_generator/record_fu"...
comment "// from:"
comment "// Python/bytecodes.c"
comment "// Do not edit!"
preproc_ifdef
#ifdef "#ifdef"
identifier "TIER_ONE"
preproc_call
preproc_directive "#error"
preproc_arg "\"This file is for Tier 2 only\""
#endif "#endif"
function_definition (+77 nodes collapsed)
function_definition (+82 nodes collapsed)
function_definition (+77 nodes collapsed)
function_definition (+77 nodes collapsed)
function_definition (+80 nodes collapsed)
function_definition (+130 nodes collapsed)
function_definition
primitive_type "void"
function_declarator
identifier "_PyOpcode_RecordFunction_CALLER_CODE"
parameter_list (+26 nodes collapsed)
compound_statement
{ "{"
declaration
type_identifier "_PyInterpreterFrame"
init_declarator
pointer_declarator
* "*"
identifier "caller_frame"
= "="
field_expression
identifier "frame"
-> "->"
field_identifier "previous"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
field_expression
identifier "caller_frame"
-> "->"
field_identifier "owner"
< "<"
identifier "FRAME_OWNED_BY_INTERPRETER"
) ")"
compound_statement
{ "{"
declaration
type_identifier "PyCodeObject"
init_declarator
pointer_declarator
* "*"
identifier "code"
= "="
call_expression
identifier "_PyFrame_GetCode"
argument_list
( "("
field_expression
identifier "frame"
-> "->"
field_identifier "previous"
) ")"
; ";"
expression_statement
assignment_expression
pointer_expression
* "*"
identifier "recorded_value"
= "="
cast_expression
( "("
type_descriptor
type_identifier "PyObject"
abstract_pointer_declarator
* "*"
) ")"
identifier "code" all 1:2
; ";"
expression_statement
call_expression
identifier "Py_INCREF"
argument_list
( "("
pointer_expression
* "*"
identifier "recorded_value"
) ")"
; ";"
} "}"
} "}"
preproc_def
#define "#define"
identifier "_RECORD_TOS_TYPE_INDEX"
preproc_arg "1"
preproc_def
#define "#define"
identifier "_RECORD_TOS_INDEX"
preproc_arg "2"
preproc_def
#define "#define"
identifier "_RECORD_CALLER_CODE_INDEX"
preproc_arg "3"
preproc_def
#define "#define"
identifier "_RECORD_NOS_INDEX"
preproc_arg "4"
preproc_def
#define "#define"
identifier "_RECORD_CALLABLE_INDEX"
preproc_arg "5"
preproc_def
#define "#define"
identifier "_RECORD_BOUND_METHOD_INDEX"
preproc_arg "6"
preproc_def
#define "#define"
identifier "_RECORD_4OS_INDEX"
preproc_arg "7"
declaration
type_qualifier
const "const"
primitive_type "uint8_t"
init_declarator
array_declarator
identifier "_PyOpcode_RecordFunctionIndices"
[ "["
number_literal "256"
] "]"
= "="
initializer_list
{ "{"
initializer_pair
subscript_designator
[ "["
identifier "TO_BOOL_ALWAYS_TRUE"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "BINARY_OP_SUBSCR_GETITEM"
] "]"
= "="
identifier "_RECORD_TOS_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "RETURN_VALUE"
] "]"
= "="
identifier "_RECORD_CALLER_CODE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "YIELD_VALUE"
] "]"
= "="
identifier "_RECORD_CALLER_CODE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_INSTANCE_VALUE"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_WITH_HINT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_SLOT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_PROPERTY"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "STORE_ATTR_WITH_HINT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "STORE_ATTR_SLOT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "FOR_ITER_GEN"
] "]"
= "="
identifier "_RECORD_NOS_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_WITH_VALUES"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_NO_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_NONDESCRIPTOR_NO_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_LAZY_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_PY_GENERAL"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BOUND_METHOD_GENERAL"
] "]"
= "="
identifier "_RECORD_BOUND_METHOD_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_NON_PY_GENERAL"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BOUND_METHOD_EXACT_ARGS"
] "]"
= "="
identifier "_RECORD_BOUND_METHOD_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_PY_EXACT_ARGS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_ALLOC_AND_ENTER_INIT"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_CLASS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_O"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_FAST"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_FAST_WITH_KEYWORDS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_O"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_NOARGS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_EX_PY"
] "]"
= "="
identifier "_RECORD_4OS_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "RETURN_GENERATOR"
] "]"
= "="
identifier "_RECORD_CALLER_CODE_INDEX"
, ","
} "}"
; ";"
declaration
type_qualifier
const "const"
type_identifier "_Py_RecordFuncPtr"
init_declarator
array_declarator
identifier "_PyOpcode_RecordFunctions"
[ "["
number_literal "8"
] "]"
= "="
initializer_list
{ "{"
initializer_pair
subscript_designator
[ "["
number_literal "0"
] "]"
= "="
null
NULL "NULL"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_TOS_TYPE_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_TOS_TYPE"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_TOS_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_TOS"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_CALLER_CODE_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_CALLER_CODE"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_NOS_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_NOS"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_CALLABLE_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_CALLABLE"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_BOUND_METHOD_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_BOUND_METHOD"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_4OS_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_4OS"
, ","
} "}"
; ";"

After

translation_unit
comment "// This file is generated by Tools/cases_generator/record_fu"...
comment "// from:"
comment "// Python/bytecodes.c"
comment "// Do not edit!"
preproc_ifdef
#ifdef "#ifdef"
identifier "TIER_ONE"
preproc_call
preproc_directive "#error"
preproc_arg "\"This file is for Tier 2 only\""
#endif "#endif"
function_definition (+77 nodes collapsed)
function_definition (+82 nodes collapsed)
function_definition (+77 nodes collapsed)
function_definition
primitive_type "void"
function_declarator
identifier "_PyOpcode_RecordFunction_NOS_GEN_FUNC"
parameter_list
( "("
parameter_declaration
type_identifier "_PyInterpreterFrame"
pointer_declarator
* "*"
identifier "frame"
, ","
parameter_declaration
type_identifier "_PyStackRef"
pointer_declarator
* "*"
identifier "stack_pointer"
, ","
parameter_declaration
primitive_type "int"
identifier "oparg"
, ","
parameter_declaration
type_identifier "PyObject"
pointer_declarator
* "*"
pointer_declarator
* "*"
identifier "recorded_value"
) ")"
compound_statement
{ "{"
declaration
type_identifier "_PyStackRef"
identifier "nos"
; ";"
expression_statement
assignment_expression
identifier "nos"
= "="
subscript_expression
identifier "stack_pointer"
[ "["
number_literal "-2"
] "]"
; ";"
declaration
type_identifier "PyObject"
init_declarator
pointer_declarator
* "*"
identifier "obj"
= "="
call_expression
identifier "PyStackRef_AsPyObjectBorrow"
argument_list
( "("
identifier "nos"
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
call_expression
identifier "PyGen_Check"
argument_list
( "("
identifier "obj"
) ")"
) ")"
compound_statement
{ "{"
expression_statement
call_expression
identifier "_PyFrame_SetStackPointer"
argument_list
( "("
identifier "frame"
, ","
identifier "stack_pointer"
) ")"
; ";"
declaration
type_identifier "PyObject"
init_declarator
pointer_declarator
* "*"
identifier "func"
= "="
cast_expression
( "("
type_descriptor
type_identifier "PyObject"
abstract_pointer_declarator
* "*"
) ")"
call_expression
identifier "_PyFrame_GetFunction"
argument_list
( "("
pointer_expression
& "&"
field_expression
parenthesized_expression
( "("
cast_expression
( "("
type_descriptor
type_identifier "PyGenObject"
abstract_pointer_declarator
* "*"
) ")"
identifier "obj"
) ")"
-> "->"
field_identifier "gi_iframe"
) ")"
; ";"
expression_statement
assignment_expression
identifier "stack_pointer"
= "="
call_expression
identifier "_PyFrame_GetStackPointer"
argument_list
( "("
identifier "frame"
) ")"
; ";"
expression_statement
assignment_expression
pointer_expression
* "*"
identifier "recorded_value"
= "="
cast_expression
( "("
type_descriptor
type_identifier "PyObject"
abstract_pointer_declarator
* "*"
) ")"
identifier "func"
; ";"
expression_statement
call_expression
identifier "Py_INCREF"
argument_list
( "("
pointer_expression
* "*"
identifier "recorded_value"
) ")"
; ";"
} "}"
} "}"
function_definition (+77 nodes collapsed)
function_definition (+80 nodes collapsed)
function_definition (+130 nodes collapsed)
function_definition
primitive_type "void"
function_declarator
identifier "_PyOpcode_RecordFunction_CODE"
parameter_list (+26 nodes collapsed)
compound_statement
{ "{"
expression_statement
assignment_expression
pointer_expression
* "*"
identifier "recorded_value"
= "="
cast_expression
( "("
type_descriptor
type_identifier "PyObject"
abstract_pointer_declarator
* "*"
) ")"
null all 1:2
NULL "NULL" all 1:2
; ";"
expression_statement
call_expression
identifier "Py_INCREF"
argument_list
( "("
pointer_expression
* "*"
identifier "recorded_value"
) ")"
; ";"
} "}"
preproc_def
#define "#define"
identifier "_RECORD_TOS_TYPE_INDEX"
preproc_arg "1"
preproc_def
#define "#define"
identifier "_RECORD_NOS_INDEX"
preproc_arg "2"
preproc_def
#define "#define"
identifier "_RECORD_NOS_GEN_FUNC_INDEX"
preproc_arg "3"
preproc_def
#define "#define"
identifier "_RECORD_CALLABLE_INDEX"
preproc_arg "4"
preproc_def
#define "#define"
identifier "_RECORD_BOUND_METHOD_INDEX"
preproc_arg "5"
preproc_def
#define "#define"
identifier "_RECORD_4OS_INDEX"
preproc_arg "6"
declaration
type_qualifier
const "const"
primitive_type "uint8_t"
init_declarator
array_declarator
identifier "_PyOpcode_RecordFunctionIndices"
[ "["
number_literal "256"
] "]"
= "="
initializer_list
{ "{"
initializer_pair
subscript_designator
[ "["
identifier "TO_BOOL_ALWAYS_TRUE"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "BINARY_OP_SUBSCR_GETITEM"
] "]"
= "="
identifier "_RECORD_NOS_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "SEND_GEN"
] "]"
= "="
identifier "_RECORD_NOS_GEN_FUNC_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_INSTANCE_VALUE"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_WITH_HINT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_SLOT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_CLASS_WITH_METACLASS_CHECK"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_PROPERTY"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "STORE_ATTR_WITH_HINT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "STORE_ATTR_SLOT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "FOR_ITER_GEN"
] "]"
= "="
identifier "_RECORD_NOS_GEN_FUNC_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_WITH_VALUES"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_NO_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_NONDESCRIPTOR_NO_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "LOAD_ATTR_METHOD_LAZY_DICT"
] "]"
= "="
identifier "_RECORD_TOS_TYPE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_PY_GENERAL"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BOUND_METHOD_GENERAL"
] "]"
= "="
identifier "_RECORD_BOUND_METHOD_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_NON_PY_GENERAL"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BOUND_METHOD_EXACT_ARGS"
] "]"
= "="
identifier "_RECORD_BOUND_METHOD_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_PY_EXACT_ARGS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_ALLOC_AND_ENTER_INIT"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_CLASS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_O"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_FAST"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_BUILTIN_FAST_WITH_KEYWORDS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_O"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_METHOD_DESCRIPTOR_NOARGS"
] "]"
= "="
identifier "_RECORD_CALLABLE_INDEX"
, ","
initializer_pair
subscript_designator
[ "["
identifier "CALL_EX_PY"
] "]"
= "="
identifier "_RECORD_4OS_INDEX"
, ","
} "}"
; ";"
declaration
type_qualifier
const "const"
type_identifier "_Py_RecordFuncPtr"
init_declarator
array_declarator
identifier "_PyOpcode_RecordFunctions"
[ "["
number_literal "7"
] "]"
= "="
initializer_list
{ "{"
initializer_pair
subscript_designator
[ "["
number_literal "0"
] "]"
= "="
null
NULL "NULL"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_TOS_TYPE_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_TOS_TYPE"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_NOS_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_NOS"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_NOS_GEN_FUNC_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_NOS_GEN_FUNC"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_CALLABLE_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_CALLABLE"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_BOUND_METHOD_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_BOUND_METHOD"
, ","
initializer_pair
subscript_designator
[ "["
identifier "_RECORD_4OS_INDEX"
] "]"
= "="
identifier "_PyOpcode_RecordFunction_4OS"
, ","
} "}"
; ";"