2using System.Diagnostics;
4using System.Runtime.ExceptionServices;
18 public static partial class JVM
21 static readonly
object syncRoot =
new object();
22 static bool initialized;
25 static int emitSymbols;
26 internal static bool RelaxedVerification =
true;
27 internal static bool AllowNonVirtualCalls;
28 internal static readonly
bool DisableEagerClassLoading = SafeGetEnvironmentVariable(
"IKVM_DISABLE_EAGER_CLASS_LOADING") !=
null;
34 internal static void Init()
36#if FIRST_PASS || IMPORTER || EXPORTER
37 throw new NotImplementedException();
39 if (initialized ==
false)
43 if (initialized ==
false)
48 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.String).TypeHandle);
51 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.System).TypeHandle);
54 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.ThreadGroup).TypeHandle);
55 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.Thread).TypeHandle);
56 GC.KeepAlive(SystemThreadGroup);
57 GC.KeepAlive(MainThreadGroup);
60 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.Class).TypeHandle);
63 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.reflect.Method).TypeHandle);
66 Internal.SystemAccessor.InvokeInitializeSystemClass();
69 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.@
ref.Finalizer).TypeHandle);
72 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.OutOfMemoryError).TypeHandle);
73 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.NullPointerException).TypeHandle);
74 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.ClassCastException).TypeHandle);
75 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.ArrayStoreException).TypeHandle);
76 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.ArithmeticException).TypeHandle);
77 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.StackOverflowError).TypeHandle);
78 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.IllegalMonitorStateException).TypeHandle);
79 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.IllegalArgumentException).TypeHandle);
82 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.Compiler).TypeHandle);
85 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.invoke.MemberName).TypeHandle);
86 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.invoke.MethodHandle).TypeHandle);
87 RuntimeHelpers.RunClassConstructor(typeof(
java.
lang.invoke.MethodHandleNatives).TypeHandle);
94#if !IMPORTER && !EXPORTER
96 internal static bool EmitSymbols
100 if (emitSymbols == 0)
106 if (
string.Equals(
System.Configuration.ConfigurationManager.AppSettings[
"ikvm-emit-symbols"] ??
"",
"true", StringComparison.OrdinalIgnoreCase))
111 if (
string.Equals(Environment.GetEnvironmentVariable(
"IKVM_EMIT_SYMBOLS") ??
"",
"true", StringComparison.OrdinalIgnoreCase))
115 if (state == 2 && Debugger.IsAttached)
124 return emitSymbols == 1;
130#if FIRST_PASS == false && IMPORTER == false && EXPORTER == false
140 internal static VfsTable Vfs => Internal.vfs;
145 internal static object SystemThreadGroup => Internal.systemThreadGroup.Value;
150 internal static object MainThreadGroup => Internal.mainThreadGroup.Value;
156 static Exception pendingException;
161 internal static Exception GetPendingException()
163 return pendingException;
170 internal static void SetPendingException(Exception e)
172 pendingException = e !=
null ? ikvm.runtime.Util.mapException(e) :
null;
178 internal static void ThrowPendingException()
180 var e = GetPendingException();
183 pendingException =
null;
184 ExceptionDispatchInfo.Capture(e).Throw();
196 internal static string SafeGetEnvironmentVariable(
string name)
200 return Environment.GetEnvironmentVariable(name);
202 catch (SecurityException)
208 internal static string MangleResourceName(
string name)
214 var sb =
new ValueStringBuilder(name.Length + 6);
217 foreach (var c
in name)
219 if (
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-+.()$#@~=&{}[]0123456789`".IndexOf(c) != -1)
230 sb.Append(
string.Format(
"{0:X4}", (
int)c));
234 return sb.ToString();
242 internal static int PersistableHash(
string str)
246 foreach (
char c
in str)
262 internal static object Box(
object val)
264#if IMPORTER || FIRST_PASS || EXPORTER
265 throw new NotImplementedException();
269 byte =>
java.
lang.Byte.valueOf((
byte)val),
270 bool =>
java.
lang.Boolean.valueOf((
bool)val),
271 short =>
java.
lang.Short.valueOf((
short)val),
272 char =>
java.
lang.Character.valueOf((
char)val),
273 int =>
java.
lang.Integer.valueOf((
int)val),
274 float =>
java.
lang.Float.valueOf((
float)val),
275 long =>
java.
lang.Long.valueOf((
long)val),
276 double =>
java.
lang.Double.valueOf((
double)val),
277 _ =>
throw new java.
lang.IllegalArgumentException()
282 internal static object Unbox(
object val)
284#if IMPORTER || FIRST_PASS || EXPORTER
285 throw new NotImplementedException();
289 java.lang.Byte b => b.byteValue(),
290 java.lang.Boolean b1 => b1.booleanValue(),
291 java.lang.Short s => s.shortValue(),
292 java.lang.Character c => c.charValue(),
293 java.lang.Integer i => i.intValue(),
294 java.lang.Float f => f.floatValue(),
295 java.lang.Long l => l.longValue(),
296 java.lang.Double d => d.doubleValue(),
297 _ =>
throw new java.
lang.IllegalArgumentException()
302#if !IMPORTER && !EXPORTER
304 internal static object NewAnnotation(
java.
lang.ClassLoader classLoader,
object definition)
307 throw new NotImplementedException();
309 java.lang.annotation.Annotation ann =
null;
312 ann = (
java.
lang.annotation.Annotation)ikvm.@
internal.AnnotationAttributeBase.newAnnotation(classLoader, definition);
314 catch (
java.
lang.TypeNotPresentException)
319 if (ann !=
null && sun.reflect.annotation.AnnotationType.getInstance(ann.annotationType()).retention() ==
java.
lang.annotation.RetentionPolicy.RUNTIME)
328#if !IMPORTER && !EXPORTER
330 internal static object NewAnnotationElementValue(
java.
lang.ClassLoader classLoader,
java.
lang.Class expectedClass,
object definition)
333 throw new NotImplementedException();
337 return ikvm.@
internal.AnnotationAttributeBase.decodeElementValue(definition, expectedClass, classLoader);
339 catch (
java.
lang.IllegalAccessException)
System.Threading.Interlocked Interlocked
Main state of the running JVM.
Maintains services relevant to an instane of the IKVM runtime.