Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfe1fb3b

Browse files
committed
TypeOffset class no longer depends on target Python version
Instead, for each supported Python version a separate class is generated (e.g. TypeOffset36). Then the Runtime picks the correct class using reflection, and copies only the necessary TypeOffset members over from it.ManagedDataOffsets.Magic is now also read at runtime from tp_basicsize of PyType
1 parentc81c3c3 commitfe1fb3b

15 files changed

+751
-532
lines changed

‎pythonnet.15.sln

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "conda.recipe", "conda.recip
4242
conda.recipe\README.md=conda.recipe\README.md
4343
EndProjectSection
4444
EndProject
45+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") ="Tools","Tools","{BC426F42-8494-4AA5-82C9-5109ACD97BD1}"
46+
ProjectSection(SolutionItems) =preProject
47+
tools\geninterop\geninterop.py=tools\geninterop\geninterop.py
48+
EndProjectSection
49+
EndProject
4550
Global
4651
GlobalSection(SolutionConfigurationPlatforms) =preSolution
4752
Debug|Any CPU=Debug|Any CPU

‎src/runtime/Python.Runtime.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@
8080
<CompileInclude="Codecs\DecoderGroup.cs" />
8181
<CompileInclude="Codecs\RawProxyEncoder.cs" />
8282
<CompileInclude="Codecs\TupleCodecs.cs" />
83+
<CompileInclude="native\ABI.cs" />
84+
<CompileInclude="native\GeneratedTypeOffsets.cs" />
85+
<CompileInclude="native\ITypeOffsets.cs" />
86+
<CompileInclude="native\TypeOffset.cs" />
8387
<CompileInclude="converterextensions.cs" />
8488
<CompileInclude="finalizer.cs" />
8589
<CompileInclude="intern.cs" />

‎src/runtime/debughelper.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ internal static void DumpType(IntPtr type)
6060
//DebugUtil.Print(" mro: ", op);
6161

6262

63-
FieldInfo[]slots=typeof(TypeOffset).GetFields();
63+
varslots=TypeOffset.GetOffsets();
6464
intsize=IntPtr.Size;
6565

66-
for(vari=0;i<slots.Length;i++)
66+
foreach(varentryinslots)
6767
{
68-
intoffset=i*size;
69-
name=slots[i].Name;
68+
intoffset=entry.Value;
69+
name=entry.Key;
7070
op=Marshal.ReadIntPtr(type,offset);
7171
Console.WriteLine(" {0}: {1}",name,op);
7272
}

‎src/runtime/interop.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,12 @@ public ModulePropertyAttribute()
7070

7171
internalstaticpartialclassTypeOffset
7272
{
73-
staticTypeOffset()
74-
{
75-
Typetype=typeof(TypeOffset);
76-
FieldInfo[]fields=type.GetFields();
77-
intsize=IntPtr.Size;
78-
for(inti=0;i<fields.Length;i++)
79-
{
80-
intoffset=i*size;
81-
FieldInfofi=fields[i];
82-
fi.SetValue(null,offset);
83-
}
84-
}
85-
8673
publicstaticintmagic()=>ManagedDataOffsets.Magic;
8774
}
8875

