28#if IMPORTER || EXPORTER
34using System.Reflection;
35using System.Reflection.Emit;
41 sealed partial class RuntimeManagedJavaType
44 sealed class ByRefJavaMethod : RuntimeSmartJavaMethod
48 readonly
bool[] byrefs;
65 internal ByRefJavaMethod(
Type[] args,
bool[] byrefs, RuntimeJavaType declaringType,
string name,
string sig,
MethodBase method, RuntimeJavaType returnType, RuntimeJavaType[] parameterTypes,
Modifiers modifiers,
bool hideFromReflection) :
75 protected override void CallImpl(CodeEmitter ilgen)
77 ConvertByRefArgs(ilgen);
78 ilgen.Emit(OpCodes.Call, GetMethod());
81 protected override void CallvirtImpl(CodeEmitter ilgen)
83 ConvertByRefArgs(ilgen);
84 ilgen.Emit(OpCodes.Callvirt, GetMethod());
87 protected override void NewobjImpl(CodeEmitter ilgen)
89 ConvertByRefArgs(ilgen);
90 ilgen.Emit(OpCodes.Newobj, GetMethod());
93 void ConvertByRefArgs(CodeEmitter ilgen)
95 var locals =
new CodeEmitterLocal[args.Length];
96 for (
int i = args.Length - 1; i >= 0; i--)
100 type = RuntimeArrayJavaType.MakeArrayType(type.GetElementType(), 1);
102 locals[i] = ilgen.DeclareLocal(type);
103 ilgen.Emit(OpCodes.Stloc, locals[i]);
106 for (
int i = 0; i < args.Length; i++)
108 ilgen.Emit(OpCodes.Ldloc, locals[i]);
111 ilgen.Emit(OpCodes.Ldc_I4_0);
112 ilgen.Emit(OpCodes.Ldelema, args[i].GetElementType());
IKVM.Reflection.Type Type
IKVM.Reflection.MethodBase MethodBase
readonly Modifiers modifiers
MemberFlags
Describes various options applied to a member.
@ HideFromReflection
Member should be hidden from Java reflection.