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:
jfrijters 2010-09-21 05:45:48 +00:00
Родитель fceb82b65e
Коммит b5709a3606
3 изменённых файлов: 8 добавлений и 14 удалений

Просмотреть файл

@ -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