зеркало из https://github.com/mono/ikvm-fork.git
We have room for a free bool, so it makes more sense to only get the __<clinit> method when we really need to (and not trigger a LazyPublishMembers).
This commit is contained in:
Родитель
d7f31faced
Коммит
44efece100
|
@ -3797,6 +3797,7 @@ namespace IKVM.Internal
|
||||||
private TypeWrapper[] interfaces;
|
private TypeWrapper[] interfaces;
|
||||||
private TypeWrapper[] innerclasses;
|
private TypeWrapper[] innerclasses;
|
||||||
private MethodInfo clinitMethod;
|
private MethodInfo clinitMethod;
|
||||||
|
private bool clinitMethodSet;
|
||||||
private Modifiers reflectiveModifiers;
|
private Modifiers reflectiveModifiers;
|
||||||
|
|
||||||
internal static CompiledTypeWrapper newInstance(string name, Type type)
|
internal static CompiledTypeWrapper newInstance(string name, Type type)
|
||||||
|
@ -4108,8 +4109,11 @@ namespace IKVM.Internal
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
// trigger LazyPublishMembers
|
if(!clinitMethodSet)
|
||||||
GetMethods();
|
{
|
||||||
|
clinitMethod = type.GetMethod("__<clinit>", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||||
|
clinitMethodSet = true;
|
||||||
|
}
|
||||||
return clinitMethod != null;
|
return clinitMethod != null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4434,7 +4438,6 @@ namespace IKVM.Internal
|
||||||
protected override void LazyPublishMembers()
|
protected override void LazyPublishMembers()
|
||||||
{
|
{
|
||||||
bool isDelegate = type.BaseType == Types.MulticastDelegate;
|
bool isDelegate = type.BaseType == Types.MulticastDelegate;
|
||||||
clinitMethod = type.GetMethod("__<clinit>", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
|
||||||
List<MethodWrapper> methods = new List<MethodWrapper>();
|
List<MethodWrapper> methods = new List<MethodWrapper>();
|
||||||
List<FieldWrapper> fields = new List<FieldWrapper>();
|
List<FieldWrapper> fields = new List<FieldWrapper>();
|
||||||
MemberInfo[] members = type.GetMembers(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
|
MemberInfo[] members = type.GetMembers(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance);
|
||||||
|
@ -4698,9 +4701,7 @@ namespace IKVM.Internal
|
||||||
|
|
||||||
internal override void EmitRunClassConstructor(CodeEmitter ilgen)
|
internal override void EmitRunClassConstructor(CodeEmitter ilgen)
|
||||||
{
|
{
|
||||||
// trigger LazyPublishMembers
|
if(HasStaticInitializer)
|
||||||
GetMethods();
|
|
||||||
if(clinitMethod != null)
|
|
||||||
{
|
{
|
||||||
ilgen.Emit(OpCodes.Call, clinitMethod);
|
ilgen.Emit(OpCodes.Call, clinitMethod);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче