[Python-Dev] When does `PyType_Type.tp_alloc get assigned to PyType_GenericAlloc ? (original) (raw)
eryk sun eryksun at gmail.com
Sun Feb 7 15:27:30 EST 2016
- Previous message (by thread): [Python-Dev] When does `PyType_Type.tp_alloc get assigned to PyType_GenericAlloc ?
- Next message (by thread): [Python-Dev] When does `PyType_Type.tp_alloc get assigned to PyType_GenericAlloc ?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sun, Feb 7, 2016 at 7:58 AM, Randy Eels <randyeels at gmail.com> wrote:
Yet, I can't seem to understand where and when does the
tpalloc
slot of PyTypeType get re-assigned to PyTypeGenericAlloc. Does that even happen? Or am I missing something bigger?
_Py_InitializeEx_Private in Python/pylifecycle.c calls _Py_ReadyTypes in Objects/object.c. This calls PyType_Ready(&PyType_Type) in Objects/typeobject.c, which assigns type->tp_base = &PyBaseObject_Type and then calls inherit_slots. This executes COPYSLOT(tp_alloc), which assigns PyType_Type.tp_alloc = PyBaseObject_Type.tp_alloc, which is statically assigned as PyType_GenericAlloc.
Debug trace on Windows:
0:000> bp python35!PyType_Ready
0:000> g
Breakpoint 0 hit
python35!PyType_Ready:
00000000`6502d160 4053 push rbx
0:000> ?? ((PyTypeObject *)@rcx)->tp_name
char * 0x00000000`650e4044
"object"
0:000> g
Breakpoint 0 hit
python35!PyType_Ready:
00000000`6502d160 4053 push rbx
0:000> ?? ((PyTypeObject *)@rcx)->tp_name
char * 0x00000000`651d8e5c
"type"
0:000> bp python35!inherit_slots
0:000> g
Breakpoint 1 hit
python35!inherit_slots:
00000000`6502c440 48895c2408 mov qword ptr [rsp+8],rbx
ss:00000000`0028f960={
python35!PyType_Type
(00000000`6527cba0)}
At entry to inherit_slots, PyType_Type.tp_alloc is NULL:
0:000> ?? python35!PyType_Type.tp_alloc
<function> * 0x00000000`00000000
0:000> pt
python35!inherit_slots+0xd17:
00000000`6502d157 c3 ret
At exit it's set to PyType_GenericAlloc:
0:000> ?? python35!PyType_Type.tp_alloc
<function> * 0x00000000`65025580
0:000> ln 65025580
(00000000`65025580) python35!PyType_GenericAlloc |
(00000000`650256a0) python35!PyType_GenericNew
Exact matches:
python35!PyType_GenericAlloc (void)
- Previous message (by thread): [Python-Dev] When does `PyType_Type.tp_alloc get assigned to PyType_GenericAlloc ?
- Next message (by thread): [Python-Dev] When does `PyType_Type.tp_alloc get assigned to PyType_GenericAlloc ?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]