bool HandleLoads(string opcodeStr, Instruction instruction, MetaMidRepresentationOperationFactory operationFactory, ClosureEntities closureEntities) { if (opcodeStr == "ldelem.ref") { operationFactory.LoadReferenceInArray(); return(true); } if (opcodeStr == "ldelem.i" || opcodeStr == "ldelem.i1" || opcodeStr == "ldelem.i2" || opcodeStr == "ldelem.i4" || opcodeStr == "ldelem.i8" || opcodeStr == "ldelem.i1" || opcodeStr == "ldelem.r4" || opcodeStr == "ldelem.r8" || opcodeStr == "ldelem.u1" || opcodeStr == "ldelem.u2" || opcodeStr == "ldelem.u2" || opcodeStr == "ldelem.u4" || opcodeStr == "ldelem.u8" ) { operationFactory.LoadReferenceInArray(); return(true); } if (opcodeStr == "ldelem") { operationFactory.LoadReferenceInArrayTyped(closureEntities); return(true); } if (opcodeStr == "ldelem.any") { operationFactory.LoadReferenceInArrayTyped(closureEntities); return(true); } if (opcodeStr == "ldc.i4.s" || opcodeStr == "ldc.i4") { operationFactory.PushInt4(Convert.ToInt32(instruction.Operand)); return(true); } if (opcodeStr == "ldc.i8.s" || opcodeStr == "ldc.i8") { operationFactory.PushInt8(Convert.ToInt64(instruction.Operand)); return(true); } if (opcodeStr.StartsWith("ldc.i4.")) { var pushedIntValue = opcodeStr.Remove(0, "ldc.i4.".Length).ToInt(); operationFactory.PushInt4(pushedIntValue); return(true); } if (instruction.OpCode == OpCodes.Ldloc || instruction.OpCode == OpCodes.Ldloc_S) { operationFactory.CopyLocalVariableIntoStack(GetVariableIndex(instruction)); return(true); } if (opcodeStr.StartsWith("ldloc.")) { var pushedIntValue = opcodeStr.Remove(0, "ldloc.".Length).ToInt(); operationFactory.CopyLocalVariableIntoStack(pushedIntValue); return(true); } if (instruction.OpCode == OpCodes.Ldstr) { operationFactory.PushString((string)instruction.Operand); return(true); } if (instruction.OpCode == OpCodes.Ldc_R8) { operationFactory.PushDouble((double)instruction.Operand); return(true); } if (instruction.OpCode == OpCodes.Ldc_R4) { operationFactory.PushFloat((float)instruction.Operand); return(true); } if (instruction.OpCode == OpCodes.Ldarga || instruction.OpCode == OpCodes.Ldarga_S) { operationFactory.LoadArgument(GetParameterIndex(instruction), _methodInterpreter.AnalyzeProperties); return(true); } if (instruction.OpCode == OpCodes.Ldarg_S) { operationFactory.LoadArgument(GetParameterIndex(instruction), _methodInterpreter.AnalyzeProperties); return(true); } if (opcodeStr.StartsWith("ldarg.")) { var pushedIntValue = opcodeStr.Remove(0, "ldarg.".Length).ToInt(); operationFactory.LoadArgument(pushedIntValue, _methodInterpreter.AnalyzeProperties); return(true); } if (opcodeStr.StartsWith("ldobj")) { operationFactory.LoadObject((Type)instruction.Operand); return(true); } if (instruction.OpCode == OpCodes.Ldfld) { var operand = (FieldInfo)instruction.Operand; operationFactory.LoadField(operand.Name, closureEntities); return(true); } if (instruction.OpCode == OpCodes.Ldlen) { operationFactory.LoadLength(); return(true); } if (instruction.OpCode == OpCodes.Ldnull) { operationFactory.LoadNull(); return(true); } return(false); }