mirror of
https://github.com/python/cpython.git
synced 2026-05-06 12:49:07 -04:00
508b49845d
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
959 lines
34 KiB
C
Generated
959 lines
34 KiB
C
Generated
/* Generated by Tools/build/generate_slots.py */
|
|
|
|
#ifndef _PY_HAVE_INTERNAL_SLOTS_GENERATED_H
|
|
#define _PY_HAVE_INTERNAL_SLOTS_GENERATED_H
|
|
|
|
static inline uint16_t
|
|
_PySlot_resolve_type_slot(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case 1:
|
|
return Py_bf_getbuffer;
|
|
case 2:
|
|
return Py_bf_releasebuffer;
|
|
case 3:
|
|
return Py_mp_ass_subscript;
|
|
case 4:
|
|
return Py_mp_length;
|
|
case Py_slot_end:
|
|
case Py_mp_subscript:
|
|
case Py_nb_absolute:
|
|
case Py_nb_add:
|
|
case Py_nb_and:
|
|
case Py_nb_bool:
|
|
case Py_nb_divmod:
|
|
case Py_nb_float:
|
|
case Py_nb_floor_divide:
|
|
case Py_nb_index:
|
|
case Py_nb_inplace_add:
|
|
case Py_nb_inplace_and:
|
|
case Py_nb_inplace_floor_divide:
|
|
case Py_nb_inplace_lshift:
|
|
case Py_nb_inplace_multiply:
|
|
case Py_nb_inplace_or:
|
|
case Py_nb_inplace_power:
|
|
case Py_nb_inplace_remainder:
|
|
case Py_nb_inplace_rshift:
|
|
case Py_nb_inplace_subtract:
|
|
case Py_nb_inplace_true_divide:
|
|
case Py_nb_inplace_xor:
|
|
case Py_nb_int:
|
|
case Py_nb_invert:
|
|
case Py_nb_lshift:
|
|
case Py_nb_multiply:
|
|
case Py_nb_negative:
|
|
case Py_nb_or:
|
|
case Py_nb_positive:
|
|
case Py_nb_power:
|
|
case Py_nb_remainder:
|
|
case Py_nb_rshift:
|
|
case Py_nb_subtract:
|
|
case Py_nb_true_divide:
|
|
case Py_nb_xor:
|
|
case Py_sq_ass_item:
|
|
case Py_sq_concat:
|
|
case Py_sq_contains:
|
|
case Py_sq_inplace_concat:
|
|
case Py_sq_inplace_repeat:
|
|
case Py_sq_item:
|
|
case Py_sq_length:
|
|
case Py_sq_repeat:
|
|
case Py_tp_alloc:
|
|
case Py_tp_base:
|
|
case Py_tp_bases:
|
|
case Py_tp_call:
|
|
case Py_tp_clear:
|
|
case Py_tp_dealloc:
|
|
case Py_tp_del:
|
|
case Py_tp_descr_get:
|
|
case Py_tp_descr_set:
|
|
case Py_tp_doc:
|
|
case Py_tp_getattr:
|
|
case Py_tp_getattro:
|
|
case Py_tp_hash:
|
|
case Py_tp_init:
|
|
case Py_tp_is_gc:
|
|
case Py_tp_iter:
|
|
case Py_tp_iternext:
|
|
case Py_tp_methods:
|
|
case Py_tp_new:
|
|
case Py_tp_repr:
|
|
case Py_tp_richcompare:
|
|
case Py_tp_setattr:
|
|
case Py_tp_setattro:
|
|
case Py_tp_str:
|
|
case Py_tp_traverse:
|
|
case Py_tp_members:
|
|
case Py_tp_getset:
|
|
case Py_tp_free:
|
|
case Py_nb_matrix_multiply:
|
|
case Py_nb_inplace_matrix_multiply:
|
|
case Py_am_await:
|
|
case Py_am_aiter:
|
|
case Py_am_anext:
|
|
case Py_tp_finalize:
|
|
case Py_am_send:
|
|
case Py_tp_vectorcall:
|
|
case Py_tp_token:
|
|
case Py_bf_getbuffer:
|
|
case Py_bf_releasebuffer:
|
|
case Py_mp_ass_subscript:
|
|
case Py_mp_length:
|
|
case Py_slot_subslots:
|
|
case Py_tp_slots:
|
|
case Py_tp_name:
|
|
case Py_tp_basicsize:
|
|
case Py_tp_extra_basicsize:
|
|
case Py_tp_itemsize:
|
|
case Py_tp_flags:
|
|
case Py_tp_metaclass:
|
|
case Py_tp_module:
|
|
return slot_id;
|
|
default:
|
|
return Py_slot_invalid;
|
|
}
|
|
}
|
|
|
|
static inline uint16_t
|
|
_PySlot_resolve_mod_slot(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case 1:
|
|
return Py_mod_create;
|
|
case 2:
|
|
return Py_mod_exec;
|
|
case 3:
|
|
return Py_mod_multiple_interpreters;
|
|
case 4:
|
|
return Py_mod_gil;
|
|
case Py_slot_end:
|
|
case Py_mod_create:
|
|
case Py_mod_exec:
|
|
case Py_mod_multiple_interpreters:
|
|
case Py_mod_gil:
|
|
case Py_slot_subslots:
|
|
case Py_mod_slots:
|
|
case Py_mod_name:
|
|
case Py_mod_doc:
|
|
case Py_mod_state_size:
|
|
case Py_mod_methods:
|
|
case Py_mod_state_traverse:
|
|
case Py_mod_state_clear:
|
|
case Py_mod_state_free:
|
|
case Py_mod_abi:
|
|
case Py_mod_token:
|
|
return slot_id;
|
|
default:
|
|
return Py_slot_invalid;
|
|
}
|
|
}
|
|
|
|
static inline void*
|
|
_PySlot_type_getslot(PyTypeObject *tp, uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case Py_mp_subscript:
|
|
if (!(tp->tp_as_mapping)) return NULL;
|
|
return (void*)tp->tp_as_mapping->mp_subscript;
|
|
case Py_nb_absolute:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_absolute;
|
|
case Py_nb_add:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_add;
|
|
case Py_nb_and:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_and;
|
|
case Py_nb_bool:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_bool;
|
|
case Py_nb_divmod:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_divmod;
|
|
case Py_nb_float:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_float;
|
|
case Py_nb_floor_divide:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_floor_divide;
|
|
case Py_nb_index:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_index;
|
|
case Py_nb_inplace_add:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_add;
|
|
case Py_nb_inplace_and:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_and;
|
|
case Py_nb_inplace_floor_divide:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_floor_divide;
|
|
case Py_nb_inplace_lshift:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_lshift;
|
|
case Py_nb_inplace_multiply:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_multiply;
|
|
case Py_nb_inplace_or:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_or;
|
|
case Py_nb_inplace_power:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_power;
|
|
case Py_nb_inplace_remainder:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_remainder;
|
|
case Py_nb_inplace_rshift:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_rshift;
|
|
case Py_nb_inplace_subtract:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_subtract;
|
|
case Py_nb_inplace_true_divide:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_true_divide;
|
|
case Py_nb_inplace_xor:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_xor;
|
|
case Py_nb_int:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_int;
|
|
case Py_nb_invert:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_invert;
|
|
case Py_nb_lshift:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_lshift;
|
|
case Py_nb_multiply:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_multiply;
|
|
case Py_nb_negative:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_negative;
|
|
case Py_nb_or:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_or;
|
|
case Py_nb_positive:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_positive;
|
|
case Py_nb_power:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_power;
|
|
case Py_nb_remainder:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_remainder;
|
|
case Py_nb_rshift:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_rshift;
|
|
case Py_nb_subtract:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_subtract;
|
|
case Py_nb_true_divide:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_true_divide;
|
|
case Py_nb_xor:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_xor;
|
|
case Py_sq_ass_item:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_ass_item;
|
|
case Py_sq_concat:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_concat;
|
|
case Py_sq_contains:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_contains;
|
|
case Py_sq_inplace_concat:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_inplace_concat;
|
|
case Py_sq_inplace_repeat:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_inplace_repeat;
|
|
case Py_sq_item:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_item;
|
|
case Py_sq_length:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_length;
|
|
case Py_sq_repeat:
|
|
if (!(tp->tp_as_sequence)) return NULL;
|
|
return (void*)tp->tp_as_sequence->sq_repeat;
|
|
case Py_tp_alloc:
|
|
return (void*)tp->tp_alloc;
|
|
case Py_tp_base:
|
|
return (void*)tp->tp_base;
|
|
case Py_tp_bases:
|
|
return (void*)tp->tp_bases;
|
|
case Py_tp_call:
|
|
return (void*)tp->tp_call;
|
|
case Py_tp_clear:
|
|
return (void*)tp->tp_clear;
|
|
case Py_tp_dealloc:
|
|
return (void*)tp->tp_dealloc;
|
|
case Py_tp_del:
|
|
return (void*)tp->tp_del;
|
|
case Py_tp_descr_get:
|
|
return (void*)tp->tp_descr_get;
|
|
case Py_tp_descr_set:
|
|
return (void*)tp->tp_descr_set;
|
|
case Py_tp_doc:
|
|
return (void*)tp->tp_doc;
|
|
case Py_tp_getattr:
|
|
return (void*)tp->tp_getattr;
|
|
case Py_tp_getattro:
|
|
return (void*)tp->tp_getattro;
|
|
case Py_tp_hash:
|
|
return (void*)tp->tp_hash;
|
|
case Py_tp_init:
|
|
return (void*)tp->tp_init;
|
|
case Py_tp_is_gc:
|
|
return (void*)tp->tp_is_gc;
|
|
case Py_tp_iter:
|
|
return (void*)tp->tp_iter;
|
|
case Py_tp_iternext:
|
|
return (void*)tp->tp_iternext;
|
|
case Py_tp_methods:
|
|
return (void*)tp->tp_methods;
|
|
case Py_tp_new:
|
|
return (void*)tp->tp_new;
|
|
case Py_tp_repr:
|
|
return (void*)tp->tp_repr;
|
|
case Py_tp_richcompare:
|
|
return (void*)tp->tp_richcompare;
|
|
case Py_tp_setattr:
|
|
return (void*)tp->tp_setattr;
|
|
case Py_tp_setattro:
|
|
return (void*)tp->tp_setattro;
|
|
case Py_tp_str:
|
|
return (void*)tp->tp_str;
|
|
case Py_tp_traverse:
|
|
return (void*)tp->tp_traverse;
|
|
case Py_tp_members:
|
|
return (void*)tp->tp_members;
|
|
case Py_tp_getset:
|
|
return (void*)tp->tp_getset;
|
|
case Py_tp_free:
|
|
return (void*)tp->tp_free;
|
|
case Py_nb_matrix_multiply:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_matrix_multiply;
|
|
case Py_nb_inplace_matrix_multiply:
|
|
if (!(tp->tp_as_number)) return NULL;
|
|
return (void*)tp->tp_as_number->nb_inplace_matrix_multiply;
|
|
case Py_am_await:
|
|
if (!(tp->tp_as_async)) return NULL;
|
|
return (void*)tp->tp_as_async->am_await;
|
|
case Py_am_aiter:
|
|
if (!(tp->tp_as_async)) return NULL;
|
|
return (void*)tp->tp_as_async->am_aiter;
|
|
case Py_am_anext:
|
|
if (!(tp->tp_as_async)) return NULL;
|
|
return (void*)tp->tp_as_async->am_anext;
|
|
case Py_tp_finalize:
|
|
return (void*)tp->tp_finalize;
|
|
case Py_am_send:
|
|
if (!(tp->tp_as_async)) return NULL;
|
|
return (void*)tp->tp_as_async->am_send;
|
|
case Py_tp_vectorcall:
|
|
return (void*)tp->tp_vectorcall;
|
|
case Py_tp_token:
|
|
if (!(tp->tp_flags & Py_TPFLAGS_HEAPTYPE)) return NULL;
|
|
return (void*)((PyHeapTypeObject*)tp)->ht_token;
|
|
case Py_bf_getbuffer:
|
|
if (!(tp->tp_as_buffer)) return NULL;
|
|
return (void*)tp->tp_as_buffer->bf_getbuffer;
|
|
case Py_bf_releasebuffer:
|
|
if (!(tp->tp_as_buffer)) return NULL;
|
|
return (void*)tp->tp_as_buffer->bf_releasebuffer;
|
|
case Py_mp_ass_subscript:
|
|
if (!(tp->tp_as_mapping)) return NULL;
|
|
return (void*)tp->tp_as_mapping->mp_ass_subscript;
|
|
case Py_mp_length:
|
|
if (!(tp->tp_as_mapping)) return NULL;
|
|
return (void*)tp->tp_as_mapping->mp_length;
|
|
}
|
|
_PySlot_err_bad_slot("PyType_GetSlot", slot_id);
|
|
return NULL;
|
|
}
|
|
|
|
static inline void
|
|
_PySlot_heaptype_apply_field_slot(PyHeapTypeObject *ht, PySlot slot)
|
|
{
|
|
switch (slot.sl_id) {
|
|
case Py_mp_subscript:
|
|
ht->as_mapping.mp_subscript = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_absolute:
|
|
ht->as_number.nb_absolute = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_add:
|
|
ht->as_number.nb_add = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_and:
|
|
ht->as_number.nb_and = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_bool:
|
|
ht->as_number.nb_bool = (inquiry)slot.sl_func;
|
|
break;
|
|
case Py_nb_divmod:
|
|
ht->as_number.nb_divmod = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_float:
|
|
ht->as_number.nb_float = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_floor_divide:
|
|
ht->as_number.nb_floor_divide = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_index:
|
|
ht->as_number.nb_index = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_add:
|
|
ht->as_number.nb_inplace_add = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_and:
|
|
ht->as_number.nb_inplace_and = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_floor_divide:
|
|
ht->as_number.nb_inplace_floor_divide = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_lshift:
|
|
ht->as_number.nb_inplace_lshift = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_multiply:
|
|
ht->as_number.nb_inplace_multiply = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_or:
|
|
ht->as_number.nb_inplace_or = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_power:
|
|
ht->as_number.nb_inplace_power = (ternaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_remainder:
|
|
ht->as_number.nb_inplace_remainder = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_rshift:
|
|
ht->as_number.nb_inplace_rshift = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_subtract:
|
|
ht->as_number.nb_inplace_subtract = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_true_divide:
|
|
ht->as_number.nb_inplace_true_divide = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_xor:
|
|
ht->as_number.nb_inplace_xor = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_int:
|
|
ht->as_number.nb_int = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_invert:
|
|
ht->as_number.nb_invert = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_lshift:
|
|
ht->as_number.nb_lshift = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_multiply:
|
|
ht->as_number.nb_multiply = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_negative:
|
|
ht->as_number.nb_negative = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_or:
|
|
ht->as_number.nb_or = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_positive:
|
|
ht->as_number.nb_positive = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_power:
|
|
ht->as_number.nb_power = (ternaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_remainder:
|
|
ht->as_number.nb_remainder = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_rshift:
|
|
ht->as_number.nb_rshift = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_subtract:
|
|
ht->as_number.nb_subtract = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_true_divide:
|
|
ht->as_number.nb_true_divide = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_xor:
|
|
ht->as_number.nb_xor = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_ass_item:
|
|
ht->as_sequence.sq_ass_item = (ssizeobjargproc)slot.sl_func;
|
|
break;
|
|
case Py_sq_concat:
|
|
ht->as_sequence.sq_concat = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_contains:
|
|
ht->as_sequence.sq_contains = (objobjproc)slot.sl_func;
|
|
break;
|
|
case Py_sq_inplace_concat:
|
|
ht->as_sequence.sq_inplace_concat = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_inplace_repeat:
|
|
ht->as_sequence.sq_inplace_repeat = (ssizeargfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_item:
|
|
ht->as_sequence.sq_item = (ssizeargfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_length:
|
|
ht->as_sequence.sq_length = (lenfunc)slot.sl_func;
|
|
break;
|
|
case Py_sq_repeat:
|
|
ht->as_sequence.sq_repeat = (ssizeargfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_alloc:
|
|
ht->ht_type.tp_alloc = (allocfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_base:
|
|
ht->ht_type.tp_base = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_bases:
|
|
ht->ht_type.tp_bases = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_call:
|
|
ht->ht_type.tp_call = (ternaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_clear:
|
|
ht->ht_type.tp_clear = (inquiry)slot.sl_func;
|
|
break;
|
|
case Py_tp_dealloc:
|
|
ht->ht_type.tp_dealloc = (destructor)slot.sl_func;
|
|
break;
|
|
case Py_tp_del:
|
|
ht->ht_type.tp_del = (destructor)slot.sl_func;
|
|
break;
|
|
case Py_tp_descr_get:
|
|
ht->ht_type.tp_descr_get = (descrgetfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_descr_set:
|
|
ht->ht_type.tp_descr_set = (descrsetfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_doc:
|
|
ht->ht_type.tp_doc = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_getattr:
|
|
ht->ht_type.tp_getattr = (getattrfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_getattro:
|
|
ht->ht_type.tp_getattro = (getattrofunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_hash:
|
|
ht->ht_type.tp_hash = (hashfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_init:
|
|
ht->ht_type.tp_init = (initproc)slot.sl_func;
|
|
break;
|
|
case Py_tp_is_gc:
|
|
ht->ht_type.tp_is_gc = (inquiry)slot.sl_func;
|
|
break;
|
|
case Py_tp_iter:
|
|
ht->ht_type.tp_iter = (getiterfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_iternext:
|
|
ht->ht_type.tp_iternext = (iternextfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_methods:
|
|
ht->ht_type.tp_methods = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_new:
|
|
ht->ht_type.tp_new = (newfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_repr:
|
|
ht->ht_type.tp_repr = (reprfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_richcompare:
|
|
ht->ht_type.tp_richcompare = (richcmpfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_setattr:
|
|
ht->ht_type.tp_setattr = (setattrfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_setattro:
|
|
ht->ht_type.tp_setattro = (setattrofunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_str:
|
|
ht->ht_type.tp_str = (reprfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_traverse:
|
|
ht->ht_type.tp_traverse = (traverseproc)slot.sl_func;
|
|
break;
|
|
case Py_tp_members:
|
|
ht->ht_type.tp_members = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_getset:
|
|
ht->ht_type.tp_getset = slot.sl_ptr;
|
|
break;
|
|
case Py_tp_free:
|
|
ht->ht_type.tp_free = (freefunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_matrix_multiply:
|
|
ht->as_number.nb_matrix_multiply = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_nb_inplace_matrix_multiply:
|
|
ht->as_number.nb_inplace_matrix_multiply = (binaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_am_await:
|
|
ht->as_async.am_await = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_am_aiter:
|
|
ht->as_async.am_aiter = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_am_anext:
|
|
ht->as_async.am_anext = (unaryfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_finalize:
|
|
ht->ht_type.tp_finalize = (destructor)slot.sl_func;
|
|
break;
|
|
case Py_am_send:
|
|
ht->as_async.am_send = (sendfunc)slot.sl_func;
|
|
break;
|
|
case Py_tp_vectorcall:
|
|
ht->ht_type.tp_vectorcall = (vectorcallfunc)slot.sl_func;
|
|
break;
|
|
case Py_bf_getbuffer:
|
|
ht->as_buffer.bf_getbuffer = (getbufferproc)slot.sl_func;
|
|
break;
|
|
case Py_bf_releasebuffer:
|
|
ht->as_buffer.bf_releasebuffer = (releasebufferproc)slot.sl_func;
|
|
break;
|
|
case Py_mp_ass_subscript:
|
|
ht->as_mapping.mp_ass_subscript = (objobjargproc)slot.sl_func;
|
|
break;
|
|
case Py_mp_length:
|
|
ht->as_mapping.mp_length = (lenfunc)slot.sl_func;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static inline _PySlot_DTYPE
|
|
_PySlot_get_dtype(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case Py_slot_end: return _PySlot_DTYPE_VOID;
|
|
case Py_mp_subscript: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_absolute: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_add: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_and: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_bool: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_divmod: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_float: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_floor_divide: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_index: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_add: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_and: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_floor_divide: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_lshift: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_multiply: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_or: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_power: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_remainder: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_rshift: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_subtract: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_true_divide: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_xor: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_int: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_invert: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_lshift: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_multiply: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_negative: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_or: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_positive: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_power: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_remainder: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_rshift: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_subtract: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_true_divide: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_xor: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_ass_item: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_concat: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_contains: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_inplace_concat: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_inplace_repeat: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_item: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_length: return _PySlot_DTYPE_FUNC;
|
|
case Py_sq_repeat: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_alloc: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_base: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_bases: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_call: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_clear: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_dealloc: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_del: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_descr_get: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_descr_set: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_doc: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_getattr: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_getattro: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_hash: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_init: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_is_gc: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_iter: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_iternext: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_methods: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_new: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_repr: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_richcompare: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_setattr: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_setattro: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_str: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_traverse: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_members: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_getset: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_free: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_matrix_multiply: return _PySlot_DTYPE_FUNC;
|
|
case Py_nb_inplace_matrix_multiply: return _PySlot_DTYPE_FUNC;
|
|
case Py_am_await: return _PySlot_DTYPE_FUNC;
|
|
case Py_am_aiter: return _PySlot_DTYPE_FUNC;
|
|
case Py_am_anext: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_finalize: return _PySlot_DTYPE_FUNC;
|
|
case Py_am_send: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_vectorcall: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_token: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_create: return _PySlot_DTYPE_FUNC;
|
|
case Py_mod_exec: return _PySlot_DTYPE_FUNC;
|
|
case Py_mod_multiple_interpreters: return _PySlot_DTYPE_UINT64;
|
|
case Py_mod_gil: return _PySlot_DTYPE_UINT64;
|
|
case Py_bf_getbuffer: return _PySlot_DTYPE_FUNC;
|
|
case Py_bf_releasebuffer: return _PySlot_DTYPE_FUNC;
|
|
case Py_mp_ass_subscript: return _PySlot_DTYPE_FUNC;
|
|
case Py_mp_length: return _PySlot_DTYPE_FUNC;
|
|
case Py_slot_subslots: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_slots: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_slots: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_name: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_basicsize: return _PySlot_DTYPE_SIZE;
|
|
case Py_tp_extra_basicsize: return _PySlot_DTYPE_SIZE;
|
|
case Py_tp_itemsize: return _PySlot_DTYPE_SIZE;
|
|
case Py_tp_flags: return _PySlot_DTYPE_UINT64;
|
|
case Py_mod_name: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_doc: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_state_size: return _PySlot_DTYPE_SIZE;
|
|
case Py_mod_methods: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_state_traverse: return _PySlot_DTYPE_FUNC;
|
|
case Py_mod_state_clear: return _PySlot_DTYPE_FUNC;
|
|
case Py_mod_state_free: return _PySlot_DTYPE_FUNC;
|
|
case Py_tp_metaclass: return _PySlot_DTYPE_PTR;
|
|
case Py_tp_module: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_abi: return _PySlot_DTYPE_PTR;
|
|
case Py_mod_token: return _PySlot_DTYPE_PTR;
|
|
default: return _PySlot_DTYPE_VOID;
|
|
}
|
|
}
|
|
|
|
static inline _PySlot_PROBLEM_HANDLING
|
|
_PySlot_get_duplicate_handling(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case Py_mp_subscript:
|
|
case Py_nb_absolute:
|
|
case Py_nb_add:
|
|
case Py_nb_and:
|
|
case Py_nb_bool:
|
|
case Py_nb_divmod:
|
|
case Py_nb_float:
|
|
case Py_nb_floor_divide:
|
|
case Py_nb_index:
|
|
case Py_nb_inplace_add:
|
|
case Py_nb_inplace_and:
|
|
case Py_nb_inplace_floor_divide:
|
|
case Py_nb_inplace_lshift:
|
|
case Py_nb_inplace_multiply:
|
|
case Py_nb_inplace_or:
|
|
case Py_nb_inplace_power:
|
|
case Py_nb_inplace_remainder:
|
|
case Py_nb_inplace_rshift:
|
|
case Py_nb_inplace_subtract:
|
|
case Py_nb_inplace_true_divide:
|
|
case Py_nb_inplace_xor:
|
|
case Py_nb_int:
|
|
case Py_nb_invert:
|
|
case Py_nb_lshift:
|
|
case Py_nb_multiply:
|
|
case Py_nb_negative:
|
|
case Py_nb_or:
|
|
case Py_nb_positive:
|
|
case Py_nb_power:
|
|
case Py_nb_remainder:
|
|
case Py_nb_rshift:
|
|
case Py_nb_subtract:
|
|
case Py_nb_true_divide:
|
|
case Py_nb_xor:
|
|
case Py_sq_ass_item:
|
|
case Py_sq_concat:
|
|
case Py_sq_contains:
|
|
case Py_sq_inplace_concat:
|
|
case Py_sq_inplace_repeat:
|
|
case Py_sq_item:
|
|
case Py_sq_length:
|
|
case Py_sq_repeat:
|
|
case Py_tp_alloc:
|
|
case Py_tp_base:
|
|
case Py_tp_bases:
|
|
case Py_tp_call:
|
|
case Py_tp_clear:
|
|
case Py_tp_dealloc:
|
|
case Py_tp_del:
|
|
case Py_tp_descr_get:
|
|
case Py_tp_descr_set:
|
|
case Py_tp_getattr:
|
|
case Py_tp_getattro:
|
|
case Py_tp_hash:
|
|
case Py_tp_init:
|
|
case Py_tp_is_gc:
|
|
case Py_tp_iter:
|
|
case Py_tp_iternext:
|
|
case Py_tp_methods:
|
|
case Py_tp_new:
|
|
case Py_tp_repr:
|
|
case Py_tp_richcompare:
|
|
case Py_tp_setattr:
|
|
case Py_tp_setattro:
|
|
case Py_tp_str:
|
|
case Py_tp_traverse:
|
|
case Py_tp_getset:
|
|
case Py_tp_free:
|
|
case Py_nb_matrix_multiply:
|
|
case Py_nb_inplace_matrix_multiply:
|
|
case Py_am_await:
|
|
case Py_am_aiter:
|
|
case Py_am_anext:
|
|
case Py_tp_finalize:
|
|
case Py_am_send:
|
|
case Py_tp_vectorcall:
|
|
case Py_tp_token:
|
|
case Py_bf_getbuffer:
|
|
case Py_bf_releasebuffer:
|
|
case Py_mp_ass_subscript:
|
|
case Py_mp_length:
|
|
return _PySlot_PROBLEM_DEPRECATED;
|
|
case Py_mod_exec:
|
|
case Py_mod_abi:
|
|
return _PySlot_PROBLEM_ALLOW;
|
|
default:
|
|
return _PySlot_PROBLEM_REJECT;
|
|
}
|
|
}
|
|
|
|
static inline _PySlot_PROBLEM_HANDLING
|
|
_PySlot_get_null_handling(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case Py_slot_end:
|
|
case Py_tp_doc:
|
|
case Py_tp_token:
|
|
case Py_mod_multiple_interpreters:
|
|
case Py_mod_gil:
|
|
case Py_slot_subslots:
|
|
case Py_tp_slots:
|
|
case Py_mod_slots:
|
|
case Py_tp_basicsize:
|
|
case Py_tp_extra_basicsize:
|
|
case Py_tp_itemsize:
|
|
case Py_tp_flags:
|
|
case Py_mod_state_size:
|
|
return _PySlot_PROBLEM_ALLOW;
|
|
case Py_mp_subscript:
|
|
case Py_nb_absolute:
|
|
case Py_nb_add:
|
|
case Py_nb_and:
|
|
case Py_nb_bool:
|
|
case Py_nb_divmod:
|
|
case Py_nb_float:
|
|
case Py_nb_floor_divide:
|
|
case Py_nb_index:
|
|
case Py_nb_inplace_add:
|
|
case Py_nb_inplace_and:
|
|
case Py_nb_inplace_floor_divide:
|
|
case Py_nb_inplace_lshift:
|
|
case Py_nb_inplace_multiply:
|
|
case Py_nb_inplace_or:
|
|
case Py_nb_inplace_power:
|
|
case Py_nb_inplace_remainder:
|
|
case Py_nb_inplace_rshift:
|
|
case Py_nb_inplace_subtract:
|
|
case Py_nb_inplace_true_divide:
|
|
case Py_nb_inplace_xor:
|
|
case Py_nb_int:
|
|
case Py_nb_invert:
|
|
case Py_nb_lshift:
|
|
case Py_nb_multiply:
|
|
case Py_nb_negative:
|
|
case Py_nb_or:
|
|
case Py_nb_positive:
|
|
case Py_nb_power:
|
|
case Py_nb_remainder:
|
|
case Py_nb_rshift:
|
|
case Py_nb_subtract:
|
|
case Py_nb_true_divide:
|
|
case Py_nb_xor:
|
|
case Py_sq_ass_item:
|
|
case Py_sq_concat:
|
|
case Py_sq_contains:
|
|
case Py_sq_inplace_concat:
|
|
case Py_sq_inplace_repeat:
|
|
case Py_sq_item:
|
|
case Py_sq_length:
|
|
case Py_sq_repeat:
|
|
case Py_tp_alloc:
|
|
case Py_tp_base:
|
|
case Py_tp_bases:
|
|
case Py_tp_call:
|
|
case Py_tp_clear:
|
|
case Py_tp_dealloc:
|
|
case Py_tp_del:
|
|
case Py_tp_descr_get:
|
|
case Py_tp_descr_set:
|
|
case Py_tp_getattr:
|
|
case Py_tp_getattro:
|
|
case Py_tp_hash:
|
|
case Py_tp_init:
|
|
case Py_tp_is_gc:
|
|
case Py_tp_iter:
|
|
case Py_tp_iternext:
|
|
case Py_tp_methods:
|
|
case Py_tp_new:
|
|
case Py_tp_repr:
|
|
case Py_tp_richcompare:
|
|
case Py_tp_setattr:
|
|
case Py_tp_setattro:
|
|
case Py_tp_str:
|
|
case Py_tp_traverse:
|
|
case Py_tp_getset:
|
|
case Py_tp_free:
|
|
case Py_nb_matrix_multiply:
|
|
case Py_nb_inplace_matrix_multiply:
|
|
case Py_am_await:
|
|
case Py_am_aiter:
|
|
case Py_am_anext:
|
|
case Py_tp_finalize:
|
|
case Py_am_send:
|
|
case Py_tp_vectorcall:
|
|
case Py_mod_create:
|
|
case Py_bf_getbuffer:
|
|
case Py_bf_releasebuffer:
|
|
case Py_mp_ass_subscript:
|
|
case Py_mp_length:
|
|
return _PySlot_PROBLEM_DEPRECATED;
|
|
default:
|
|
return _PySlot_PROBLEM_REJECT;
|
|
}
|
|
}
|
|
|
|
static inline bool
|
|
_PySlot_get_must_be_static(uint16_t slot_id)
|
|
{
|
|
switch (slot_id) {
|
|
case Py_tp_methods: return true;
|
|
case Py_tp_members: return true;
|
|
case Py_tp_getset: return true;
|
|
case Py_mod_methods: return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#endif /* _PY_HAVE_INTERNAL_SLOTS_GENERATED_H */
|