Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 61c5d99

Browse files
committed
Added support for Python 3.11.
1 parent b280b1b commit 61c5d99

File tree

3 files changed

+160
-12
lines changed

3 files changed

+160
-12
lines changed

src/runtime/Native/TypeOffset311.cs

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// Auto-generated by geninterop.py.
2+
// DO NOT MODIFY BY HAND.
3+
4+
// Python 3.11: ABI flags: ''
5+
6+
// ReSharper disable InconsistentNaming
7+
// ReSharper disable IdentifierTypo
8+
9+
using System;
10+
using System.Diagnostics.CodeAnalysis;
11+
using System.Runtime.InteropServices;
12+
13+
using Python.Runtime.Native;
14+
15+
namespace Python.Runtime
16+
{
17+
[SuppressMessage("Style", "IDE1006:Naming Styles",
18+
Justification = "Following CPython",
19+
Scope = "type")]
20+
21+
[StructLayout(LayoutKind.Sequential)]
22+
internal class TypeOffset311 : GeneratedTypeOffsets, ITypeOffsets
23+
{
24+
public TypeOffset311()
25+
{
26+
27+
}
28+
// Auto-generated from PyHeapTypeObject in Python.h
29+
public int ob_refcnt { get; private set; }
30+
public int ob_type { get; private set; }
31+
public int ob_size { get; private set; }
32+
public int tp_name { get; private set; }
33+
public int tp_basicsize { get; private set; }
34+
public int tp_itemsize { get; private set; }
35+
public int tp_dealloc { get; private set; }
36+
public int tp_vectorcall_offset { get; private set; }
37+
public int tp_getattr { get; private set; }
38+
public int tp_setattr { get; private set; }
39+
public int tp_as_async { get; private set; }
40+
public int tp_repr { get; private set; }
41+
public int tp_as_number { get; private set; }
42+
public int tp_as_sequence { get; private set; }
43+
public int tp_as_mapping { get; private set; }
44+
public int tp_hash { get; private set; }
45+
public int tp_call { get; private set; }
46+
public int tp_str { get; private set; }
47+
public int tp_getattro { get; private set; }
48+
public int tp_setattro { get; private set; }
49+
public int tp_as_buffer { get; private set; }
50+
public int tp_flags { get; private set; }
51+
public int tp_doc { get; private set; }
52+
public int tp_traverse { get; private set; }
53+
public int tp_clear { get; private set; }
54+
public int tp_richcompare { get; private set; }
55+
public int tp_weaklistoffset { get; private set; }
56+
public int tp_iter { get; private set; }
57+
public int tp_iternext { get; private set; }
58+
public int tp_methods { get; private set; }
59+
public int tp_members { get; private set; }
60+
public int tp_getset { get; private set; }
61+
public int tp_base { get; private set; }
62+
public int tp_dict { get; private set; }
63+
public int tp_descr_get { get; private set; }
64+
public int tp_descr_set { get; private set; }
65+
public int tp_dictoffset { get; private set; }
66+
public int tp_init { get; private set; }
67+
public int tp_alloc { get; private set; }
68+
public int tp_new { get; private set; }
69+
public int tp_free { get; private set; }
70+
public int tp_is_gc { get; private set; }
71+
public int tp_bases { get; private set; }
72+
public int tp_mro { get; private set; }
73+
public int tp_cache { get; private set; }
74+
public int tp_subclasses { get; private set; }
75+
public int tp_weaklist { get; private set; }
76+
public int tp_del { get; private set; }
77+
public int tp_version_tag { get; private set; }
78+
public int tp_finalize { get; private set; }
79+
public int tp_vectorcall { get; private set; }
80+
public int am_await { get; private set; }
81+
public int am_aiter { get; private set; }
82+
public int am_anext { get; private set; }
83+
public int am_send { get; private set; }
84+
public int nb_add { get; private set; }
85+
public int nb_subtract { get; private set; }
86+
public int nb_multiply { get; private set; }
87+
public int nb_remainder { get; private set; }
88+
public int nb_divmod { get; private set; }
89+
public int nb_power { get; private set; }
90+
public int nb_negative { get; private set; }
91+
public int nb_positive { get; private set; }
92+
public int nb_absolute { get; private set; }
93+
public int nb_bool { get; private set; }
94+
public int nb_invert { get; private set; }
95+
public int nb_lshift { get; private set; }
96+
public int nb_rshift { get; private set; }
97+
public int nb_and { get; private set; }
98+
public int nb_xor { get; private set; }
99+
public int nb_or { get; private set; }
100+
public int nb_int { get; private set; }
101+
public int nb_reserved { get; private set; }
102+
public int nb_float { get; private set; }
103+
public int nb_inplace_add { get; private set; }
104+
public int nb_inplace_subtract { get; private set; }
105+
public int nb_inplace_multiply { get; private set; }
106+
public int nb_inplace_remainder { get; private set; }
107+
public int nb_inplace_power { get; private set; }
108+
public int nb_inplace_lshift { get; private set; }
109+
public int nb_inplace_rshift { get; private set; }
110+
public int nb_inplace_and { get; private set; }
111+
public int nb_inplace_xor { get; private set; }
112+
public int nb_inplace_or { get; private set; }
113+
public int nb_floor_divide { get; private set; }
114+
public int nb_true_divide { get; private set; }
115+
public int nb_inplace_floor_divide { get; private set; }
116+
public int nb_inplace_true_divide { get; private set; }
117+
public int nb_index { get; private set; }
118+
public int nb_matrix_multiply { get; private set; }
119+
public int nb_inplace_matrix_multiply { get; private set; }
120+
public int mp_length { get; private set; }
121+
public int mp_subscript { get; private set; }
122+
public int mp_ass_subscript { get; private set; }
123+
public int sq_length { get; private set; }
124+
public int sq_concat { get; private set; }
125+
public int sq_repeat { get; private set; }
126+
public int sq_item { get; private set; }
127+
public int was_sq_slice { get; private set; }
128+
public int sq_ass_item { get; private set; }
129+
public int was_sq_ass_slice { get; private set; }
130+
public int sq_contains { get; private set; }
131+
public int sq_inplace_concat { get; private set; }
132+
public int sq_inplace_repeat { get; private set; }
133+
public int bf_getbuffer { get; private set; }
134+
public int bf_releasebuffer { get; private set; }
135+
public int name { get; private set; }
136+
public int ht_slots { get; private set; }
137+
public int qualname { get; private set; }
138+
public int ht_cached_keys { get; private set; }
139+
public int ht_module { get; private set; }
140+
public int _ht_tpname { get; private set; }
141+
public int spec_cache_getitem { get; private set; }
142+
}
143+
}

