ikvm-commit Mailing List for IKVM.NET (Page 7)
Brought to you by:
jfrijters
You can subscribe to this list here.
2007 |
Jan
(25) |
Feb
(22) |
Mar
(32) |
Apr
(77) |
May
(111) |
Jun
(129) |
Jul
(223) |
Aug
(109) |
Sep
(60) |
Oct
(60) |
Nov
(36) |
Dec
(55) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(23) |
Feb
(76) |
Mar
(42) |
Apr
(49) |
May
(33) |
Jun
(64) |
Jul
(19) |
Aug
(124) |
Sep
(16) |
Oct
|
Nov
(87) |
Dec
(54) |
2009 |
Jan
(53) |
Feb
(116) |
Mar
(86) |
Apr
(64) |
May
(101) |
Jun
(99) |
Jul
(105) |
Aug
(63) |
Sep
(20) |
Oct
(110) |
Nov
(102) |
Dec
(36) |
2010 |
Jan
(87) |
Feb
(67) |
Mar
(5) |
Apr
(100) |
May
(178) |
Jun
(95) |
Jul
(22) |
Aug
(85) |
Sep
(82) |
Oct
(99) |
Nov
(119) |
Dec
(132) |
2011 |
Jan
(130) |
Feb
(18) |
Mar
(114) |
Apr
(8) |
May
(21) |
Jun
(53) |
Jul
(127) |
Aug
(111) |
Sep
(29) |
Oct
(28) |
Nov
(64) |
Dec
(94) |
2012 |
Jan
(56) |
Feb
(8) |
Mar
(65) |
Apr
(48) |
May
(22) |
Jun
(52) |
Jul
(73) |
Aug
(38) |
Sep
(18) |
Oct
(59) |
Nov
(16) |
Dec
(21) |
2013 |
Jan
(83) |
Feb
(151) |
Mar
(102) |
Apr
(13) |
May
(37) |
Jun
(1) |
Jul
(7) |
Aug
(42) |
Sep
(28) |
Oct
(13) |
Nov
(5) |
Dec
(3) |
2014 |
Jan
(3) |
Feb
(39) |
Mar
(11) |
Apr
(40) |
May
(62) |
Jun
(54) |
Jul
(21) |
Aug
(3) |
Sep
|
Oct
(15) |
Nov
(26) |
Dec
(7) |
2015 |
Jan
(6) |
Feb
(12) |
Mar
(51) |
Apr
(15) |
May
(7) |
Jun
(41) |
Jul
(2) |
Aug
(8) |
Sep
(5) |
Oct
(6) |
Nov
(11) |
Dec
(1) |
2016 |
Jan
|
Feb
(1) |
Mar
|
Apr
(1) |
May
|
Jun
(2) |
Jul
(19) |
Aug
(2) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2017 |
Jan
|
Feb
(2) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Jeroen F. <jfr...@us...> - 2015-03-13 16:00:05
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv28927 Modified Files: ByteCodeHelper.cs Log Message: Bug fix. Late bound delegate signature conversion should use explicitCastArguments instead of asType to handle varargs correctly. Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** ByteCodeHelper.cs 12 Mar 2015 14:46:14 -0000 1.98 --- ByteCodeHelper.cs 13 Mar 2015 16:00:03 -0000 1.99 *************** *** 392,396 **** { java.lang.invoke.MethodHandle mh = DynamicLoadMethodHandleImpl(kind, clazz, name, sig, callerID); ! return GetDelegateForInvokeExact<T>(mh.asType(MethodHandleUtil.GetDelegateMethodType(typeof(T)))); } catch (java.lang.IncompatibleClassChangeError x) --- 392,396 ---- { java.lang.invoke.MethodHandle mh = DynamicLoadMethodHandleImpl(kind, clazz, name, sig, callerID); ! return GetDelegateForInvokeExact<T>(java.lang.invoke.MethodHandles.explicitCastArguments(mh, MethodHandleUtil.GetDelegateMethodType(typeof(T)))); } catch (java.lang.IncompatibleClassChangeError x) |
From: Jeroen F. <jfr...@us...> - 2015-03-13 12:54:28
|
Update of /cvsroot/ikvm/ikvm/runtime/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9572/openjdk Modified Files: java.lang.invoke.cs Log Message: Bug fix. MethodHandle interface method lookup should support methods inherited from base interfaces. Index: java.lang.invoke.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/openjdk/java.lang.invoke.cs,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** java.lang.invoke.cs 13 Mar 2015 12:32:30 -0000 1.42 --- java.lang.invoke.cs 13 Mar 2015 12:54:26 -0000 1.43 *************** *** 281,285 **** if (self.getReferenceKind() == MethodHandleNatives.Constants.REF_invokeInterface) { ! mw = CoreClasses.java.lang.Object.Wrapper.GetMethodWrapper(self.getName(), self.getSignature().Replace('/', '.'), false); if (mw != null && mw.IsConstructor) { --- 281,289 ---- if (self.getReferenceKind() == MethodHandleNatives.Constants.REF_invokeInterface) { ! mw = TypeWrapper.FromClass(self.getDeclaringClass()).GetInterfaceMethod(self.getName(), self.getSignature().Replace('/', '.')); ! if (mw == null) ! { ! mw = CoreClasses.java.lang.Object.Wrapper.GetMethodWrapper(self.getName(), self.getSignature().Replace('/', '.'), false); ! } if (mw != null && mw.IsConstructor) { |
From: Jeroen F. <jfr...@us...> - 2015-03-13 12:32:33
|
Update of /cvsroot/ikvm/ikvm/runtime/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv7168 Modified Files: java.lang.invoke.cs Log Message: Use static cache of Object and Exception type wrappers. Index: java.lang.invoke.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/openjdk/java.lang.invoke.cs,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** java.lang.invoke.cs 12 Mar 2015 14:46:14 -0000 1.41 --- java.lang.invoke.cs 13 Mar 2015 12:32:30 -0000 1.42 *************** *** 411,425 **** { TypeWrapper thisType = TypeWrapper.FromClass(caller); - TypeWrapper cli_System_Object = ClassLoaderWrapper.LoadClassCritical("cli.System.Object"); - TypeWrapper cli_System_Exception = ClassLoaderWrapper.LoadClassCritical("cli.System.Exception"); // HACK we may need to redirect finalize or clone from java.lang.Object/Throwable // to a more specific base type. ! if (thisType.IsAssignableTo(cli_System_Object)) { ! mw = cli_System_Object.GetMethodWrapper(mw.Name, mw.Signature, true); } ! else if (thisType.IsAssignableTo(cli_System_Exception)) { ! mw = cli_System_Exception.GetMethodWrapper(mw.Name, mw.Signature, true); } else if (thisType.IsAssignableTo(CoreClasses.java.lang.Throwable.Wrapper)) --- 411,423 ---- { TypeWrapper thisType = TypeWrapper.FromClass(caller); // HACK we may need to redirect finalize or clone from java.lang.Object/Throwable // to a more specific base type. ! if (thisType.IsAssignableTo(CoreClasses.cli.System.Object.Wrapper)) { ! mw = CoreClasses.cli.System.Object.Wrapper.GetMethodWrapper(mw.Name, mw.Signature, true); } ! else if (thisType.IsAssignableTo(CoreClasses.cli.System.Exception.Wrapper)) { ! mw = CoreClasses.cli.System.Exception.Wrapper.GetMethodWrapper(mw.Name, mw.Signature, true); } else if (thisType.IsAssignableTo(CoreClasses.java.lang.Throwable.Wrapper)) |
From: Jeroen F. <jfr...@us...> - 2015-03-12 14:46:16
|
Update of /cvsroot/ikvm/ikvm/classpath/ikvm/internal In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv8651/classpath/ikvm/internal Modified Files: CallerID.java Log Message: Changed dynamic CallerID implementation to use only immutable CallerID objects. If a CallerID is passed along downstream, it should not start returning a different caller. Also simplified host caller id. Index: CallerID.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/classpath/ikvm/internal/CallerID.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** CallerID.java 27 Feb 2014 06:57:34 -0000 1.8 --- CallerID.java 12 Mar 2015 14:46:13 -0000 1.9 *************** *** 1,4 **** /* ! Copyright (C) 2008-2014 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2008-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 33,36 **** --- 33,42 ---- private ClassLoader classLoader; + private CallerID(Class clazz, ClassLoader classLoader) + { + this.clazz = clazz; + this.classLoader = classLoader; + } + protected CallerID() { } *************** *** 38,46 **** public final Class getCallerClass() { ! if (clazz != null) { ! return clazz; } ! return getAndCacheClass(); } --- 44,52 ---- public final Class getCallerClass() { ! if (clazz == null) { ! clazz = GetClass(); } ! return clazz; } *************** *** 51,76 **** if (cl == null) { ! cl = getAndCacheClassLoader(); } return cl == ClassLoader.DUMMY ? null : cl; } - // virtual method that is overridden by DynamicCallerID in MethodHandle code - Class getAndCacheClass() - { - return clazz = GetClass(); - } - - // virtual method that is overridden by DynamicCallerID in MethodHandle code - ClassLoader getAndCacheClassLoader() - { - ClassLoader cl = classLoader = GetClassLoader(); - if (cl == null) - { - cl = classLoader = ClassLoader.DUMMY; - } - return cl; - } - @ikvm.lang.Internal public static CallerID create(cli.System.Diagnostics.StackFrame frame) --- 57,69 ---- if (cl == null) { ! cl = classLoader = GetClassLoader(); ! if (cl == null) ! { ! cl = classLoader = ClassLoader.DUMMY; ! } } return cl == ClassLoader.DUMMY ? null : cl; } @ikvm.lang.Internal public static CallerID create(cli.System.Diagnostics.StackFrame frame) *************** *** 121,124 **** --- 114,130 ---- } + // used by the runtime for EmitHostCallerID and DynamicCallerID + static CallerID create(Class clazz, ClassLoader classLoader) + { + return new CallerID(clazz, classLoader) { + Class GetClass() { + return null; + } + ClassLoader GetClassLoader() { + return null; + } + }; + } + @ikvm.lang.Internal public static CallerID getCallerID() |
From: Jeroen F. <jfr...@us...> - 2015-03-11 13:32:38
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv23194 Modified Files: ByteCodeHelper.cs Log Message: Bug fix. Late bound instanceof and castclass should behave the same as regular versions (with respect to type system holes caused by .NET types). Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -d -r1.96 -r1.97 *** ByteCodeHelper.cs 11 Mar 2015 13:18:58 -0000 1.96 --- ByteCodeHelper.cs 11 Mar 2015 13:32:36 -0000 1.97 *************** *** 283,287 **** Debug.Assert(obj != null); Profiler.Count("DynamicInstanceOf"); ! return TypeWrapper.FromClass(clazz).IsInstance(obj); #endif } --- 283,301 ---- Debug.Assert(obj != null); Profiler.Count("DynamicInstanceOf"); ! TypeWrapper tw = TypeWrapper.FromClass(clazz); ! // we have to mimick the bytecode behavior, which allows these .NET-isms to show through ! if (tw.TypeAsBaseType == typeof(Array)) ! { ! return obj is Array; ! } ! if (tw.TypeAsBaseType == typeof(string)) ! { ! return obj is string; ! } ! if (tw.TypeAsBaseType == typeof(IComparable)) ! { ! return obj is IComparable; ! } ! return tw.IsInstance(obj); #endif } |
From: Jeroen F. <jfr...@us...> - 2015-03-11 13:19:01
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv22598 Modified Files: ByteCodeHelper.cs compiler.cs Log Message: Bug fix. Handle late-bound MethodHandle.invokeExact() with unloadable type in signature. Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.95 retrieving revision 1.96 diff -C2 -d -r1.95 -r1.96 *** ByteCodeHelper.cs 11 Mar 2015 12:57:36 -0000 1.95 --- ByteCodeHelper.cs 11 Mar 2015 13:18:58 -0000 1.96 *************** *** 458,461 **** --- 458,475 ---- } + [DebuggerStepThrough] + public static java.lang.invoke.MethodHandle DynamicEraseInvokeExact(java.lang.invoke.MethodHandle mh, java.lang.invoke.MethodType expected, java.lang.invoke.MethodType target) + { + #if FIRST_PASS + return null; + #else + if (mh.type() != expected) + { + throw new java.lang.invoke.WrongMethodTypeException(); + } + return java.lang.invoke.MethodHandles.explicitCastArguments(mh, target); + #endif + } + [DebuggerStepThroughAttribute] public static int f2i(float f) Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.257 retrieving revision 1.258 diff -C2 -d -r1.257 -r1.258 *** compiler.cs 11 Mar 2015 12:57:37 -0000 1.257 --- compiler.cs 11 Mar 2015 13:18:58 -0000 1.258 *************** *** 70,73 **** --- 70,74 ---- internal static readonly MethodInfo DynamicMapException; internal static readonly MethodInfo DynamicLinkIndyCallSite; + internal static readonly MethodInfo DynamicEraseInvokeExact; internal static readonly MethodInfo VerboseCastFailure; internal static readonly MethodInfo SkipFinalizer; *************** *** 117,120 **** --- 118,122 ---- DynamicMapException = GetHelper(typeofByteCodeHelper, "DynamicMapException"); DynamicLinkIndyCallSite = GetHelper(typeofByteCodeHelper, "DynamicLinkIndyCallSite"); + DynamicEraseInvokeExact = GetHelper(typeofByteCodeHelper, "DynamicEraseInvokeExact"); VerboseCastFailure = GetHelper(typeofByteCodeHelper, "VerboseCastFailure"); SkipFinalizer = GetHelper(typeofByteCodeHelper, "SkipFinalizer"); *************** *** 3595,3606 **** private sealed class MethodHandleMethodWrapper : MethodWrapper { ! private readonly DynamicTypeWrapper.FinishContext context; private readonly TypeWrapper wrapper; private readonly ClassFile.ConstantPoolItemMI cpi; ! internal MethodHandleMethodWrapper(DynamicTypeWrapper.FinishContext context, TypeWrapper wrapper, ClassFile.ConstantPoolItemMI cpi) : base(CoreClasses.java.lang.invoke.MethodHandle.Wrapper, cpi.Name, cpi.Signature, null, cpi.GetRetType(), cpi.GetArgTypes(), Modifiers.Public, MemberFlags.None) { ! this.context = context; this.wrapper = wrapper; this.cpi = cpi; --- 3597,3608 ---- private sealed class MethodHandleMethodWrapper : MethodWrapper { ! private readonly Compiler compiler; private readonly TypeWrapper wrapper; private readonly ClassFile.ConstantPoolItemMI cpi; ! internal MethodHandleMethodWrapper(Compiler compiler, TypeWrapper wrapper, ClassFile.ConstantPoolItemMI cpi) : base(CoreClasses.java.lang.invoke.MethodHandle.Wrapper, cpi.Name, cpi.Signature, null, cpi.GetRetType(), cpi.GetArgTypes(), Modifiers.Public, MemberFlags.None) { ! this.compiler = compiler; this.wrapper = wrapper; this.cpi = cpi; *************** *** 3676,3679 **** --- 3678,3691 ---- } Type delegateType = MethodHandleUtil.CreateMethodHandleDelegateType(args, cpi.GetRetType()); + if (HasUnloadable(cpi.GetArgTypes(), cpi.GetRetType())) + { + // TODO consider sharing the cache for the same signatures + ilgen.Emit(OpCodes.Ldsflda, compiler.context.DefineDynamicMethodTypeCacheField()); + ilgen.Emit(OpCodes.Ldstr, cpi.Signature); + compiler.context.EmitCallerID(ilgen, compiler.m.IsLambdaFormCompiled); + ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicLoadMethodType); + ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.LoadMethodType.MakeGenericMethod(delegateType)); + ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicEraseInvokeExact); + } MethodInfo mi = ByteCodeHelperMethods.GetDelegateForInvokeExact.MakeGenericMethod(delegateType); ilgen.Emit(OpCodes.Call, mi); *************** *** 3728,3732 **** typeofInvokeCache = typeof(IKVM.Runtime.InvokeCache<>); #endif ! FieldBuilder fb = context.DefineMethodHandleInvokeCacheField(typeofInvokeCache.MakeGenericType(delegateType)); ilgen.Emit(OpCodes.Ldloc, temps[0]); ilgen.Emit(OpCodes.Ldsflda, fb); --- 3740,3744 ---- typeofInvokeCache = typeof(IKVM.Runtime.InvokeCache<>); #endif ! FieldBuilder fb = compiler.context.DefineMethodHandleInvokeCacheField(typeofInvokeCache.MakeGenericType(delegateType)); ilgen.Emit(OpCodes.Ldloc, temps[0]); ilgen.Emit(OpCodes.Ldsflda, fb); *************** *** 3979,3983 **** case NormalizedByteCode.__methodhandle_invoke: case NormalizedByteCode.__methodhandle_link: ! return new MethodHandleMethodWrapper(context, clazz, cpi); default: throw new InvalidOperationException(); --- 3991,3995 ---- case NormalizedByteCode.__methodhandle_invoke: case NormalizedByteCode.__methodhandle_link: ! return new MethodHandleMethodWrapper(this, clazz, cpi); default: throw new InvalidOperationException(); |
From: Jeroen F. <jfr...@us...> - 2015-03-11 12:57:39
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv21704 Modified Files: ByteCodeHelper.cs ClassFile.cs compiler.cs Log Message: Bug fix. Allow invokedynamic with unloadable type in signature. Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.94 retrieving revision 1.95 diff -C2 -d -r1.94 -r1.95 *** ByteCodeHelper.cs 6 Mar 2015 09:27:22 -0000 1.94 --- ByteCodeHelper.cs 11 Mar 2015 12:57:36 -0000 1.95 *************** *** 1010,1013 **** --- 1010,1064 ---- #endif } + + [HideFromJava] + public static void DynamicLinkIndyCallSite<T>(ref IndyCallSite<T> site, java.lang.invoke.CallSite cs, Exception x, string signature, ikvm.@internal.CallerID callerID) + where T : class // Delegate + { + #if !FIRST_PASS + // when a CallSite is first constructed, it doesn't call MethodHandleNatives.setCallSiteTargetNormal(), + // so we have to check if we need to initialize it here (i.e. attach an IndyCallSite<T> to it) + if (cs != null) + { + if (cs.ics == null) + { + Java_java_lang_invoke_MethodHandleNatives.InitializeCallSite(cs); + } + lock (cs.ics) + { + cs.ics.SetTarget(cs.target); + } + } + java.lang.invoke.MethodType typeCache = null; + IndyCallSite<T> ics; + if (x != null || cs == null || cs.type() != DynamicLoadMethodType(ref typeCache, signature, callerID)) + { + x = MapException<Exception>(x ?? (cs == null + ? (Exception)new java.lang.ClassCastException("bootstrap method failed to produce a CallSite") + : new java.lang.invoke.WrongMethodTypeException()), MapFlags.None); + java.lang.invoke.MethodType type = LoadMethodType<T>(); + java.lang.invoke.MethodHandle exc = x is java.lang.BootstrapMethodError + ? java.lang.invoke.MethodHandles.constant(typeof(java.lang.BootstrapMethodError), x) + : java.lang.invoke.MethodHandles.publicLookup().findConstructor(typeof(java.lang.BootstrapMethodError), java.lang.invoke.MethodType.methodType(typeof(void), typeof(string), typeof(Exception))) + .bindTo("call site initialization exception").bindTo(x); + ics = new IndyCallSite<T>(); + ((IIndyCallSite)ics).SetTarget( + java.lang.invoke.MethodHandles.dropArguments( + java.lang.invoke.MethodHandles.foldArguments( + java.lang.invoke.MethodHandles.throwException(type.returnType(), typeof(java.lang.BootstrapMethodError)), + exc), + 0, type.parameterArray())); + } + else + { + ics = new IndyCallSite<T>(); + ((IIndyCallSite)ics).SetTarget(cs.dynamicInvoker().asType(LoadMethodType<T>())); + } + IndyCallSite<T> curr = site; + if (curr.IsBootstrap) + { + Interlocked.CompareExchange(ref site, ics, curr); + } + #endif + } } Index: ClassFile.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ClassFile.cs,v retrieving revision 1.131 retrieving revision 1.132 diff -C2 -d -r1.131 -r1.132 *** ClassFile.cs 24 Jun 2014 12:06:44 -0000 1.131 --- ClassFile.cs 11 Mar 2015 12:57:37 -0000 1.132 *************** *** 1,4 **** /* ! Copyright (C) 2002-2014 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2002-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 2278,2281 **** --- 2278,2286 ---- } + internal string Signature + { + get { return descriptor; } + } + internal ushort BootstrapMethod { Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.256 retrieving revision 1.257 diff -C2 -d -r1.256 -r1.257 *** compiler.cs 6 Mar 2015 09:27:22 -0000 1.256 --- compiler.cs 11 Mar 2015 12:57:37 -0000 1.257 *************** *** 69,72 **** --- 69,73 ---- internal static readonly MethodInfo DynamicBinderMemberLookup; internal static readonly MethodInfo DynamicMapException; + internal static readonly MethodInfo DynamicLinkIndyCallSite; internal static readonly MethodInfo VerboseCastFailure; internal static readonly MethodInfo SkipFinalizer; *************** *** 115,118 **** --- 116,120 ---- DynamicBinderMemberLookup = GetHelper(typeofByteCodeHelper, "DynamicBinderMemberLookup"); DynamicMapException = GetHelper(typeofByteCodeHelper, "DynamicMapException"); + DynamicLinkIndyCallSite = GetHelper(typeofByteCodeHelper, "DynamicLinkIndyCallSite"); VerboseCastFailure = GetHelper(typeofByteCodeHelper, "VerboseCastFailure"); SkipFinalizer = GetHelper(typeofByteCodeHelper, "SkipFinalizer"); *************** *** 3004,3008 **** ilgen.Emit(OpCodes.Ldloc, cs); ilgen.Emit(OpCodes.Ldloc, ex); ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.LinkIndyCallSite.MakeGenericMethod(delegateType)); ilgen.Emit(OpCodes.Ldsfld, fb); ilgen.Emit(OpCodes.Call, methodGetTarget); --- 3006,3019 ---- ilgen.Emit(OpCodes.Ldloc, cs); ilgen.Emit(OpCodes.Ldloc, ex); ! if (HasUnloadable(cpi.GetArgTypes(), cpi.GetRetType())) ! { ! ilgen.Emit(OpCodes.Ldstr, cpi.Signature); ! compiler.context.EmitCallerID(ilgen, compiler.m.IsLambdaFormHidden); ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicLinkIndyCallSite.MakeGenericMethod(delegateType)); ! } ! else ! { ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.LinkIndyCallSite.MakeGenericMethod(delegateType)); ! } ilgen.Emit(OpCodes.Ldsfld, fb); ilgen.Emit(OpCodes.Call, methodGetTarget); *************** *** 3089,3093 **** ilgen.Emit(OpCodes.Ldstr, cpi.Name); parameters[1].EmitConvStackTypeToSignatureType(ilgen, CoreClasses.java.lang.String.Wrapper); ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.LoadMethodType.MakeGenericMethod(MethodHandleUtil.CreateDelegateTypeForLoadConstant(cpi.GetArgTypes(), cpi.GetRetType()))); parameters[2].EmitConvStackTypeToSignatureType(ilgen, CoreClasses.java.lang.invoke.MethodType.Wrapper); for (int i = 0; i < fixedArgs; i++) --- 3100,3115 ---- ilgen.Emit(OpCodes.Ldstr, cpi.Name); parameters[1].EmitConvStackTypeToSignatureType(ilgen, CoreClasses.java.lang.String.Wrapper); ! if (HasUnloadable(cpi.GetArgTypes(), cpi.GetRetType())) ! { ! // the cache is useless since we only run once, so we use a local ! ilgen.Emit(OpCodes.Ldloca, ilgen.DeclareLocal(CoreClasses.java.lang.invoke.MethodType.Wrapper.TypeAsSignatureType)); ! ilgen.Emit(OpCodes.Ldstr, cpi.Signature); ! compiler.context.EmitCallerID(ilgen, compiler.m.IsLambdaFormCompiled); ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicLoadMethodType); ! } ! else ! { ! ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.LoadMethodType.MakeGenericMethod(MethodHandleUtil.CreateDelegateTypeForLoadConstant(cpi.GetArgTypes(), cpi.GetRetType()))); ! } parameters[2].EmitConvStackTypeToSignatureType(ilgen, CoreClasses.java.lang.invoke.MethodType.Wrapper); for (int i = 0; i < fixedArgs; i++) |
From: Jeroen F. <jfr...@us...> - 2015-03-11 12:38:35
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv20725 Modified Files: DotNetTypeWrapper.cs Log Message: Bug fix. Allow value type default constructor to be invoked using MethodHandle. Index: DotNetTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DotNetTypeWrapper.cs,v retrieving revision 1.78 retrieving revision 1.79 diff -C2 -d -r1.78 -r1.79 *** DotNetTypeWrapper.cs 4 Jun 2014 06:45:15 -0000 1.78 --- DotNetTypeWrapper.cs 11 Mar 2015 12:38:33 -0000 1.79 *************** *** 1,4 **** /* ! Copyright (C) 2002-2013 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2002-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 2007,2010 **** --- 2007,2015 ---- ilgen.Emit(OpCodes.Box, DeclaringType.TypeAsTBD); } + + internal override void EmitCall(CodeEmitter ilgen) + { + ilgen.Emit(OpCodes.Pop); + } #endif // EMITTERS |
From: Jeroen F. <jfr...@us...> - 2015-03-11 11:25:21
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv18263 Modified Files: DynamicTypeWrapper.cs Log Message: Bug fix. If a miranda method signature differs from its base class miranda method (due to unloadable types), we need to emit an override stub. Index: DynamicTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DynamicTypeWrapper.cs,v retrieving revision 1.264 retrieving revision 1.265 diff -C2 -d -r1.264 -r1.265 *** DynamicTypeWrapper.cs 11 Mar 2015 08:39:03 -0000 1.264 --- DynamicTypeWrapper.cs 11 Mar 2015 11:25:19 -0000 1.265 *************** *** 2916,2920 **** MirandaMethodWrapper mmw = (MirandaMethodWrapper)methods[index]; MethodAttributes attr = MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.CheckAccessOnOverride; ! MethodWrapper baseMiranda; if (wrapper.BaseTypeWrapper == null || (baseMiranda = wrapper.BaseTypeWrapper.GetMethodWrapper(mw.Name, mw.Signature, true)) == null || !baseMiranda.IsMirandaMethod) { --- 2916,2921 ---- MirandaMethodWrapper mmw = (MirandaMethodWrapper)methods[index]; MethodAttributes attr = MethodAttributes.HideBySig | MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.CheckAccessOnOverride; ! MethodWrapper baseMiranda = null; ! bool baseMirandaOverrideStub = false; if (wrapper.BaseTypeWrapper == null || (baseMiranda = wrapper.BaseTypeWrapper.GetMethodWrapper(mw.Name, mw.Signature, true)) == null || !baseMiranda.IsMirandaMethod) { *************** *** 2922,2925 **** --- 2923,2935 ---- attr |= MethodAttributes.NewSlot; } + else + { + baseMiranda.Link(); + if (CheckRequireOverrideStub(methods[index], baseMiranda)) + { + baseMirandaOverrideStub = true; + attr |= MethodAttributes.NewSlot; + } + } if (wrapper.IsInterface || (wrapper.IsAbstract && mmw.BaseMethod.IsAbstract && mmw.Error == null)) { *************** *** 2928,2931 **** --- 2938,2945 ---- MethodBuilder mb = methods[index].GetDefineMethodHelper().DefineMethod(wrapper, typeBuilder, methods[index].Name, attr); AttributeHelper.HideFromReflection(mb); + if (baseMirandaOverrideStub) + { + wrapper.GenerateOverrideStub(typeBuilder, baseMiranda, mb, methods[index]); + } if ((!wrapper.IsAbstract && mmw.BaseMethod.IsAbstract) || (!wrapper.IsInterface && mmw.Error != null)) { |
From: Jeroen F. <jfr...@us...> - 2015-03-11 08:44:47
|
Update of /cvsroot/ikvm/ikvm/openjdk/java/lang/reflect In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv13701/openjdk/java/lang/reflect Removed Files: ReflectHelper.java Log Message: Bug fix. MethodHandle and JNI should be able to set static final fields. --- ReflectHelper.java DELETED --- |
From: Jeroen F. <jfr...@us...> - 2015-03-11 08:44:46
|
Update of /cvsroot/ikvm/ikvm/openjdk/sun/misc In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv13701/openjdk/sun/misc Modified Files: Unsafe.java Log Message: Bug fix. MethodHandle and JNI should be able to set static final fields. Index: Unsafe.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/sun/misc/Unsafe.java,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** Unsafe.java 5 Mar 2015 13:25:30 -0000 1.33 --- Unsafe.java 11 Mar 2015 08:44:44 -0000 1.34 *************** *** 33,37 **** import java.lang.reflect.Field; import java.lang.reflect.Modifier; - import java.lang.reflect.ReflectHelper; import java.security.ProtectionDomain; import java.util.ArrayList; --- 33,36 ---- *************** *** 58,65 **** } // this is the intrinsified version of objectFieldOffset(XXX.class.getDeclaredField("xxx")) public long objectFieldOffset(Class c, String field) { ! return allocateUnsafeFieldId(ReflectHelper.createFieldAndMakeAccessible(c, field)); } --- 57,67 ---- } + private static native Field createFieldAndMakeAccessible(Class c, String field); + private static native Field copyFieldAndMakeAccessible(Field field); + // this is the intrinsified version of objectFieldOffset(XXX.class.getDeclaredField("xxx")) public long objectFieldOffset(Class c, String field) { ! return allocateUnsafeFieldId(createFieldAndMakeAccessible(c, field)); } *************** *** 82,86 **** static int allocateUnsafeFieldId(Field original) { ! Field copy = ReflectHelper.copyFieldAndMakeAccessible(original); synchronized(fields) { --- 84,88 ---- static int allocateUnsafeFieldId(Field original) { ! Field copy = copyFieldAndMakeAccessible(original); synchronized(fields) { |
From: Jeroen F. <jfr...@us...> - 2015-03-11 08:39:06
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv13583 Modified Files: DynamicTypeWrapper.cs Log Message: Fix regression introduced with previous change. Now that we use GenerateOverrideStub() for more stub types, it should include the base type name in the method name to avoid duplicate method names. Index: DynamicTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DynamicTypeWrapper.cs,v retrieving revision 1.263 retrieving revision 1.264 diff -C2 -d -r1.263 -r1.264 *** DynamicTypeWrapper.cs 9 Mar 2015 13:54:34 -0000 1.263 --- DynamicTypeWrapper.cs 11 Mar 2015 08:39:03 -0000 1.264 *************** *** 6540,6544 **** Debug.Assert(!baseMethod.HasCallerID); ! MethodBuilder overrideStub = baseMethod.GetDefineMethodHelper().DefineMethod(this, typeBuilder, "__<overridestub>" + baseMethod.Name, MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final); typeBuilder.DefineMethodOverride(overrideStub, (MethodInfo)baseMethod.GetMethod()); --- 6540,6544 ---- Debug.Assert(!baseMethod.HasCallerID); ! MethodBuilder overrideStub = baseMethod.GetDefineMethodHelper().DefineMethod(this, typeBuilder, "__<overridestub>" + baseMethod.DeclaringType.Name + "::" + baseMethod.Name, MethodAttributes.Private | MethodAttributes.Virtual | MethodAttributes.NewSlot | MethodAttributes.Final); typeBuilder.DefineMethodOverride(overrideStub, (MethodInfo)baseMethod.GetMethod()); |
From: Jeroen F. <jfr...@us...> - 2015-03-09 13:54:36
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv11379 Modified Files: DynamicTypeWrapper.cs Log Message: Bug fix. Handle unloadable types in interface stub signatures. Index: DynamicTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DynamicTypeWrapper.cs,v retrieving revision 1.262 retrieving revision 1.263 diff -C2 -d -r1.262 -r1.263 *** DynamicTypeWrapper.cs 9 Mar 2015 13:35:34 -0000 1.262 --- DynamicTypeWrapper.cs 9 Mar 2015 13:54:34 -0000 1.263 *************** *** 5533,5539 **** // check the loader constraints bool error = false; ! if (mce.ReturnType != ifmethod.ReturnType) { - // TODO handle unloadable error = true; } --- 5533,5538 ---- // check the loader constraints bool error = false; ! if (mce.ReturnType != ifmethod.ReturnType && !mce.ReturnType.IsUnloadable && !ifmethod.ReturnType.IsUnloadable) { error = true; } *************** *** 5542,5548 **** for (int i = 0; i < mceparams.Length; i++) { ! if (mceparams[i] != ifparams[i]) { - // TODO handle unloadable error = true; break; --- 5541,5546 ---- for (int i = 0; i < mceparams.Length; i++) { ! if (mceparams[i] != ifparams[i] && !mceparams[i].IsUnloadable && !ifparams[i].IsUnloadable) { error = true; break; |
From: Jeroen F. <jfr...@us...> - 2015-03-09 13:35:36
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv10874 Modified Files: DynamicTypeWrapper.cs Log Message: Merged another if branch. Index: DynamicTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DynamicTypeWrapper.cs,v retrieving revision 1.261 retrieving revision 1.262 diff -C2 -d -r1.261 -r1.262 *** DynamicTypeWrapper.cs 9 Mar 2015 12:35:40 -0000 1.261 --- DynamicTypeWrapper.cs 9 Mar 2015 13:35:34 -0000 1.262 *************** *** 5574,5599 **** wrapper.SetHasIncompleteInterfaceImplementation(); } ! else if (mce.GetMethod() == null || mce.RealName != ifmethod.RealName || mce.IsInternal || !ReflectUtil.IsSameAssembly(mce.DeclaringType.TypeAsTBD, typeBuilder)) { // NOTE methods inherited from base classes in a different assembly do *not* automatically implement // interface methods, so we have to generate a stub here that doesn't do anything but call the base // implementation ! MethodBuilder mb = DefineInterfaceStubMethod(mangledName, ifmethod); ! typeBuilder.DefineMethodOverride(mb, (MethodInfo)ifmethod.GetMethod()); ! AttributeHelper.HideFromJava(mb); ! CodeEmitter ilGenerator = CodeEmitter.Create(mb); ! ilGenerator.Emit(OpCodes.Ldarg_0); ! int argc = mce.GetParameters().Length; ! for (int n = 0; n < argc; n++) ! { ! ilGenerator.EmitLdarg(n + 1); ! } ! mce.EmitCallvirt(ilGenerator); ! ilGenerator.Emit(OpCodes.Ret); ! ilGenerator.DoEmit(); ! } ! else if (CheckRequireOverrideStub(mce, ifmethod)) ! { ! wrapper.GenerateOverrideStub(typeBuilder, ifmethod, (MethodInfo)mce.GetMethod(), mce); } else if (baseClassInterface && mce.DeclaringType == wrapper) --- 5574,5583 ---- wrapper.SetHasIncompleteInterfaceImplementation(); } ! else if (mce.GetMethod() == null || mce.RealName != ifmethod.RealName || mce.IsInternal || !ReflectUtil.IsSameAssembly(mce.DeclaringType.TypeAsTBD, typeBuilder) || CheckRequireOverrideStub(mce, ifmethod)) { // NOTE methods inherited from base classes in a different assembly do *not* automatically implement // interface methods, so we have to generate a stub here that doesn't do anything but call the base // implementation ! wrapper.GenerateOverrideStub(typeBuilder, ifmethod, null, mce); } else if (baseClassInterface && mce.DeclaringType == wrapper) *************** *** 6575,6579 **** } } ! ilgen.Emit(OpCodes.Callvirt, target); if (targetRet != stubret) { --- 6559,6570 ---- } } ! if (target != null) ! { ! ilgen.Emit(OpCodes.Callvirt, target); ! } ! else ! { ! targetMethod.EmitCallvirt(ilgen); ! } if (targetRet != stubret) { |
From: Jeroen F. <jfr...@us...> - 2015-03-09 12:35:43
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv9151 Modified Files: DynamicTypeWrapper.cs Log Message: Merged to if branches that contained the same code. Index: DynamicTypeWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/DynamicTypeWrapper.cs,v retrieving revision 1.260 retrieving revision 1.261 diff -C2 -d -r1.260 -r1.261 *** DynamicTypeWrapper.cs 16 Feb 2015 11:09:00 -0000 1.260 --- DynamicTypeWrapper.cs 9 Mar 2015 12:35:40 -0000 1.261 *************** *** 5574,5594 **** wrapper.SetHasIncompleteInterfaceImplementation(); } ! else if (mce.GetMethod() == null || mce.RealName != ifmethod.RealName || mce.IsInternal) ! { ! MethodBuilder mb = DefineInterfaceStubMethod(mangledName, ifmethod); ! AttributeHelper.HideFromJava(mb); ! CodeEmitter ilGenerator = CodeEmitter.Create(mb); ! ilGenerator.Emit(OpCodes.Ldarg_0); ! int argc = mce.GetParameters().Length; ! for (int n = 0; n < argc; n++) ! { ! ilGenerator.EmitLdarg(n + 1); ! } ! mce.EmitCallvirt(ilGenerator); ! ilGenerator.Emit(OpCodes.Ret); ! ilGenerator.DoEmit(); ! typeBuilder.DefineMethodOverride(mb, (MethodInfo)ifmethod.GetMethod()); ! } ! else if (!ReflectUtil.IsSameAssembly(mce.DeclaringType.TypeAsTBD, typeBuilder)) { // NOTE methods inherited from base classes in a different assembly do *not* automatically implement --- 5574,5578 ---- wrapper.SetHasIncompleteInterfaceImplementation(); } ! else if (mce.GetMethod() == null || mce.RealName != ifmethod.RealName || mce.IsInternal || !ReflectUtil.IsSameAssembly(mce.DeclaringType.TypeAsTBD, typeBuilder)) { // NOTE methods inherited from base classes in a different assembly do *not* automatically implement |
From: Jeroen F. <jfr...@us...> - 2015-03-06 13:26:21
|
Update of /cvsroot/ikvm/ikvm/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv26629/openjdk Modified Files: map.xml Log Message: Bug fix. Allow MethodHandle for cli.System.Object methods to work on (Java compatble) arrays to handle a hole in the type system. Index: map.xml =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/map.xml,v retrieving revision 1.108 retrieving revision 1.109 diff -C2 -d -r1.108 -r1.109 *** map.xml 6 Mar 2015 12:32:46 -0000 1.108 --- map.xml 6 Mar 2015 13:26:19 -0000 1.109 *************** *** 1831,1834 **** --- 1831,1843 ---- </method> </class> + <class name="sun.invoke.util.ValueConversions"> + <method name="castReference" sig="(Ljava.lang.Class;Ljava.lang.Object;)Ljava.lang.Object;"> + <replace-method-call class="java.lang.Class" name="isInstance" sig="(Ljava.lang.Object;)Z"> + <code> + <call type="Java_sun_invoke_util_ValueConversions" name="Class_isInstance" sig="(Ljava.lang.Class;Ljava.lang.Object;)Z" /> + </code> + </replace-method-call> + </method> + </class> <class name="sun.invoke.util.VerifyAccess"> <method name="isTypeVisible" sig="(Ljava.lang.Class;Ljava.lang.Class;)Z"> |
From: Jeroen F. <jfr...@us...> - 2015-03-06 12:32:48
|
Update of /cvsroot/ikvm/ikvm/runtime/openjdk In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv24928/runtime/openjdk Modified Files: misc.cs Log Message: Bug fix. Bootstrap classes that use .NET types in their signatures should be accessible via MethodHandles. Index: misc.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/openjdk/misc.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** misc.cs 19 May 2014 12:43:43 -0000 1.4 --- misc.cs 6 Mar 2015 12:32:46 -0000 1.5 *************** *** 1,4 **** /* ! Copyright (C) 2007-2013 Jeroen Frijters Copyright (C) 2009 Volker Berlin (i-net software) --- 1,4 ---- /* ! Copyright (C) 2007-2015 Jeroen Frijters Copyright (C) 2009 Volker Berlin (i-net software) *************** *** 198,201 **** --- 198,216 ---- } + static class Java_sun_invoke_util_VerifyAccess + { + // called from map.xml as a replacement for Class.getClassLoader() in sun.invoke.util.VerifyAccess.isTypeVisible() + public static java.lang.ClassLoader Class_getClassLoader(java.lang.Class clazz) + { + TypeWrapper tw = TypeWrapper.FromClass(clazz); + if (ClassLoaderWrapper.GetBootstrapClassLoader().LoadClassByDottedNameFast(tw.Name) == tw) + { + // if a class is visible from the bootstrap class loader, we have to return null to allow the visibility check to succeed + return null; + } + return tw.GetClassLoader().GetJavaClassLoader(); + } + } + static class Java_sun_net_PortConfig { |
From: Jeroen F. <jfr...@us...> - 2015-03-06 09:27:24
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv18524 Modified Files: ByteCodeHelper.cs compiler.cs Log Message: Bug fix. When catching a dynamically loaded .NET exception type the exception should not be remapped. Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.93 retrieving revision 1.94 diff -C2 -d -r1.93 -r1.94 *** ByteCodeHelper.cs 6 Mar 2015 08:07:40 -0000 1.93 --- ByteCodeHelper.cs 6 Mar 2015 09:27:22 -0000 1.94 *************** *** 1,4 **** /* ! Copyright (C) 2002-2014 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2002-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 872,875 **** --- 872,892 ---- } + [HideFromJava] + public static Exception DynamicMapException(Exception x, MapFlags mode, java.lang.Class exceptionClass) + { + #if FIRST_PASS + return null; + #else + TypeWrapper exceptionTypeWrapper = TypeWrapper.FromClass(exceptionClass); + mode &= ~MapFlags.NoRemapping; + if (exceptionTypeWrapper.IsSubTypeOf(CoreClasses.cli.System.Exception.Wrapper)) + { + mode |= MapFlags.NoRemapping; + } + Type exceptionType = exceptionTypeWrapper == CoreClasses.java.lang.Throwable.Wrapper ? typeof(System.Exception) : exceptionTypeWrapper.TypeAsBaseType; + return (Exception)ByteCodeHelperMethods.mapException.MakeGenericMethod(exceptionType).Invoke(null, new object[] { x, mode }); + #endif + } + public static T GetDelegateForInvokeExact<T>(global::java.lang.invoke.MethodHandle h) where T : class Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.255 retrieving revision 1.256 diff -C2 -d -r1.255 -r1.256 *** compiler.cs 6 Mar 2015 09:21:33 -0000 1.255 --- compiler.cs 6 Mar 2015 09:27:22 -0000 1.256 *************** *** 68,71 **** --- 68,72 ---- internal static readonly MethodInfo DynamicLoadMethodHandle; internal static readonly MethodInfo DynamicBinderMemberLookup; + internal static readonly MethodInfo DynamicMapException; internal static readonly MethodInfo VerboseCastFailure; internal static readonly MethodInfo SkipFinalizer; *************** *** 113,116 **** --- 114,118 ---- DynamicLoadMethodHandle = GetHelper(typeofByteCodeHelper, "DynamicLoadMethodHandle"); DynamicBinderMemberLookup = GetHelper(typeofByteCodeHelper, "DynamicBinderMemberLookup"); + DynamicMapException = GetHelper(typeofByteCodeHelper, "DynamicMapException"); VerboseCastFailure = GetHelper(typeofByteCodeHelper, "VerboseCastFailure"); SkipFinalizer = GetHelper(typeofByteCodeHelper, "SkipFinalizer"); *************** *** 1154,1166 **** { ilGenerator.EmitLdc_I4(mapFlags | (remap ? 0 : 1)); - ilGenerator.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(excType)); - if(!unusedException) - { - ilGenerator.Emit(OpCodes.Dup); - } if(exceptionTypeWrapper.IsUnloadable) { Profiler.Count("EmitDynamicExceptionHandler"); ! EmitDynamicInstanceOf(exceptionTypeWrapper); } CodeEmitterLabel leave = ilGenerator.DefineLabel(); --- 1156,1172 ---- { ilGenerator.EmitLdc_I4(mapFlags | (remap ? 0 : 1)); if(exceptionTypeWrapper.IsUnloadable) { Profiler.Count("EmitDynamicExceptionHandler"); ! EmitDynamicClassLiteral(exceptionTypeWrapper); ! ilGenerator.Emit(OpCodes.Call, ByteCodeHelperMethods.DynamicMapException); ! } ! else ! { ! ilGenerator.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(excType)); ! } ! if(!unusedException) ! { ! ilGenerator.Emit(OpCodes.Dup); } CodeEmitterLabel leave = ilGenerator.DefineLabel(); |
From: Jeroen F. <jfr...@us...> - 2015-03-06 09:21:35
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv18263 Modified Files: CoreClasses.cs compiler.cs Log Message: Clean up. Moved special TypeWrapper caching to CoreClasses. Index: CoreClasses.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/CoreClasses.cs,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** CoreClasses.cs 14 Feb 2013 16:09:04 -0000 1.8 --- CoreClasses.cs 6 Mar 2015 09:21:33 -0000 1.9 *************** *** 1,4 **** /* ! Copyright (C) 2004, 2005, 2006, 2008 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2004-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 27,30 **** --- 27,52 ---- internal static class CoreClasses { + internal static class cli + { + internal static class System + { + internal static class Object + { + // NOTE we have a dummy static initializer, to make sure we don't get the beforeFieldInit attribute + // (we don't want the classes to be loaded prematurely, because they might not be available then) + static Object() { } + internal static readonly TypeWrapper Wrapper = DotNetTypeWrapper.GetWrapperFromDotNetType(Types.Object); + } + + internal static class Exception + { + // NOTE we have a dummy static initializer, to make sure we don't get the beforeFieldInit attribute + // (we don't want the classes to be loaded prematurely, because they might not be available then) + static Exception() { } + internal static readonly TypeWrapper Wrapper = DotNetTypeWrapper.GetWrapperFromDotNetType(Types.Exception); + } + } + } + internal static class ikvm { Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.254 retrieving revision 1.255 diff -C2 -d -r1.254 -r1.255 *** compiler.cs 6 Mar 2015 07:52:18 -0000 1.254 --- compiler.cs 6 Mar 2015 09:21:33 -0000 1.255 *************** *** 1,4 **** /* ! Copyright (C) 2002-2014 Jeroen Frijters This software is provided 'as-is', without any express or implied --- 1,4 ---- /* ! Copyright (C) 2002-2015 Jeroen Frijters This software is provided 'as-is', without any express or implied *************** *** 268,276 **** internal static readonly MethodWrapper getClassFromTypeHandle; internal static readonly MethodWrapper getClassFromTypeHandle2; - private static readonly TypeWrapper java_lang_Object; - private static readonly TypeWrapper java_lang_Class; - private static readonly TypeWrapper java_lang_Throwable; - private static readonly TypeWrapper cli_System_Object; - private static readonly TypeWrapper cli_System_Exception; private readonly DynamicTypeWrapper.FinishContext context; private readonly DynamicTypeWrapper clazz; --- 268,271 ---- *************** *** 299,318 **** getTypeMethod = Types.Object.GetMethod("GetType", BindingFlags.Public | BindingFlags.Instance, null, Type.EmptyTypes, null); keepAliveMethod = JVM.Import(typeof(System.GC)).GetMethod("KeepAlive", BindingFlags.Static | BindingFlags.Public, null, new Type[] { Types.Object }, null); - java_lang_Object = CoreClasses.java.lang.Object.Wrapper; - java_lang_Throwable = CoreClasses.java.lang.Throwable.Wrapper; - cli_System_Object = DotNetTypeWrapper.GetWrapperFromDotNetType(Types.Object); - cli_System_Exception = DotNetTypeWrapper.GetWrapperFromDotNetType(Types.Exception); - java_lang_Class = CoreClasses.java.lang.Class.Wrapper; // HACK we need to special case core compilation, because the __<map> methods are HideFromJava ! if(java_lang_Throwable.TypeAsBaseType is TypeBuilder) { MethodWrapper mw; ! mw = java_lang_Throwable.GetMethodWrapper("__<suppressFillInStackTrace>", "()V", false); mw.Link(); suppressFillInStackTraceMethod = (MethodInfo)mw.GetMethod(); ! mw = java_lang_Throwable.GetMethodWrapper("__<unmap>", "(Ljava.lang.Throwable;)Ljava.lang.Throwable;", false); mw.Link(); unmapExceptionMethod = (MethodInfo)mw.GetMethod(); ! mw = java_lang_Throwable.GetMethodWrapper("__<fixate>", "(Ljava.lang.Throwable;)Ljava.lang.Throwable;", false); mw.Link(); fixateExceptionMethod = (MethodInfo)mw.GetMethod(); --- 294,308 ---- getTypeMethod = Types.Object.GetMethod("GetType", BindingFlags.Public | BindingFlags.Instance, null, Type.EmptyTypes, null); keepAliveMethod = JVM.Import(typeof(System.GC)).GetMethod("KeepAlive", BindingFlags.Static | BindingFlags.Public, null, new Type[] { Types.Object }, null); // HACK we need to special case core compilation, because the __<map> methods are HideFromJava ! if(CoreClasses.java.lang.Throwable.Wrapper.TypeAsBaseType is TypeBuilder) { MethodWrapper mw; ! mw = CoreClasses.java.lang.Throwable.Wrapper.GetMethodWrapper("__<suppressFillInStackTrace>", "()V", false); mw.Link(); suppressFillInStackTraceMethod = (MethodInfo)mw.GetMethod(); ! mw = CoreClasses.java.lang.Throwable.Wrapper.GetMethodWrapper("__<unmap>", "(Ljava.lang.Throwable;)Ljava.lang.Throwable;", false); mw.Link(); unmapExceptionMethod = (MethodInfo)mw.GetMethod(); ! mw = CoreClasses.java.lang.Throwable.Wrapper.GetMethodWrapper("__<fixate>", "(Ljava.lang.Throwable;)Ljava.lang.Throwable;", false); mw.Link(); fixateExceptionMethod = (MethodInfo)mw.GetMethod(); *************** *** 320,326 **** else { ! suppressFillInStackTraceMethod = java_lang_Throwable.TypeAsBaseType.GetMethod("__<suppressFillInStackTrace>", Type.EmptyTypes); ! unmapExceptionMethod = java_lang_Throwable.TypeAsBaseType.GetMethod("__<unmap>", new Type[] { Types.Exception }); ! fixateExceptionMethod = java_lang_Throwable.TypeAsBaseType.GetMethod("__<fixate>", new Type[] { Types.Exception }); } getClassFromTypeHandle = ClassLoaderWrapper.LoadClassCritical("ikvm.runtime.Util").GetMethodWrapper("getClassFromTypeHandle", "(Lcli.System.RuntimeTypeHandle;)Ljava.lang.Class;", false); --- 310,316 ---- else { ! suppressFillInStackTraceMethod = CoreClasses.java.lang.Throwable.Wrapper.TypeAsBaseType.GetMethod("__<suppressFillInStackTrace>", Type.EmptyTypes); ! unmapExceptionMethod = CoreClasses.java.lang.Throwable.Wrapper.TypeAsBaseType.GetMethod("__<unmap>", new Type[] { Types.Exception }); ! fixateExceptionMethod = CoreClasses.java.lang.Throwable.Wrapper.TypeAsBaseType.GetMethod("__<fixate>", new Type[] { Types.Exception }); } getClassFromTypeHandle = ClassLoaderWrapper.LoadClassCritical("ikvm.runtime.Util").GetMethodWrapper("getClassFromTypeHandle", "(Lcli.System.RuntimeTypeHandle;)Ljava.lang.Class;", false); *************** *** 343,347 **** { MethodWrapper finalize = clazz.GetMethodWrapper(StringConstants.FINALIZE, StringConstants.SIG_VOID, true); ! keepAlive = finalize != null && finalize.DeclaringType != java_lang_Object && finalize.DeclaringType != cli_System_Object && finalize.DeclaringType != java_lang_Throwable && finalize.DeclaringType != cli_System_Exception; } #if STATIC_COMPILER --- 333,337 ---- { MethodWrapper finalize = clazz.GetMethodWrapper(StringConstants.FINALIZE, StringConstants.SIG_VOID, true); ! keepAlive = finalize != null && finalize.DeclaringType != CoreClasses.java.lang.Object.Wrapper && finalize.DeclaringType != CoreClasses.cli.System.Object.Wrapper && finalize.DeclaringType != CoreClasses.java.lang.Throwable.Wrapper && finalize.DeclaringType != CoreClasses.cli.System.Exception.Wrapper; } #if STATIC_COMPILER *************** *** 1122,1126 **** if(exc.catch_type == 0) { ! exceptionTypeWrapper = java_lang_Throwable; remap = true; } --- 1112,1116 ---- if(exc.catch_type == 0) { ! exceptionTypeWrapper = CoreClasses.java.lang.Throwable.Wrapper; remap = true; } *************** *** 1128,1132 **** { exceptionTypeWrapper = classFile.GetConstantPoolClassType(exc.catch_type); ! remap = exceptionTypeWrapper.IsUnloadable || !exceptionTypeWrapper.IsSubTypeOf(cli_System_Exception); } Type excType = exceptionTypeWrapper.TypeAsExceptionType; --- 1118,1122 ---- { exceptionTypeWrapper = classFile.GetConstantPoolClassType(exc.catch_type); ! remap = exceptionTypeWrapper.IsUnloadable || !exceptionTypeWrapper.IsSubTypeOf(CoreClasses.cli.System.Exception.Wrapper); } Type excType = exceptionTypeWrapper.TypeAsExceptionType; *************** *** 1156,1160 **** ilGenerator.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(excType)); } ! else if(exceptionTypeWrapper == java_lang_Throwable) { ilGenerator.EmitLdc_I4(mapFlags); --- 1146,1150 ---- ilGenerator.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(excType)); } ! else if(exceptionTypeWrapper == CoreClasses.java.lang.Throwable.Wrapper) { ilGenerator.EmitLdc_I4(mapFlags); *************** *** 1498,1516 **** // HACK this code is duplicated in java.lang.invoke.cs ! if(method.IsProtected && (method.DeclaringType == java_lang_Object || method.DeclaringType == java_lang_Throwable)) { // HACK we may need to redirect finalize or clone from java.lang.Object/Throwable // to a more specific base type. ! if(thisType.IsAssignableTo(cli_System_Object)) { ! method = cli_System_Object.GetMethodWrapper(method.Name, method.Signature, true); } ! else if(thisType.IsAssignableTo(cli_System_Exception)) { ! method = cli_System_Exception.GetMethodWrapper(method.Name, method.Signature, true); } ! else if(thisType.IsAssignableTo(java_lang_Throwable)) { ! method = java_lang_Throwable.GetMethodWrapper(method.Name, method.Signature, true); } } --- 1488,1506 ---- // HACK this code is duplicated in java.lang.invoke.cs ! if(method.IsProtected && (method.DeclaringType == CoreClasses.java.lang.Object.Wrapper || method.DeclaringType == CoreClasses.java.lang.Throwable.Wrapper)) { // HACK we may need to redirect finalize or clone from java.lang.Object/Throwable // to a more specific base type. ! if(thisType.IsAssignableTo(CoreClasses.cli.System.Object.Wrapper)) { ! method = CoreClasses.cli.System.Object.Wrapper.GetMethodWrapper(method.Name, method.Signature, true); } ! else if(thisType.IsAssignableTo(CoreClasses.cli.System.Exception.Wrapper)) { ! method = CoreClasses.cli.System.Exception.Wrapper.GetMethodWrapper(method.Name, method.Signature, true); } ! else if(thisType.IsAssignableTo(CoreClasses.java.lang.Throwable.Wrapper)) { ! method = CoreClasses.java.lang.Throwable.Wrapper.GetMethodWrapper(method.Name, method.Signature, true); } } *************** *** 1574,1578 **** } } ! if(!thisType.IsUnloadable && thisType.IsSubTypeOf(java_lang_Throwable)) { // if the next instruction is an athrow and the exception type --- 1564,1568 ---- } } ! if(!thisType.IsUnloadable && thisType.IsSubTypeOf(CoreClasses.java.lang.Throwable.Wrapper)) { // if the next instruction is an athrow and the exception type *************** *** 1586,1590 **** if(code[i + 1].NormalizedOpCode == NormalizedByteCode.__athrow) { ! if(thisType.GetMethodWrapper("fillInStackTrace", "()Ljava.lang.Throwable;", true).DeclaringType == java_lang_Throwable) { ilGenerator.Emit(OpCodes.Call, suppressFillInStackTraceMethod); --- 1576,1580 ---- if(code[i + 1].NormalizedOpCode == NormalizedByteCode.__athrow) { ! if(thisType.GetMethodWrapper("fillInStackTrace", "()Ljava.lang.Throwable;", true).DeclaringType == CoreClasses.java.lang.Throwable.Wrapper) { ilGenerator.Emit(OpCodes.Call, suppressFillInStackTraceMethod); *************** *** 1597,1601 **** } method.EmitNewobj(ilGenerator); ! if(!thisType.IsUnloadable && thisType.IsSubTypeOf(cli_System_Exception)) { // we call Throwable.__<fixate>() to disable remapping the exception --- 1587,1591 ---- } method.EmitNewobj(ilGenerator); ! if(!thisType.IsUnloadable && thisType.IsSubTypeOf(CoreClasses.cli.System.Exception.Wrapper)) { // we call Throwable.__<fixate>() to disable remapping the exception |
From: Jeroen F. <jfr...@us...> - 2015-03-06 08:07:42
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv15231 Modified Files: ByteCodeHelper.cs Log Message: Bug fix. Dynamically created ghost arrays should get tagged. Index: ByteCodeHelper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ByteCodeHelper.cs,v retrieving revision 1.92 retrieving revision 1.93 diff -C2 -d -r1.92 -r1.93 *** ByteCodeHelper.cs 29 Apr 2014 13:08:42 -0000 1.92 --- ByteCodeHelper.cs 6 Mar 2015 08:07:40 -0000 1.93 *************** *** 155,159 **** Profiler.Count("DynamicMultianewarray"); TypeWrapper wrapper = TypeWrapper.FromClass(clazz); ! return multianewarray(wrapper.TypeAsArrayType.TypeHandle, lengths); #endif } --- 155,164 ---- Profiler.Count("DynamicMultianewarray"); TypeWrapper wrapper = TypeWrapper.FromClass(clazz); ! object obj = multianewarray(wrapper.TypeAsArrayType.TypeHandle, lengths); ! if (wrapper.IsGhostArray) ! { ! GhostTag.SetTag(obj, wrapper); ! } ! return obj; #endif } *************** *** 171,175 **** } TypeWrapper wrapper = TypeWrapper.FromClass(clazz); ! return Array.CreateInstance(wrapper.TypeAsArrayType, length); #endif } --- 176,185 ---- } TypeWrapper wrapper = TypeWrapper.FromClass(clazz); ! Array obj = Array.CreateInstance(wrapper.TypeAsArrayType, length); ! if (wrapper.IsGhost || wrapper.IsGhostArray) ! { ! GhostTag.SetTag(obj, wrapper.MakeArrayType(1)); ! } ! return obj; #endif } |
From: Jeroen F. <jfr...@us...> - 2015-03-06 07:52:20
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv14833 Modified Files: compiler.cs Log Message: Bug fix. MethodHandle should be the declaring type of the special MethodHandle methods. Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.253 retrieving revision 1.254 diff -C2 -d -r1.253 -r1.254 *** compiler.cs 16 Feb 2015 11:29:26 -0000 1.253 --- compiler.cs 6 Mar 2015 07:52:18 -0000 1.254 *************** *** 3582,3586 **** internal MethodHandleMethodWrapper(DynamicTypeWrapper.FinishContext context, TypeWrapper wrapper, ClassFile.ConstantPoolItemMI cpi) ! : base(wrapper, cpi.Name, cpi.Signature, null, cpi.GetRetType(), cpi.GetArgTypes(), Modifiers.Public, MemberFlags.None) { this.context = context; --- 3582,3586 ---- internal MethodHandleMethodWrapper(DynamicTypeWrapper.FinishContext context, TypeWrapper wrapper, ClassFile.ConstantPoolItemMI cpi) ! : base(CoreClasses.java.lang.invoke.MethodHandle.Wrapper, cpi.Name, cpi.Signature, null, cpi.GetRetType(), cpi.GetArgTypes(), Modifiers.Public, MemberFlags.None) { this.context = context; |
From: Jeroen F. <jfr...@us...> - 2015-03-05 14:01:49
|
Update of /cvsroot/ikvm/ikvm/awt In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv6647 Modified Files: graphics.cs Log Message: Bug fix. Return background color (instead of foreground color). Fix by Daniel Zatonyi <dza...@ch...>. Index: graphics.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/awt/graphics.cs,v retrieving revision 1.75 retrieving revision 1.76 diff -C2 -d -r1.75 -r1.76 *** graphics.cs 17 Nov 2014 16:46:31 -0000 1.75 --- graphics.cs 5 Mar 2015 14:01:47 -0000 1.76 *************** *** 1964,1968 **** public override java.awt.Color getBackground() { ! return bgcolor == Color.Empty ? null : new java.awt.Color(color.ToArgb(), true); } --- 1964,1968 ---- public override java.awt.Color getBackground() { ! return bgcolor == Color.Empty ? null : new java.awt.Color(bgcolor.ToArgb(), true); } |
From: Jeroen F. <jfr...@us...> - 2015-03-05 13:25:32
|
Update of /cvsroot/ikvm/ikvm/openjdk/sun/misc In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv2322 Modified Files: Unsafe.java Log Message: Added Unsafe.reallocateMemory() and fixed allocateMemory() to do nothing if zero length is allocated. Index: Unsafe.java =================================================================== RCS file: /cvsroot/ikvm/ikvm/openjdk/sun/misc/Unsafe.java,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** Unsafe.java 14 Nov 2014 15:27:44 -0000 1.32 --- Unsafe.java 5 Mar 2015 13:25:30 -0000 1.33 *************** *** 851,854 **** --- 851,858 ---- public long allocateMemory(long bytes) { + if (bytes == 0) + { + return 0; + } try { *************** *** 864,867 **** --- 868,891 ---- @SecurityPermissionAttribute.Annotation(value = SecurityAction.__Enum.LinkDemand, UnmanagedCode = true) @cli.System.Security.SecurityCriticalAttribute.Annotation + public long reallocateMemory(long address, long bytes) + { + if (bytes == 0) + { + freeMemory(address); + return 0; + } + try + { + if (false) throw new cli.System.OutOfMemoryException(); + return Marshal.ReAllocHGlobal(IntPtr.op_Explicit(address), IntPtr.op_Explicit(bytes)).ToInt64(); + } + catch (cli.System.OutOfMemoryException x) + { + throw new OutOfMemoryError(x.get_Message()); + } + } + + @SecurityPermissionAttribute.Annotation(value = SecurityAction.__Enum.LinkDemand, UnmanagedCode = true) + @cli.System.Security.SecurityCriticalAttribute.Annotation public void freeMemory(long address) { |
From: Jeroen F. <jfr...@us...> - 2015-03-05 12:44:03
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv29777 Modified Files: LambdaMetafactory.cs Log Message: Bug fix. Don't crash if java.lang.invoke.LambdaMetafactory class is not loadable. Index: LambdaMetafactory.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/LambdaMetafactory.cs,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** LambdaMetafactory.cs 11 Nov 2014 14:35:31 -0000 1.10 --- LambdaMetafactory.cs 5 Mar 2015 12:44:01 -0000 1.11 *************** *** 930,933 **** --- 930,934 ---- && classFile.GetConstantPoolConstantType(bsm.GetArgument(2)) == ClassFile.ConstantType.MethodType && (mh = classFile.GetConstantPoolConstantMethodHandle(bsm.BootstrapMethodIndex)).Kind == ClassFile.RefKind.invokeStatic + && mh.Member != null && IsLambdaMetafactory(mh.Member); } *************** *** 956,959 **** --- 957,961 ---- return bsm.ArgumentCount >= 4 && (mh = classFile.GetConstantPoolConstantMethodHandle(bsm.BootstrapMethodIndex)).Kind == ClassFile.RefKind.invokeStatic + && mh.Member != null && IsLambdaAltMetafactory(mh.Member) && classFile.GetConstantPoolConstantType(bsm.GetArgument(0)) == ClassFile.ConstantType.MethodType |
From: Jeroen F. <jfr...@us...> - 2015-03-05 12:43:16
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv29699 Modified Files: ClassLoaderWrapper.cs JavaException.cs Log Message: The message of a VM generated java.lang.NoClassDefFoundError exception should be the class name, not the message of the underlying exception. Index: JavaException.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/JavaException.cs,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** JavaException.cs 24 Jun 2014 10:32:16 -0000 1.18 --- JavaException.cs 5 Mar 2015 12:43:14 -0000 1.19 *************** *** 61,66 **** sealed class ClassLoadingException : RetargetableJavaException { ! internal ClassLoadingException(Exception x) ! : base(x.Message, x) { } --- 61,66 ---- sealed class ClassLoadingException : RetargetableJavaException { ! internal ClassLoadingException(Exception x, string className) ! : base(className, x) { } *************** *** 71,75 **** if (!(InnerException is java.lang.Error) && !(InnerException is java.lang.RuntimeException)) { ! return new java.lang.NoClassDefFoundError(InnerException.Message).initCause(InnerException); } return InnerException; --- 71,75 ---- if (!(InnerException is java.lang.Error) && !(InnerException is java.lang.RuntimeException)) { ! return new java.lang.NoClassDefFoundError(Message.Replace('.', '/')).initCause(InnerException); } return InnerException; Index: ClassLoaderWrapper.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/ClassLoaderWrapper.cs,v retrieving revision 1.231 retrieving revision 1.232 diff -C2 -d -r1.231 -r1.232 *** ClassLoaderWrapper.cs 10 Jul 2014 08:35:32 -0000 1.231 --- ClassLoaderWrapper.cs 5 Mar 2015 12:43:14 -0000 1.232 *************** *** 795,799 **** if(throwClassNotFoundException) { ! throw new ClassLoadingException(ikvm.runtime.Util.mapException(x)); } return null; --- 795,799 ---- if(throwClassNotFoundException) { ! throw new ClassLoadingException(ikvm.runtime.Util.mapException(x), name); } return null; *************** *** 801,805 **** catch(Exception x) { ! throw new ClassLoadingException(ikvm.runtime.Util.mapException(x)); } finally --- 801,805 ---- catch(Exception x) { ! throw new ClassLoadingException(ikvm.runtime.Util.mapException(x), name); } finally |