Last week I said I'd go through a stabilization phase, but I couldn't resist the urge to implement some more stuff and fix various things. So this snapshot is a fairly big change again, but no major architectural overhaul like the pervious one.
- Merged with current Classpath cvs.
- Support for JDK 1.5 style class literals (only for class files with version 49 or greater).
- Removed signature decoding from ClassFile.cs (I once thought that it should live there, instead of in ClassLoaderWrapper, but that turned out not to be a good idea).
- Added CoreClasses.cs to cache a few of the frequently used TypeWrappers (Object, Class, String and Throwable).
- Fixed volatile long/double handling to use the (new in .NET 1.1) Thread.VolatileRead/VolatileWrite methods.
- Changed type used in ImplementsAttribute to the ghost wrapper for ghosts.
- Changed method name mangling for interface implementation stubs (shorter name and now uses a slash to make sure it doesn't clash with any Java method names).
- Added support for Finalize/finalize method overriding when mixing Java and non-Java classes in the class hierarchy. I don't like this solution very much. The code is ugly and complicated.
- Added special support for finalize method for .NET types that extend Java types.
- Fixed handling of synchronized static methods. Previously, .NET MethodImplOptions.Synchronized flag was simply set, but this was incorrect because that causes the method to synchronize on the .NET Type object, instead of the Java Class object.
- Fixed handling of instance calls on value types.
- Fixed System.currentTimeMillis implementation to use DateTime.UtcNow instead of Environment.TickCount, to prevent overflow.
- Changed System.setErr/setIn/setOut to use TypeWrapper based reflection instead of .NET reflection.
- Changed handling of resources to use .NET resources instead of global fields, this allows resources to work in multi-module assemblies.
- Changed URL format for assembly embedded resources from opaque to parseable, to facilitate parsing them as a URI.
- Added support for passing ghost references to methods in map.xml instructions.
- Fixed a regression introduced in the previous snapshot, that caused exception mapping not to be invoked for catch(Throwable).
- Limited fixes to get AWT working again (after Classpath AWT changes).
- Declared String.equals and String.compareTo(Object) in map.xml to make reflection appearance identical to JDK.
- Implemented JDK 1.4 String methods that rely on regular expressions (Classpath now has java.util.regex.* support, although not 100% compatible with the JDK).
- Minor performance improvement in String.hashCode implementation. Oddly enough, by doing the length check in the for condition, instead of manually hoisting it out of the loop. Apparantly the CLR JIT recognizes this pattern and optimizes it better.
- Fixed Thread.join to work with non-Java created threads as well.
- Fixed removal of non-Java created threads from ThreadGroup.
- Fixed ServerSocket.accept() timeout support.
- Fixed ikvmc handling of -reference assemblies (to handle the Load vs LoadFrom context issues).
- Various comment fixes.
New snapshots: just the binaries and source plus binaries.