зеркало из https://github.com/mono/ikvm-fork.git
Changed workaround for gmcs inability to properly deal with two-pass compilation of mutually dependant assemblies to use reflection, because the previous workaround now also fails on Mono 2.8.
This commit is contained in:
Родитель
fceb82b65e
Коммит
b5709a3606
|
@ -1058,19 +1058,11 @@ namespace IKVM.Internal
|
|||
}
|
||||
}
|
||||
|
||||
#if !STATIC_COMPILER && !STUB_GENERATOR && __MonoCS__
|
||||
// MONOBUG this weird hack is to work around an mcs bug
|
||||
private static void SetClassLoadWrapperHack<T>(ref T field, ClassLoaderWrapper wrapper)
|
||||
{
|
||||
field = (T)(object)wrapper;
|
||||
}
|
||||
#endif
|
||||
|
||||
protected static void SetWrapperForClassLoader(object javaClassLoader, ClassLoaderWrapper wrapper)
|
||||
{
|
||||
#if !STATIC_COMPILER && !FIRST_PASS && !STUB_GENERATOR
|
||||
#if __MonoCS__
|
||||
SetClassLoadWrapperHack(ref ((java.lang.ClassLoader)javaClassLoader).wrapper, wrapper);
|
||||
typeof(java.lang.ClassLoader).GetField("wrapper", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(javaClassLoader, wrapper);
|
||||
#else
|
||||
((java.lang.ClassLoader)javaClassLoader).wrapper = wrapper;
|
||||
#endif
|
||||
|
|
|
@ -222,7 +222,7 @@ namespace IKVM.Internal
|
|||
#if !STATIC_COMPILER && !FIRST_PASS
|
||||
java.lang.Class clazz = new java.lang.Class(null);
|
||||
#if __MonoCS__
|
||||
TypeWrapper.SetTypeWrapperHack(ref clazz.typeWrapper, type);
|
||||
TypeWrapper.SetTypeWrapperHack(clazz, type);
|
||||
#else
|
||||
clazz.typeWrapper = type;
|
||||
#endif
|
||||
|
|
|
@ -1828,7 +1828,7 @@ namespace IKVM.Internal
|
|||
}
|
||||
}
|
||||
#if __MonoCS__
|
||||
SetTypeWrapperHack(ref clazz.typeWrapper, this);
|
||||
SetTypeWrapperHack(clazz, this);
|
||||
#else
|
||||
clazz.typeWrapper = this;
|
||||
#endif
|
||||
|
@ -1841,9 +1841,11 @@ namespace IKVM.Internal
|
|||
|
||||
#if __MonoCS__
|
||||
// MONOBUG this method is to work around an mcs bug
|
||||
internal static void SetTypeWrapperHack<T>(ref T field, TypeWrapper type)
|
||||
internal static void SetTypeWrapperHack(object clazz, TypeWrapper type)
|
||||
{
|
||||
field = (T)(object)type;
|
||||
#if !FIRST_PASS
|
||||
typeof(java.lang.Class).GetField("typeWrapper", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(clazz, type);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1891,7 +1893,7 @@ namespace IKVM.Internal
|
|||
tw = ClassLoaderWrapper.GetWrapperFromType(type);
|
||||
}
|
||||
#if __MonoCS__
|
||||
SetTypeWrapperHack(ref clazz.typeWrapper, tw);
|
||||
SetTypeWrapperHack(clazz, tw);
|
||||
#else
|
||||
clazz.typeWrapper = tw;
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче