[Ikvm-commit] ikvm/runtime compiler.cs,1.249,1.250
Brought to you by:
jfrijters
|
From: Jeroen F. <jfr...@us...> - 2014-07-01 15:04:08
|
Update of /cvsroot/ikvm/ikvm/runtime In directory sfp-cvs-1.v30.ch3.sourceforge.com:/tmp/cvs-serv32577 Modified Files: compiler.cs Log Message: Bug fix. If an invokedynamic bootstrap argument conversion fails, the exception should not be wrapped in BootstrapMethodError. Index: compiler.cs =================================================================== RCS file: /cvsroot/ikvm/ikvm/runtime/compiler.cs,v retrieving revision 1.249 retrieving revision 1.250 diff -C2 -d -r1.249 -r1.250 *** compiler.cs 1 Jul 2014 15:00:54 -0000 1.249 --- compiler.cs 1 Jul 2014 15:04:06 -0000 1.250 *************** *** 3089,3093 **** for (int i = 0; i < fixedArgs; i++) { ! EmitExtraArg(compiler, ilgen, bsm, i, parameters[i + 3]); } if (varArgs >= 0) --- 3089,3093 ---- for (int i = 0; i < fixedArgs; i++) { ! EmitExtraArg(compiler, ilgen, bsm, i, parameters[i + 3], ok); } if (varArgs >= 0) *************** *** 3100,3104 **** ilgen.Emit(OpCodes.Dup); ilgen.EmitLdc_I4(i); ! EmitExtraArg(compiler, ilgen, bsm, i + fixedArgs, elemType); ilgen.Emit(OpCodes.Stelem_Ref); } --- 3100,3104 ---- ilgen.Emit(OpCodes.Dup); ilgen.EmitLdc_I4(i); ! EmitExtraArg(compiler, ilgen, bsm, i + fixedArgs, elemType, ok); ilgen.Emit(OpCodes.Stelem_Ref); } *************** *** 3117,3121 **** } ! private static void EmitExtraArg(Compiler compiler, CodeEmitter ilgen, ClassFile.BootstrapMethod bsm, int index, TypeWrapper targetType) { int constant = bsm.GetArgument(index); --- 3117,3121 ---- } ! private static void EmitExtraArg(Compiler compiler, CodeEmitter ilgen, ClassFile.BootstrapMethod bsm, int index, TypeWrapper targetType, CodeEmitterLocal wrapException) { int constant = bsm.GetArgument(index); *************** *** 3153,3156 **** --- 3153,3158 ---- if (constType != targetType) { + ilgen.EmitLdc_I4(1); + ilgen.Emit(OpCodes.Stloc, wrapException); if (constType.IsPrimitive) { *************** *** 3171,3174 **** --- 3173,3178 ---- } targetType.EmitConvStackTypeToSignatureType(ilgen, targetType); + ilgen.EmitLdc_I4(0); + ilgen.Emit(OpCodes.Stloc, wrapException); } } |