public override void Visit(Model.Bytecode.LoadArrayElementInstruction instruction) { Mono.Cecil.Cil.Instruction res = null; if (instruction.Operation == AnalysisNet.Bytecode.LoadArrayElementOperation.Address) { if (!instruction.Array.IsVector) { Cecil.MethodReference arrayAddress = ArrayHelper.ArrayAddress(referenceGenerator.TypeReference(instruction.Array) as Cecil.ArrayType); res = processor.Create(Mono.Cecil.Cil.OpCodes.Call, arrayAddress); } else { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelema, referenceGenerator.TypeReference(instruction.Array.ElementsType)); } } else if (instruction.Operation == AnalysisNet.Bytecode.LoadArrayElementOperation.Content) { if (!instruction.Array.IsVector) { Cecil.MethodReference arrayGet = ArrayHelper.ArrayGet(referenceGenerator.TypeReference(instruction.Array) as Cecil.ArrayType); res = processor.Create(Mono.Cecil.Cil.OpCodes.Call, arrayGet); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.IntPtr)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_I); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Int8)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_I1); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Int16)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_I2); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Int32)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_I4); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Int64)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_I8); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Float32)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_R4); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Float64)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_R8); } else if (instruction.Array.ElementsType.Equals(Model.Types.PlatformType.Float64)) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_R8); } else if (instruction.Array.ElementsType.TypeKind == Model.Types.TypeKind.ReferenceType) { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_Ref); } else { res = processor.Create(Mono.Cecil.Cil.OpCodes.Ldelem_Any, referenceGenerator.TypeReference(instruction.Array.ElementsType)); } } else { throw new NotImplementedException(); } Result = new List <Mono.Cecil.Cil.Instruction>() { res }; }