src/runtime/TypeManager.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -470,17 +470,20 @@ internal static PyType CreateMetatypeWithGCHandleOffset()
470470
int size = Util.ReadInt32(Runtime.PyTypeType, TypeOffset.tp_basicsize)
471471
+ IntPtr.Size // tp_clr_inst_offset
472472
;
473-
var result = new PyType(new TypeSpec("clr._internal.GCOffsetBase", basicSize: size,
474-
new TypeSpec.Slot[]
475-
{
476-
477-
},
478-
TypeFlags.Default | TypeFlags.HeapType | TypeFlags.HaveGC),
479-
bases: new PyTuple(new[] { py_type }));
480473

481-
SetRequiredSlots(result, seen: new HashSet<string>());
482-
483-
Runtime.PyType_Modified(result);
474+
var slots = new[] {
475+
new TypeSpec.Slot(TypeSlotID.tp_traverse, subtype_traverse),
476+
new TypeSpec.Slot(TypeSlotID.tp_clear, subtype_clear)
477+
};
478+
var result = new PyType(
479+
new TypeSpec(
480+
"clr._internal.GCOffsetBase",
481+
basicSize: size,
482+
slots: slots,
483+
TypeFlags.Default | TypeFlags.HeapType | TypeFlags.HaveGC
484+
),
485+
bases: new PyTuple(new[] { py_type })
486+
);
484487

485488
return result;
486489
}

src/runtime/Types/ManagedType.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ protected static void ClearObjectDict(BorrowedReference ob)
148148
{
149149
BorrowedReference type = Runtime.PyObject_TYPE(ob);
150150
int instanceDictOffset = Util.ReadInt32(type, TypeOffset.tp_dictoffset);
151-
Debug.Assert(instanceDictOffset > 0);
152-
Runtime.Py_CLEAR(ob, instanceDictOffset);
151+
//Debug.Assert(instanceDictOffset > 0);
152+
// Python 3.11, sometimes this dict is less than zero.
153+
if(instanceDictOffset > 0)
154+
Runtime.Py_CLEAR(ob, instanceDictOffset);
153155
}
154156

155157
protected static BorrowedReference GetObjectDict(BorrowedReference ob)

0 commit comments

Comments
 (0)