private AnalysisNet.IInstruction ProcessStoreField(Cecil.Cil.Instruction op) { Cecil.FieldReference cciField = op.Operand as Cecil.FieldReference;//op.Operand as Cci.IFieldReference; AnalysisNet.Types.FieldReference ourField = typeExtractor.ExtractField(cciField, op.OpCode.Code == Cecil.Cil.Code.Stsfld); AnalysisNetBytecode.StoreFieldInstruction instruction = new AnalysisNetBytecode.StoreFieldInstruction((uint)op.Offset, ourField); return(instruction); }
private AnalysisNet.IInstruction ProcessLoadField(Cecil.Cil.Instruction op) { AnalysisNetBytecode.LoadFieldOperation operation = OperationHelper.ToLoadFieldOperation(op.OpCode.Code); Cecil.FieldReference cciField = op.Operand as Cecil.FieldReference; bool isStatic = op.OpCode.Code == Cecil.Cil.OpCodes.Ldsfld.Code || op.OpCode.Code == Cecil.Cil.OpCodes.Ldsflda.Code; AnalysisNet.Types.FieldReference ourField = typeExtractor.ExtractField(cciField, isStatic); AnalysisNetBytecode.LoadFieldInstruction instruction = new AnalysisNetBytecode.LoadFieldInstruction((uint)op.Offset, operation, ourField); return(instruction); }
public AnalysisNet.Types.FieldReference ExtractField(Cecil.FieldReference field, bool isStatic) { (Cecil.FieldReference, bool)key = ValueTuple.Create(field, isStatic); return(performanceCache.GetOrCreate(key, (cacheEntry) => { AnalysisNet.Types.FieldReference analysisNetField = new AnalysisNet.Types.FieldReference(field.Name, ExtractType(field.FieldType)) { ContainingType = (AnalysisNet.Types.IBasicType)ExtractType(field.DeclaringType), IsStatic = isStatic }; return analysisNetField; })); }