зеркало из https://github.com/mono/ikvm-fork.git
*** empty log message ***
This commit is contained in:
Родитель
4912bd1f33
Коммит
a02d6c1f8d
|
@ -49,6 +49,7 @@ class ClassLoaderWrapper
|
||||||
// HACK moduleBuilder is static, because multiple dynamic assemblies is broken (TypeResolve doesn't fire)
|
// HACK moduleBuilder is static, because multiple dynamic assemblies is broken (TypeResolve doesn't fire)
|
||||||
// so for the time being, we share one dynamic assembly among all classloaders
|
// so for the time being, we share one dynamic assembly among all classloaders
|
||||||
private static ModuleBuilder moduleBuilder;
|
private static ModuleBuilder moduleBuilder;
|
||||||
|
private static bool saveDebugImage;
|
||||||
|
|
||||||
// HACK this is used by the ahead-of-time compiler to overrule the bootstrap classloader
|
// HACK this is used by the ahead-of-time compiler to overrule the bootstrap classloader
|
||||||
internal static void SetBootstrapClassLoader(ClassLoaderWrapper bootstrapClassLoader)
|
internal static void SetBootstrapClassLoader(ClassLoaderWrapper bootstrapClassLoader)
|
||||||
|
@ -478,6 +479,12 @@ class ClassLoaderWrapper
|
||||||
return (this == GetBootstrapClassLoader()) ? null : javaClassLoader;
|
return (this == GetBootstrapClassLoader()) ? null : javaClassLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static void PrepareForSaveDebugImage()
|
||||||
|
{
|
||||||
|
Debug.Assert(moduleBuilder == null);
|
||||||
|
saveDebugImage = true;
|
||||||
|
}
|
||||||
|
|
||||||
internal static void SaveDebugImage(object mainClass)
|
internal static void SaveDebugImage(object mainClass)
|
||||||
{
|
{
|
||||||
// HACK we iterate 3 times, in the hopes that that will be enough. We really should let FinishAll return a boolean whether
|
// HACK we iterate 3 times, in the hopes that that will be enough. We really should let FinishAll return a boolean whether
|
||||||
|
@ -567,7 +574,7 @@ class ClassLoaderWrapper
|
||||||
{
|
{
|
||||||
AssemblyName name = new AssemblyName();
|
AssemblyName name = new AssemblyName();
|
||||||
name.Name = "ikvm_dynamic_assembly__" + (this == GetBootstrapClassLoader() ? "bootstrap" : javaClassLoader);
|
name.Name = "ikvm_dynamic_assembly__" + (this == GetBootstrapClassLoader() ? "bootstrap" : javaClassLoader);
|
||||||
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
|
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(name, saveDebugImage ? AssemblyBuilderAccess.RunAndSave : AssemblyBuilderAccess.Run);
|
||||||
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, JVM.Debug);
|
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, JVM.Debug);
|
||||||
if(JVM.Debug)
|
if(JVM.Debug)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4121,6 +4121,7 @@ sealed class FieldWrapper
|
||||||
private IntPtr cookie;
|
private IntPtr cookie;
|
||||||
internal CodeEmitter EmitGet;
|
internal CodeEmitter EmitGet;
|
||||||
internal CodeEmitter EmitSet;
|
internal CodeEmitter EmitSet;
|
||||||
|
private FieldInfo field;
|
||||||
|
|
||||||
internal FieldWrapper(TypeWrapper declaringType, string name, string sig, Modifiers modifiers)
|
internal FieldWrapper(TypeWrapper declaringType, string name, string sig, Modifiers modifiers)
|
||||||
{
|
{
|
||||||
|
@ -4385,9 +4386,8 @@ sealed class FieldWrapper
|
||||||
return field;
|
return field;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void SetValue(object obj, object val)
|
private void LookupField()
|
||||||
{
|
{
|
||||||
// TODO this is a broken implementation (for one thing, it needs to support redirection)
|
|
||||||
BindingFlags bindings = BindingFlags.Public | BindingFlags.NonPublic;
|
BindingFlags bindings = BindingFlags.Public | BindingFlags.NonPublic;
|
||||||
if(IsStatic)
|
if(IsStatic)
|
||||||
{
|
{
|
||||||
|
@ -4397,21 +4397,26 @@ sealed class FieldWrapper
|
||||||
{
|
{
|
||||||
bindings |= BindingFlags.Instance;
|
bindings |= BindingFlags.Instance;
|
||||||
}
|
}
|
||||||
DeclaringType.Type.GetField(name, bindings).SetValue(obj, val);
|
field = DeclaringType.Type.GetField(name, bindings);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void SetValue(object obj, object val)
|
||||||
|
{
|
||||||
|
// TODO this is a broken implementation (for one thing, it needs to support redirection)
|
||||||
|
if(field == null)
|
||||||
|
{
|
||||||
|
LookupField();
|
||||||
|
}
|
||||||
|
field.SetValue(obj, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal object GetValue(object obj)
|
internal object GetValue(object obj)
|
||||||
{
|
{
|
||||||
// TODO this is a broken implementation (for one thing, it needs to support redirection)
|
// TODO this is a broken implementation (for one thing, it needs to support redirection)
|
||||||
BindingFlags bindings = BindingFlags.Public | BindingFlags.NonPublic;
|
if(field == null)
|
||||||
if(IsStatic)
|
|
||||||
{
|
{
|
||||||
bindings |= BindingFlags.Static;
|
LookupField();
|
||||||
}
|
}
|
||||||
else
|
return field.GetValue(obj);
|
||||||
{
|
|
||||||
bindings |= BindingFlags.Instance;
|
|
||||||
}
|
|
||||||
return DeclaringType.Type.GetField(name, bindings).GetValue(obj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -456,6 +456,11 @@ namespace NativeCode.java
|
||||||
|
|
||||||
public static string nativeGetLibname(string pathname, string libname)
|
public static string nativeGetLibname(string pathname, string libname)
|
||||||
{
|
{
|
||||||
|
if(Environment.OSVersion.ToString().IndexOf("Unix") >= 0)
|
||||||
|
{
|
||||||
|
return "lib" + libname + ".so";
|
||||||
|
}
|
||||||
|
|
||||||
// HACK this seems like a lame way of doing things, but in order to get Eclipse to work,
|
// HACK this seems like a lame way of doing things, but in order to get Eclipse to work,
|
||||||
// we have append .dll to the libname here
|
// we have append .dll to the libname here
|
||||||
if(!libname.ToUpper().EndsWith(".DLL"))
|
if(!libname.ToUpper().EndsWith(".DLL"))
|
||||||
|
|
|
@ -294,6 +294,11 @@ public class JVM
|
||||||
loader.Save();
|
loader.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PrepareForSaveDebugImage()
|
||||||
|
{
|
||||||
|
ClassLoaderWrapper.PrepareForSaveDebugImage();
|
||||||
|
}
|
||||||
|
|
||||||
public static void SaveDebugImage(object mainClass)
|
public static void SaveDebugImage(object mainClass)
|
||||||
{
|
{
|
||||||
ClassLoaderWrapper.SaveDebugImage(mainClass);
|
ClassLoaderWrapper.SaveDebugImage(mainClass);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<project name="ikvm" default="all">
|
<project name="ikvm" default="all">
|
||||||
<target name="all">
|
<target name="all">
|
||||||
<nant buildfile="ik.vm.net/ik.vm.net.build" />
|
<nant buildfile="IK.VM.NET/ik.vm.net.build" />
|
||||||
<nant buildfile="ik.vm.jni/ik.vm.jni.build" />
|
<nant buildfile="IK.VM.JNI/ik.vm.jni.build" />
|
||||||
<nant buildfile="netexp/netexp.build" />
|
<nant buildfile="netexp/netexp.build" />
|
||||||
<nant buildfile="ikvmc/ikvmc.build" />
|
<nant buildfile="ikvmc/ikvmc.build" />
|
||||||
<nant buildfile="classpath/classpath.build" />
|
<nant buildfile="classpath/classpath.build" />
|
||||||
|
|
|
@ -153,6 +153,7 @@ public class Starter
|
||||||
else if(args[i] == "-Xsave")
|
else if(args[i] == "-Xsave")
|
||||||
{
|
{
|
||||||
saveAssembly = true;
|
saveAssembly = true;
|
||||||
|
JVM.PrepareForSaveDebugImage();
|
||||||
}
|
}
|
||||||
else if(args[i] == "-Xtime")
|
else if(args[i] == "-Xtime")
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче