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
This repository was archived by the owner on Jul 22, 2023. It is now read-only.
/pythonnetPublic archive
forked frompythonnet/pythonnet

Commit502001e

Browse files
committed
fix stackoverflowexception
1 parent3865471 commit502001e

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

‎src/runtime/classmanager.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ internal static ClassBase GetClass(Type type)
5050
}
5151
cb=CreateClass(type);
5252
cache.Add(type,cb);
53+
// Initialize the object later, as this might call this GetClass method recursivly (for example when a nested class inherits its declaring class...)
54+
InitClassBase(type,cb);
5355
returncb;
5456
}
5557

@@ -62,12 +64,6 @@ internal static ClassBase GetClass(Type type)
6264

6365
privatestaticClassBaseCreateClass(Typetype)
6466
{
65-
// First, we introspect the managed type and build some class
66-
// information, including generating the member descriptors
67-
// that we'll be putting in the Python class __dict__.
68-
69-
ClassInfoinfo=GetClassInfo(type);
70-
7167
// Next, select the appropriate managed implementation class.
7268
// Different kinds of types, such as array types or interface
7369
// types, want to vary certain implementation details to make
@@ -115,6 +111,18 @@ private static ClassBase CreateClass(Type type)
115111
impl=newClassObject(type);
116112
}
117113

114+
115+
returnimpl;
116+
}
117+
118+
privatestaticvoidInitClassBase(Typetype,ClassBaseimpl)
119+
{
120+
// First, we introspect the managed type and build some class
121+
// information, including generating the member descriptors
122+
// that we'll be putting in the Python class __dict__.
123+
124+
ClassInfoinfo=GetClassInfo(type);
125+
118126
impl.indexer=info.indexer;
119127

120128
// Now we allocate the Python type object to reflect the given
@@ -182,10 +190,8 @@ private static ClassBase CreateClass(Type type)
182190
}
183191
}
184192

185-
returnimpl;
186193
}
187194

188-
189195
privatestaticClassInfoGetClassInfo(Typetype)
190196
{
191197
ClassInfoci=newClassInfo(type);
@@ -353,6 +359,7 @@ private static ClassInfo GetClassInfo(Type type)
353359
if(!(tp.IsNestedPublic||tp.IsNestedFamily||
354360
tp.IsNestedFamORAssem))
355361
continue;
362+
// Note the given instance might be uninitialized
356363
ob=ClassManager.GetClass(tp);
357364
ci.members[mi.Name]=ob;
358365
continue;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp