IField GetField(object token) { if (token is Mono.Cecil.FieldDefinition) { Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition; var type = GetType(field.DeclaringType.FullName, field.Module); return(type.GetField(field.Name)); } else if (token is Mono.Cecil.FieldReference) { Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference; var type = GetType(field.DeclaringType.FullName, field.Module); return(type.GetField(field.Name)); } //else if(token is CLRSharp_Instance) // { //CLRSharp_Instance inst = token as CLRSharp_Instance; //return inst.Fields[field.Name]; // } else { throw new NotImplementedException("不可处理的token" + token.GetType().ToString()); } }
public IField GetField(object token) { IField __field = null; if (fieldCache.TryGetValue(token.GetHashCode(), out __field)) { return(__field); } if (token is Mono.Cecil.FieldDefinition) { Mono.Cecil.FieldDefinition field = token as Mono.Cecil.FieldDefinition; var type = GetType(field.DeclaringType.FullName); __field = type.GetField(field.Name); } else if (token is Mono.Cecil.FieldReference) { Mono.Cecil.FieldReference field = token as Mono.Cecil.FieldReference; var type = GetType(field.DeclaringType.FullName); __field = type.GetField(field.Name); } //else if(token is CLRSharp_Instance) // { //CLRSharp_Instance inst = token as CLRSharp_Instance; //return inst.Fields[field.Name]; // } else { throw new NotImplementedException("不可处理的token" + token.GetType().ToString()); } fieldCache[token.GetHashCode()] = __field; return(__field); }
public IField Resolve(Mono.Cecil.FieldReference fieldReference) { IField field = context.Resolve(fieldReference); if (field != null) { field = (IField)field.Specialize(substitution); } return(field); }
public TypeInformation(Mono.Cecil.TypeReference parentType, Mono.Cecil.FieldDefinition fieldInfo, TypeAttribute inheritedAttribute, string parent = null) { FieldInfo = fieldInfo; Type = fieldInfo.FieldType; Fields = new List <TypeInformation>(); Attribute = inheritedAttribute; ParseAttribute(CecilExtensions.GetGhostFieldAttribute(parentType, fieldInfo)); Parent = string.IsNullOrEmpty(parent) ? "" : parent; }
bool MatchInitializeArrayCall(ILInstruction instruction, out IMethod method, out ILVariable array, out Mono.Cecil.FieldReference field) { method = null; array = null; field = null; Call call = instruction as Call; if (call == null || call.Arguments.Count != 2) { return(false); } method = call.Method; if (method.DeclaringTypeDefinition == null || method.DeclaringTypeDefinition.FullName != "System.Runtime.CompilerServices.RuntimeHelpers") { return(false); } if (method.Name != "InitializeArray") { return(false); } if (!call.Arguments[0].MatchLdLoc(out array)) { return(false); } IMember member; if (!call.Arguments[1].MatchLdMemberToken(out member)) { return(false); } field = context.TypeSystem.GetCecil(member) as Mono.Cecil.FieldReference; if (field == null) { return(false); } return(true); }
public static void StoreStaticField(Mono.Cecil.FieldReference field) { CurrentEmitContext.Emit(CreateInstruction.StoreStaticField(field)); }
public static void LoadStaticFieldAdress(Mono.Cecil.FieldReference field) { CurrentEmitContext.Emit(CreateInstruction.LoadStaticFieldAdress(field)); }
public static Instruction StoreStaticField(Mono.Cecil.FieldReference field) { return(Instruction.Create(OpCodes.Stsfld, field)); }
public static Instruction LoadStaticFieldAdress(Mono.Cecil.FieldReference field) { return(Instruction.Create(OpCodes.Ldsflda, field)); }
public static Instruction LoadField(Mono.Cecil.FieldReference field) { return(Instruction.Create(OpCodes.Ldfld, field)); }