Monday, February 11, 2013

New Development Snapshot

The recent architectural change makes it possible for the static compiler to use dynamic binding when it encounters a missing type. This in turn makes the dynamic binding support more important, so I've been fixing a lot of bugs in this area.

Currently, ikvmc will still emit code that statically throws a NoClassDefFoundError when accessing missing types, but in the future the default will change to generate dynamic binding code in this case.

Changes:

  • Fixed a bug with Graphics.setComposite(x). This fixes most paint artefacts of Nimbus L&F.
  • Fixed a NPE in constructor of BufferedImage.
  • Fixed TexturePaint bugs.
  • Enable ldc to work for unloadable types in dynamic mode.
  • Changed dynamic bytecode helper methods to be CallerID based instead of trusting the caller to provide the right context type handle.
  • Use sun.launcher.LauncherHelper to make the launcher more consistent with Java.
  • Implemented package access checks in dynamic mode.
  • Fixed reflection handling of unloadable types.
  • Added CodeGenOptions.DisableDynamicBinding to disable dynamic binding, instead of conditional compilation.
  • Bug fix. Dynamic method invocations should unwrap InvocationTargetException.
  • Bug fix. Dynamic instantiation should throw InstantiationError when trying to instantiate an abstract class.
  • Bug fix. Dynamic invokespecial (that isn't a new) should fail verification.
  • Bug fix. Dynamic method lookup should also look in base classes (for non-constructor methods).
  • Bug fix. When dynamically calling a non-constructor instance method, the receiver object should be of the correct type.
  • Added support for setPaint with custom Paint implementation.
  • Added support for dynamic (non-loadable type) annotations in statically compiled code.
  • Have ikvmc record inner classes even if they can't be loaded.
  • Have ikvmc record the outer class even if it is not loadable.
  • Bug fix. If the runtime tries to load a class from an assembly with a custom assembly class loader, the custom assembly class loader should be called. Previously it would only be called if the Java class loader had been instantiated.
  • Bug fix. We should emit miranda methods for non-abstract classes too.
  • Bug fix. Mark "missing" interface methods so that subclasses (that are compiled separately) know that the base class is incomplete.
  • Allow dynamic assemblies injected into assembly class loaders to be (debug dump) saved.
  • Changed the build system to automatically scan all sources files for copyright statements and validate that all GPL licensed files include the Classpath exception.
  • Removed resource compiler dependency from JVM.DLL build.
  • Bug fix. Custom assembly class loader was made visible to other threads while it was still being constructed.
  • Stop considering ACC_SUPER when linking invokespecial (unless compatibility switch is set). This change matches the security change in Java 7u13.
  • Improved ldc MethodType: Use nested type with class constructor to create values with statically know signatures (like ldc MethodHandle).
  • Improved ldc MethodType: Use caching for dynamicallly constructed MethodType values but retry on failure.
  • Fixed dynamic dispatch class loading exception handling to wrap non-java.lang.Error exceptions in NoClassDefFoundError.
  • Added support for dynamic ldc MethodHandle.
  • Added support for dynamically linking the boostrap method of an invokedynamic.
  • IKVM.Reflection: Expose the Name and __ModuleHash for missing external Modules.
  • IKVM.Reflection: Regression fix. The AssemblyNames returned by Module.__GetReferencedAssemblies() didn't have the ContentType set for windowruntime assembly references.
  • IKVM.Reflection: Added new public API Module.__ResolveTypeSpecCustomModifiers() to resolve the (useless) custom modifiers that can be put on TypeSpecs.
  • IKVM.Reflection: Added another overload of the public API Module.__GetSectionInfo() that returns more information about the section.
  • IKVM.Reflection: Bug fix. The OriginalFilename in the version info resource should only include the filename, not the path.

Binaries available here: ikvmbin-7.3.4790.zip

2/11/2013 1:02:04 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0]