Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/vm.cs')
-rw-r--r--runtime/vm.cs498
1 files changed, 0 insertions, 498 deletions
diff --git a/runtime/vm.cs b/runtime/vm.cs
deleted file mode 100644
index dbb7ae81..00000000
--- a/runtime/vm.cs
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- Copyright (C) 2002-2013 Jeroen Frijters
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jeroen Frijters
- jeroen@frijters.net
-
-*/
-using System;
-using System.Threading;
-#if STATIC_COMPILER || STUB_GENERATOR
-using IKVM.Reflection;
-using Type = IKVM.Reflection.Type;
-#else
-using System.Reflection;
-#endif
-using System.IO;
-using System.Diagnostics;
-using System.Text;
-using System.Security;
-using System.Security.Permissions;
-using IKVM.Internal;
-
-#if !STATIC_COMPILER && !STUB_GENERATOR
-namespace IKVM.Internal
-{
- public static class Starter
- {
- public static void PrepareForSaveDebugImage()
- {
- JVM.IsSaveDebugImage = true;
- }
-
- public static void SaveDebugImage()
- {
- DynamicClassLoader.SaveDebugImages();
- }
-
- public static bool ClassUnloading
- {
-#if CLASSGC
- get { return JVM.classUnloading; }
- set { JVM.classUnloading = value; }
-#else
- get { return false; }
- set { }
-#endif
- }
-
- public static bool RelaxedVerification
- {
- get { return JVM.relaxedVerification; }
- set { JVM.relaxedVerification = value; }
- }
-
- public static bool AllowNonVirtualCalls
- {
- get { return JVM.AllowNonVirtualCalls; }
- set { JVM.AllowNonVirtualCalls = value; }
- }
- }
-}
-#endif // !STATIC_COMPILER && !STUB_GENERATOR
-
-namespace IKVM.Internal
-{
- static class JVM
- {
- internal const string JarClassList = "--ikvm-classes--/";
-#if STATIC_COMPILER
- internal const bool FinishingForDebugSave = false;
- internal const bool IsSaveDebugImage = false;
-#elif !STUB_GENERATOR
- private static bool finishingForDebugSave;
- private static int emitSymbols;
- internal static bool IsSaveDebugImage;
-#if CLASSGC
- internal static bool classUnloading = true;
-#endif
-#endif // STATIC_COMPILER
- private static Assembly coreAssembly;
-#if !STUB_GENERATOR
- internal static bool relaxedVerification = true;
- internal static bool AllowNonVirtualCalls;
-#endif
-
-#if !STATIC_COMPILER && !STUB_GENERATOR && !FIRST_PASS
- static JVM()
- {
- if (SafeGetEnvironmentVariable("IKVM_SAVE_DYNAMIC_ASSEMBLIES") != null)
- {
- IsSaveDebugImage = true;
- java.lang.Runtime.getRuntime().addShutdownHook(new java.lang.Thread(ikvm.runtime.Delegates.toRunnable(DynamicClassLoader.SaveDebugImages)));
- }
- }
-#endif
-
- internal static Version SafeGetAssemblyVersion(System.Reflection.Assembly asm)
- {
- // Assembly.GetName().Version requires FileIOPermission,
- // so we parse the FullName manually :-(
- string name = asm.FullName;
- int start = name.IndexOf(", Version=");
- if(start >= 0)
- {
- start += 10;
- int end = name.IndexOf(',', start);
- if(end >= 0)
- {
- return new Version(name.Substring(start, end - start));
- }
- }
- return new Version();
- }
-
- internal static string SafeGetEnvironmentVariable(string name)
- {
- try
- {
- return Environment.GetEnvironmentVariable(name);
- }
- catch(SecurityException)
- {
- return null;
- }
- }
-
- internal static Assembly CoreAssembly
- {
- get
- {
-#if !STATIC_COMPILER && !STUB_GENERATOR
- if(coreAssembly == null)
- {
-#if FIRST_PASS
- throw new InvalidOperationException("This version of IKVM.Runtime.dll was compiled with FIRST_PASS defined.");
-#else
- coreAssembly = typeof(java.lang.Object).Assembly;
-#endif
- }
-#endif // !STATIC_COMPILER
- return coreAssembly;
- }
- set
- {
- coreAssembly = value;
- }
- }
-
-#if !STATIC_COMPILER && !STUB_GENERATOR
- internal static bool FinishingForDebugSave
- {
- get
- {
- return finishingForDebugSave;
- }
- set
- {
- finishingForDebugSave = value;
- }
- }
-
- internal static bool EmitSymbols
- {
- get
- {
- if (emitSymbols == 0)
- {
- int state;
- string debug = System.Configuration.ConfigurationManager.AppSettings["ikvm-emit-symbols"];
- if (debug == null)
- {
- state = Debugger.IsAttached ? 1 : 2;
- }
- else
- {
- state = debug.Equals("True", StringComparison.OrdinalIgnoreCase) ? 1 : 2;
- }
- // make sure we only set the value once, because it isn't allowed to changed as that could cause
- // the compiler to try emitting symbols into a ModuleBuilder that doesn't accept them (and would
- // throw an InvalidOperationException)
- Interlocked.CompareExchange(ref emitSymbols, state, 0);
- }
- return emitSymbols == 1;
- }
- }
-#endif // !STATIC_COMPILER && !STUB_GENERATOR
-
- internal static bool IsUnix
- {
- get
- {
- return Environment.OSVersion.Platform == PlatformID.Unix;
- }
- }
-
- internal static string MangleResourceName(string name)
- {
- // FXBUG there really shouldn't be any need to mangle the resource names,
- // but in order for ILDASM/ILASM round tripping to work reliably, we have
- // to make sure that we don't produce resource names that'll cause ILDASM
- // to generate invalid filenames.
- StringBuilder sb = new StringBuilder("ikvm__", name.Length + 6);
- foreach(char c in name)
- {
- if("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-+.()$#@~=&{}[]0123456789`".IndexOf(c) != -1)
- {
- sb.Append(c);
- }
- else if(c == '/')
- {
- sb.Append('!');
- }
- else
- {
- sb.Append('%');
- sb.Append(string.Format("{0:X4}", (int)c));
- }
- }
- return sb.ToString();
- }
-
- // based on Bret Mulvey's C# port of Jenkins32
- // note that this algorithm cannot be changed, because we persist these hashcodes in the metadata of shared class loader assemblies
- internal static int PersistableHash(string str)
- {
- uint key = 1;
- foreach (char c in str)
- {
- key += c;
- key += (key << 12);
- key ^= (key >> 22);
- key += (key << 4);
- key ^= (key >> 9);
- key += (key << 10);
- key ^= (key >> 2);
- key += (key << 7);
- key ^= (key >> 12);
- }
- return (int)key;
- }
-
-#if !STATIC_COMPILER
- internal static void CriticalFailure(string message, Exception x)
- {
- try
- {
- Tracer.Error(Tracer.Runtime, "CRITICAL FAILURE: {0}", message);
- System.Type messageBox = null;
-#if !STUB_GENERATOR
- // NOTE we use reflection to invoke MessageBox.Show, to make sure we run in environments where WinForms isn't available
- Assembly winForms = IsUnix ? null : Assembly.Load("System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
- if(winForms != null)
- {
- messageBox = winForms.GetType("System.Windows.Forms.MessageBox");
- }
-#endif
- message = String.Format("****** Critical Failure: {1} ******{0}{0}" +
- "PLEASE FILE A BUG REPORT FOR IKVM.NET WHEN YOU SEE THIS MESSAGE{0}{0}" +
- (messageBox != null ? "(on Windows you can use Ctrl+C to copy the contents of this message to the clipboard){0}{0}" : "") +
- "{2}{0}" +
- "{3}{0}" +
- "{4} {5}-bit{0}{0}" +
- "{6}{0}" +
- "{7}{0}" +
- "{8}",
- Environment.NewLine,
- message,
- System.Reflection.Assembly.GetExecutingAssembly().FullName,
- System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),
- Environment.Version,
- IntPtr.Size * 8,
- x,
- x != null ? new StackTrace(x, true).ToString() : "",
- new StackTrace(true));
- if(messageBox != null)
- {
- try
- {
- Version ver = SafeGetAssemblyVersion(typeof(JVM).Assembly);
- messageBox.InvokeMember("Show", System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public, null, null, new object[] { message, "IKVM.NET " + ver + " Critical Failure" });
- }
- catch
- {
- Console.Error.WriteLine(message);
- }
- }
- else
- {
- Console.Error.WriteLine(message);
- }
- }
- catch(Exception ex)
- {
- Console.Error.WriteLine(ex);
- }
- finally
- {
- Environment.Exit(666);
- }
- }
-#endif // !STATIC_COMPILER
-
-#if STATIC_COMPILER || STUB_GENERATOR
- internal static Type LoadType(System.Type type)
- {
- return StaticCompiler.GetRuntimeType(type.FullName);
- }
-#endif
-
- // this method resolves types in IKVM.Runtime.dll
- // (the version of IKVM.Runtime.dll that we're running
- // with can be different from the one we're compiling against.)
- internal static Type LoadType(Type type)
- {
-#if STATIC_COMPILER || STUB_GENERATOR
- return StaticCompiler.GetRuntimeType(type.FullName);
-#else
- return type;
-#endif
- }
-
- internal static object Box(object val)
- {
-#if STATIC_COMPILER || FIRST_PASS || STUB_GENERATOR
- return null;
-#else
- if(val is byte)
- {
- return java.lang.Byte.valueOf((byte)val);
- }
- else if(val is bool)
- {
- return java.lang.Boolean.valueOf((bool)val);
- }
- else if(val is short)
- {
- return java.lang.Short.valueOf((short)val);
- }
- else if(val is char)
- {
- return java.lang.Character.valueOf((char)val);
- }
- else if(val is int)
- {
- return java.lang.Integer.valueOf((int)val);
- }
- else if(val is float)
- {
- return java.lang.Float.valueOf((float)val);
- }
- else if(val is long)
- {
- return java.lang.Long.valueOf((long)val);
- }
- else if(val is double)
- {
- return java.lang.Double.valueOf((double)val);
- }
- else
- {
- throw new java.lang.IllegalArgumentException();
- }
-#endif
- }
-
- internal static object Unbox(object val)
- {
-#if STATIC_COMPILER || FIRST_PASS || STUB_GENERATOR
- return null;
-#else
- java.lang.Byte b = val as java.lang.Byte;
- if(b != null)
- {
- return b.byteValue();
- }
- java.lang.Boolean b1 = val as java.lang.Boolean;
- if(b1 != null)
- {
- return b1.booleanValue();
- }
- java.lang.Short s = val as java.lang.Short;
- if(s != null)
- {
- return s.shortValue();
- }
- java.lang.Character c = val as java.lang.Character;
- if(c != null)
- {
- return c.charValue();
- }
- java.lang.Integer i = val as java.lang.Integer;
- if(i != null)
- {
- return i.intValue();
- }
- java.lang.Float f = val as java.lang.Float;
- if(f != null)
- {
- return f.floatValue();
- }
- java.lang.Long l = val as java.lang.Long;
- if(l != null)
- {
- return l.longValue();
- }
- java.lang.Double d = val as java.lang.Double;
- if(d != null)
- {
- return d.doubleValue();
- }
- else
- {
- throw new java.lang.IllegalArgumentException();
- }
-#endif
- }
-
-#if !STATIC_COMPILER && !STUB_GENERATOR
- internal static object NewAnnotation(java.lang.ClassLoader classLoader, object definition)
- {
-#if !FIRST_PASS
- java.lang.annotation.Annotation ann = null;
- try
- {
- ann = (java.lang.annotation.Annotation)ikvm.@internal.AnnotationAttributeBase.newAnnotation(classLoader, definition);
- }
- catch (java.lang.TypeNotPresentException) { }
- if (ann != null && sun.reflect.annotation.AnnotationType.getInstance(ann.annotationType()).retention() == java.lang.annotation.RetentionPolicy.RUNTIME)
- {
- return ann;
- }
-#endif
- return null;
- }
-#endif
-
-#if !STATIC_COMPILER && !STUB_GENERATOR
- internal static object NewAnnotationElementValue(java.lang.ClassLoader classLoader, java.lang.Class expectedClass, object definition)
- {
-#if FIRST_PASS
- return null;
-#else
- try
- {
- return ikvm.@internal.AnnotationAttributeBase.decodeElementValue(definition, expectedClass, classLoader);
- }
- catch(java.lang.IllegalAccessException)
- {
- // TODO this shouldn't be here
- return null;
- }
-#endif
- }
-#endif
-
-#if !STATIC_COMPILER && !STUB_GENERATOR
- // helper for JNI (which doesn't have access to core library internals)
- internal static object NewDirectByteBuffer(long address, int capacity)
- {
-#if FIRST_PASS
- return null;
-#else
- return java.nio.DirectByteBuffer.__new(address, capacity);
-#endif
- }
-#endif
-
- internal static Type Import(System.Type type)
- {
-#if STATIC_COMPILER || STUB_GENERATOR
- return StaticCompiler.Universe.Import(type);
-#else
- return type;
-#endif
- }
- }
-
- static class Experimental
- {
- internal static readonly bool JDK_8 = JVM.SafeGetEnvironmentVariable("IKVM_EXPERIMENTAL_JDK_8") != null;
- }
-}