public static bool TryGetPrimitiveElementType(TypeDefinition type, out ElementType etype) { etype = ElementType.None; if (type.Namespace != "System") return false; Row<ElementType, bool> primitive_data; if (TryGetPrimitiveData(type, out primitive_data) && primitive_data.Col1.IsPrimitive()) { etype = primitive_data.Col1; return true; } return false; }
public bool TryGetReverseNestedTypeMapping(TypeDefinition type, out uint declaring) { return ReverseNestedTypes.TryGetValue(type.token.RID, out declaring); }
static TypeDefinition BinaryRangeSearch(TypeDefinition[] types, uint rid, bool field) { int min = 0; int max = types.Length - 1; while (min <= max) { int mid = min + ((max - min) / 2); var type = types[mid]; var range = field ? type.fields_range : type.methods_range; if (rid < range.Start) max = mid - 1; else if (rid >= range.Start + range.Length) min = mid + 1; else return type; } return null; }
public bool TryGetNestedTypeMapping(TypeDefinition type, out uint[] mapping) { return NestedTypes.TryGetValue(type.token.RID, out mapping); }
public bool TryGetPropertiesRange(TypeDefinition type, out Range range) { return Properties.TryGetValue(type.token.RID, out range); }
public bool TryGetEventsRange(TypeDefinition type, out Range range) { return Events.TryGetValue(type.token.RID, out range); }
public bool TryGetInterfaceMapping(TypeDefinition type, out MetadataToken[] mapping) { return Interfaces.TryGetValue(type.token.RID, out mapping); }
public void RemovePropertiesRange(TypeDefinition type) { Properties.Remove(type.token.RID); }
public void RemoveReverseNestedTypeMapping(TypeDefinition type) { ReverseNestedTypes.Remove(type.token.RID); }
public void RemoveEventsRange(TypeDefinition type) { Events.Remove(type.token.RID); }
public void RemoveInterfaceMapping(TypeDefinition type) { Interfaces.Remove(type.token.RID); }
public void AddTypeDefinition(TypeDefinition type) { Types[type.token.RID - 1] = type; }
MethodDefinition GetMethod(TypeDefinition type, MethodReference reference) { while (type != null) { var method = GetMethod(type.Methods, reference); if (method != null) return method; if (type.BaseType == null) return null; type = Resolve(type.BaseType); } return null; }
FieldDefinition GetField(TypeDefinition type, FieldReference reference) { while (type != null) { var field = GetField(type.Fields, reference); if (field != null) return field; if (type.BaseType == null) return null; type = Resolve(type.BaseType); } return null; }
/// <summary> /// Find a similar method in the given type definition /// </summary> /// <param name="tdef">Type definition</param> /// <param name="mref">Method reference</param> /// <returns>Method definition (or null if not found)</returns> public static MethodDefinition FindMatchingMethod(TypeDefinition tdef, MethodReference mref) { return tdef.Methods.FirstOrDefault(mdef => MethodMatches(mdef, mref)); }
/// <summary> /// Find a similar field in the given type definition /// </summary> /// <param name="tdef">Type definition</param> /// <param name="fref">Field reference</param> /// <returns>Field definition (or null if not found)</returns> public static FieldDefinition FindMatchingField(TypeDefinition tdef, FieldReference fref) { return tdef.Fields.FirstOrDefault(fdef => (fdef.Name == fref.Name) && (fdef.FieldType.FullName == fref.FieldType.FullName)); }