8976
internalstaticclassManagedDataOffsets
9077
{
91-
publicstaticintMagic{get;privateset;}
78+
publicstaticintMagic{get;internalset;}
9279
publicstaticreadonlyDictionary<string,int>NameMapping=newDictionary<string,int>();
9380

9481
staticclassDataOffsets
@@ -108,13 +95,7 @@ static DataOffsets()
10895

10996
staticManagedDataOffsets()
11097
{
111-
Typetype=typeof(TypeOffset);
112-
foreach(FieldInfofiintype.GetFields())
113-
{
114-
NameMapping[fi.Name]=(int)fi.GetValue(null);
115-
}
116-
// XXX: Use the members after PyHeapTypeObject as magic slot
117-
Magic=TypeOffset.members;
98+
NameMapping=TypeOffset.GetOffsets();
11899

119100
FieldInfo[]fields=typeof(DataOffsets).GetFields(BindingFlags.Static|BindingFlags.Public);
120101
size=fields.Length*IntPtr.Size;

‎src/runtime/interop36.cs

Lines changed: 120 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -2,135 +2,137 @@
22
// Auto-generated by geninterop.py.
33
// DO NOT MODIFY BY HAND.
44

5+
// ReSharper disable InconsistentNaming
6+
// ReSharper disable IdentifierTypo
57

6-
#ifPYTHON36
78
usingSystem;
8-
usingSystem.Collections;
9-
usingSystem.Collections.Specialized;
9+
usingSystem.Diagnostics.CodeAnalysis;
1010
usingSystem.Runtime.InteropServices;
11-
usingSystem.Reflection;
12-
usingSystem.Text;
11+
12+
usingPython.Runtime.Native;
1313

1414
namespacePython.Runtime
1515
{
16+
[SuppressMessage("Style","IDE1006:Naming Styles",
17+
Justification="Following CPython",
18+
Scope="type")]
1619

1720
[StructLayout(LayoutKind.Sequential)]
18-
internalstaticpartialclassTypeOffset
21+
internalclassTypeOffset36:GeneratedTypeOffsets,ITypeOffsets
1922
{
23+
publicTypeOffset36(){}
2024
// Auto-generated from PyHeapTypeObject in Python.h
21-
publicstaticintob_refcnt=0;
22-
publicstaticintob_type=0;
23-
publicstaticintob_size=0;
24-
publicstaticinttp_name=0;
25-
publicstaticinttp_basicsize=0;
26-
publicstaticinttp_itemsize=0;
27-
publicstaticinttp_dealloc=0;
28-
publicstaticinttp_print=0;
29-
publicstaticinttp_getattr=0;
30-
publicstaticinttp_setattr=0;
31-
publicstaticinttp_as_async=0;
32-
publicstaticinttp_repr=0;
33-
publicstaticinttp_as_number=0;
34-
publicstaticinttp_as_sequence=0;
35-
publicstaticinttp_as_mapping=0;
36-
publicstaticinttp_hash=0;
37-
publicstaticinttp_call=0;
38-
publicstaticinttp_str=0;
39-
publicstaticinttp_getattro=0;
40-
publicstaticinttp_setattro=0;
41-
publicstaticinttp_as_buffer=0;
42-
publicstaticinttp_flags=0;
43-
publicstaticinttp_doc=0;
44-
publicstaticinttp_traverse=0;
45-
publicstaticinttp_clear=0;
46-
publicstaticinttp_richcompare=0;
47-
publicstaticinttp_weaklistoffset=0;
48-
publicstaticinttp_iter=0;
49-
publicstaticinttp_iternext=0;
50-
publicstaticinttp_methods=0;
51-
publicstaticinttp_members=0;
52-
publicstaticinttp_getset=0;
53-
publicstaticinttp_base=0;
54-
publicstaticinttp_dict=0;
55-
publicstaticinttp_descr_get=0;
56-
publicstaticinttp_descr_set=0;
57-
publicstaticinttp_dictoffset=0;
58-
publicstaticinttp_init=0;
59-
publicstaticinttp_alloc=0;
60-
publicstaticinttp_new=0;
61-
publicstaticinttp_free=0;
62-
publicstaticinttp_is_gc=0;
63-
publicstaticinttp_bases=0;
64-
publicstaticinttp_mro=0;
65-
publicstaticinttp_cache=0;
66-
publicstaticinttp_subclasses=0;
67-
publicstaticinttp_weaklist=0;
68-
publicstaticinttp_del=0;
69-
publicstaticinttp_version_tag=0;
70-
publicstaticinttp_finalize=0;
71-
publicstaticintam_await=0;
72-
publicstaticintam_aiter=0;
73-
publicstaticintam_anext=0;
74-
publicstaticintnb_add=0;
75-
publicstaticintnb_subtract=0;
76-
publicstaticintnb_multiply=0;
77-
publicstaticintnb_remainder=0;
78-
publicstaticintnb_divmod=0;
79-
publicstaticintnb_power=0;
80-
publicstaticintnb_negative=0;
81-
publicstaticintnb_positive=0;
82-
publicstaticintnb_absolute=0;
83-
publicstaticintnb_bool=0;
84-
publicstaticintnb_invert=0;
85-
publicstaticintnb_lshift=0;
86-
publicstaticintnb_rshift=0;
87-
publicstaticintnb_and=0;
88-
publicstaticintnb_xor=0;
89-
publicstaticintnb_or=0;
90-
publicstaticintnb_int=0;
91-
publicstaticintnb_reserved=0;
92-
publicstaticintnb_float=0;
93-
publicstaticintnb_inplace_add=0;
94-
publicstaticintnb_inplace_subtract=0;
95-
publicstaticintnb_inplace_multiply=0;
96-
publicstaticintnb_inplace_remainder=0;
97-
publicstaticintnb_inplace_power=0;
98-
publicstaticintnb_inplace_lshift=0;
99-
publicstaticintnb_inplace_rshift=0;
100-
publicstaticintnb_inplace_and=0;
101-
publicstaticintnb_inplace_xor=0;
102-
publicstaticintnb_inplace_or=0;
103-
publicstaticintnb_floor_divide=0;
104-
publicstaticintnb_true_divide=0;
105-
publicstaticintnb_inplace_floor_divide=0;
106-
publicstaticintnb_inplace_true_divide=0;
107-
publicstaticintnb_index=0;
108-
publicstaticintnb_matrix_multiply=0;
109-
publicstaticintnb_inplace_matrix_multiply=0;
110-
publicstaticintmp_length=0;
111-
publicstaticintmp_subscript=0;
112-
publicstaticintmp_ass_subscript=0;
113-
publicstaticintsq_length=0;
114-
publicstaticintsq_concat=0;
115-
publicstaticintsq_repeat=0;
116-
publicstaticintsq_item=0;
117-
publicstaticintwas_sq_slice=0;
118-
publicstaticintsq_ass_item=0;
119-
publicstaticintwas_sq_ass_slice=0;
120-
publicstaticintsq_contains=0;
121-
publicstaticintsq_inplace_concat=0;
122-
publicstaticintsq_inplace_repeat=0;
123-
publicstaticintbf_getbuffer=0;
124-
publicstaticintbf_releasebuffer=0;
125-
publicstaticintname=0;
126-
publicstaticintht_slots=0;
127-
publicstaticintqualname=0;
128-
publicstaticintht_cached_keys=0;
129-
130-
/* here are optional user slots, followed by the members. */
131-
publicstaticintmembers=0;
25+
publicintob_refcnt{get;privateset;}
26+
publicintob_type{get;privateset;}
27+
publicintob_size{get;privateset;}
28+
publicinttp_name{get;privateset;}
29+
publicinttp_basicsize{get;privateset;}
30+
publicinttp_itemsize{get;privateset;}
31+
publicinttp_dealloc{get;privateset;}
32+
publicinttp_print{get;privateset;}
33+
publicinttp_getattr{get;privateset;}
34+
publicinttp_setattr{get;privateset;}
35+
publicinttp_as_async{get;privateset;}
36+
publicinttp_repr{get;privateset;}
37+
publicinttp_as_number{get;privateset;}
38+
publicinttp_as_sequence{get;privateset;}
39+
publicinttp_as_mapping{get;privateset;}
40+
publicinttp_hash{get;privateset;}
41+
publicinttp_call{get;privateset;}
42+
publicinttp_str{get;privateset;}
43+
publicinttp_getattro{get;privateset;}
44+
publicinttp_setattro{get;privateset;}
45+
publicinttp_as_buffer{get;privateset;}
46+
publicinttp_flags{get;privateset;}
47+
publicinttp_doc{get;privateset;}
48+
publicinttp_traverse{get;privateset;}
49+
publicinttp_clear{get;privateset;}
50+
publicinttp_richcompare{get;privateset;}
51+
publicinttp_weaklistoffset{get;privateset;}
52+
publicinttp_iter{get;privateset;}
53+
publicinttp_iternext{get;privateset;}
54+
publicinttp_methods{get;privateset;}
55+
publicinttp_members{get;privateset;}
56+
publicinttp_getset{get;privateset;}
57+
publicinttp_base{get;privateset;}
58+
publicinttp_dict{get;privateset;}
59+
publicinttp_descr_get{get;privateset;}
60+
publicinttp_descr_set{get;privateset;}
61+
publicinttp_dictoffset{get;privateset;}
62+
publicinttp_init{get;privateset;}
63+
publicinttp_alloc{get;privateset;}
64+
publicinttp_new{get;privateset;}
65+
publicinttp_free{get;privateset;}
66+
publicinttp_is_gc{get;privateset;}
67+
publicinttp_bases{get;privateset;}
68+
publicinttp_mro{get;privateset;}
69+
publicinttp_cache{get;privateset;}
70+
publicinttp_subclasses{get;privateset;}
71+
publicinttp_weaklist{get;privateset;}
72+
publicinttp_del{get;privateset;}
73+
publicinttp_version_tag{get;privateset;}
74+
publicinttp_finalize{get;privateset;}
75+
publicintam_await{get;privateset;}
76+
publicintam_aiter{get;privateset;}
77+
publicintam_anext{get;privateset;}
78+
publicintnb_add{get;privateset;}
79+
publicintnb_subtract{get;privateset;}
80+
publicintnb_multiply{get;privateset;}
81+
publicintnb_remainder{get;privateset;}
82+
publicintnb_divmod{get;privateset;}
83+
publicintnb_power{get;privateset;}
84+
publicintnb_negative{get;privateset;}
85+
publicintnb_positive{get;privateset;}
86+
publicintnb_absolute{get;privateset;}
87+
publicintnb_bool{get;privateset;}
88+
publicintnb_invert{get;privateset;}
89+
publicintnb_lshift{get;privateset;}
90+
publicintnb_rshift{get;privateset;}
91+
publicintnb_and{get;privateset;}
92+
publicintnb_xor{get;privateset;}
93+
publicintnb_or{get;privateset;}
94+
publicintnb_int{get;privateset;}
95+
publicintnb_reserved{get;privateset;}
96+
publicintnb_float{get;privateset;}
97+
publicintnb_inplace_add{get;privateset;}
98+
publicintnb_inplace_subtract{get;privateset;}
99+
publicintnb_inplace_multiply{get;privateset;}
100+
publicintnb_inplace_remainder{get;privateset;}
101+
publicintnb_inplace_power{get;privateset;}
102+
publicintnb_inplace_lshift{get;privateset;}
103+
publicintnb_inplace_rshift{get;privateset;}
104+
publicintnb_inplace_and{get;privateset;}
105+
publicintnb_inplace_xor{get;privateset;}
106+
publicintnb_inplace_or{get;privateset;}
107+
publicintnb_floor_divide{get;privateset;}
108+
publicintnb_true_divide{get;privateset;}
109+
publicintnb_inplace_floor_divide{get;privateset;}
110+
publicintnb_inplace_true_divide{get;privateset;}
111+
publicintnb_index{get;privateset;}
112+
publicintnb_matrix_multiply{get;privateset;}
113+
publicintnb_inplace_matrix_multiply{get;privateset;}
114+
publicintmp_length{get;privateset;}
115+
publicintmp_subscript{get;privateset;}
116+
publicintmp_ass_subscript{get;privateset;}
117+
publicintsq_length{get;privateset;}
118+
publicintsq_concat{get;privateset;}
119+
publicintsq_repeat{get;privateset;}
120+
publicintsq_item{get;privateset;}
121+
publicintwas_sq_slice{get;privateset;}
122+
publicintsq_ass_item{get;privateset;}
123+
publicintwas_sq_ass_slice{get;privateset;}
124+
publicintsq_contains{get;privateset;}
125+
publicintsq_inplace_concat{get;privateset;}
126+
publicintsq_inplace_repeat{get;privateset;}
127+
publicintbf_getbuffer{get;privateset;}
128+
publicintbf_releasebuffer{get;privateset;}
129+
publicintname{get;privateset;}
130+
publicintht_slots{get;privateset;}
131+
publicintqualname{get;privateset;}
132+
publicintht_cached_keys{get;privateset;}
132133
}
133134

135+
#ifPYTHON36
134136
[StructLayout(LayoutKind.Sequential)]
135137
internalstructPyNumberMethods
136138
{
@@ -221,5 +223,5 @@ internal static partial class SlotTypes
221223
};
222224
}
223225

224-
}
225226
#endif
227+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp