A couple of fixes and performance enhancements for static synchronized and static native methods.
Changes:
- Fixed ikvmc so it no longer throws an exception if no output filename is specified (or implied).
- Fixed monitorenter instruction and synchronized methods to not throw InterruptedException.
- Added [DebuggerStepThroughAttribute] to all methods in ByteCodeHelper that didn't have it yet.
- Added class object caching for static synchronized and native methods.
- Fixed Thread.stop() so that it works on suspended threads.
- Implemented a few more random awt peer methods.
- Removed gnu.classpath.RawData mapping from map.xml.
- Changed ikvm.exe setting of gnu.classpath.home and java.class.path properties so that they end up in the default system properties.
- Added IKVM.Runtime.Startup.EnterMainThread() and ExitMainThread() methods (and changed ikvm.exe) to encapsulate the setup and tear-down of the main thread.
- Fixed JNIEnv.MonitorEnter to use ByteCodeHelper.monitorenter.
- Fixed compiler bug that caused invoking CharSequence methods to generate a ClassCastException.
- Changed ikvmc main stub method to call Startup.EnterMainThread() and ExitMainThread() and to pass unhandled exceptions to ThreadGroup.uncaughtException().
- Fixed JNI method invocation to not wrap exceptions in java.lang.reflect.InvocationTargetException.
- Fixed support for synchronized native methods.
- Fixed bug in JNI proxy generator (only used when -Xsave option is specified).
- Named the WaitShutdownHook and SaveAssemblyShutdownHook threads in starter.cs.
- Fixed JNIEnv.RegisterNatives when JNI proxy generator is used.
- Fixed Double.parseDouble to parse +Infinity correctly.
New snapshots: just the binaries and source plus binaries.