public TypeX GetTypeBySig(TypeSig tySig) { tySig = tySig.RemoveModifiers(); StringBuilder sb = new StringBuilder(); Helper.TypeSigName(sb, tySig, true); return(GetTypeByName(sb.ToString())); }
string GetNameByType(TypeSig type) { type = type.RemoveModifiers(); GenericInstSig git = type as GenericInstSig; if (git != null && git.GenericType.FullName == "System.Nullable`1" && git.GenericArguments.Count == 1) { type = ((GenericInstSig)type).GenericArguments[0]; } string name; if (type.IsArray || type.IsSZArray) { name = "array"; } else if (type.IsPointer || type.IsByRef) { name = "ptr"; } else if (type.TypeName.EndsWith("Exception", StringComparison.Ordinal)) { name = "ex"; } else if (!typeNameToVariableNameDict.TryGetValue(type.FullName, out name)) { if (type is IGenericParam) { name = ((IGenericParam)type).GenericParameter.Name; } else if (type is GenericVar) { name = context.CurrentMethod.DeclaringType.GenericParameters[(int)type.ToGenericVar().Number].Name; } else if (type is GenericMVar) { name = context.CurrentMethod.GenericParameters[(int)type.ToGenericVar().Number].Name; } else { name = type.TypeName; } // remove the 'I' for interfaces if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2])) { name = name.Substring(1); } name = CleanUpVariableName(name); } return(name); }
string GetNameByType(TypeSig type) { type = type.RemoveModifiers(); GenericInstSig git = type as GenericInstSig; if (git != null && git.GenericType != null && git.GenericArguments.Count == 1 && git.GenericType.TypeDefOrRef.Compare(systemString, nullableString)) { type = ((GenericInstSig)type).GenericArguments[0]; } string name; if (type == null) { return(string.Empty); } if (type.IsSingleOrMultiDimensionalArray) { name = "array"; } else if (type.IsPointer || type.IsByRef) { name = "ptr"; } else { stringBuilder.Clear(); if (FullNameCreator.NameSB(type, false, stringBuilder).EndsWith("Exception")) { name = "ex"; } else { stringBuilder.Clear(); if (!typeNameToVariableNameDict.TryGetValue(FullNameCreator.FullName(type, false, null, null, null, stringBuilder), out name)) { stringBuilder.Clear(); name = FullNameCreator.Name(type, false, stringBuilder); // remove the 'I' for interfaces if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2])) { name = name.Substring(1); } name = CleanUpVariableName(name); } } } return(name); }
string GetNameByType(TypeSig type) { type = type.RemoveModifiers(); GenericInstSig git = type as GenericInstSig; if (git != null && git.GenericType != null && git.GenericType.FullName == "System.Nullable`1" && git.GenericArguments.Count == 1) { type = ((GenericInstSig)type).GenericArguments[0]; } string name; if (type == null) { return(string.Empty); } if (type.IsSingleOrMultiDimensionalArray) { name = "array"; } else if (type.IsPointer || type.IsByRef) { name = "ptr"; } else if (type.TypeName.EndsWith("Exception", StringComparison.Ordinal)) { name = "ex"; } else if (!typeNameToVariableNameDict.TryGetValue(type.FullName, out name)) { name = type.TypeName; // remove the 'I' for interfaces if (name.Length >= 3 && name[0] == 'I' && char.IsUpper(name[1]) && char.IsLower(name[2])) { name = name.Substring(1); } name = CleanUpVariableName(name); } return(name); }
void WriteFieldOrPropType(TypeSig type) { type = type.RemoveModifiers(); if (type == null) { helper.Error("Field/property type is null"); return; } if (!recursionCounter.Increment()) { helper.Error("Infinite recursion"); return; } ITypeDefOrRef tdr; switch (type.ElementType) { case ElementType.Boolean: writer.Write((byte)SerializationType.Boolean); break; case ElementType.Char: writer.Write((byte)SerializationType.Char); break; case ElementType.I1: writer.Write((byte)SerializationType.I1); break; case ElementType.U1: writer.Write((byte)SerializationType.U1); break; case ElementType.I2: writer.Write((byte)SerializationType.I2); break; case ElementType.U2: writer.Write((byte)SerializationType.U2); break; case ElementType.I4: writer.Write((byte)SerializationType.I4); break; case ElementType.U4: writer.Write((byte)SerializationType.U4); break; case ElementType.I8: writer.Write((byte)SerializationType.I8); break; case ElementType.U8: writer.Write((byte)SerializationType.U8); break; case ElementType.R4: writer.Write((byte)SerializationType.R4); break; case ElementType.R8: writer.Write((byte)SerializationType.R8); break; case ElementType.String: writer.Write((byte)SerializationType.String); break; case ElementType.Object: writer.Write((byte)SerializationType.TaggedObject); break; case ElementType.SZArray: writer.Write((byte)SerializationType.SZArray); WriteFieldOrPropType(type.Next); break; case ElementType.Class: tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; if (CheckCorLibType(type, "Type")) writer.Write((byte)SerializationType.Type); else if (tdr is TypeRef) { // Could be an enum TypeRef that couldn't be resolved, so the code // assumed it's a class and created a ClassSig. writer.Write((byte)SerializationType.Enum); WriteType(tdr); } else goto default; break; case ElementType.ValueType: tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; var enumType = GetEnumTypeDef(type); // If TypeRef => assume it's an enum that couldn't be resolved if (enumType != null || tdr is TypeRef) { writer.Write((byte)SerializationType.Enum); WriteType(tdr); } else { helper.Error("Custom attribute type doesn't seem to be an enum."); writer.Write((byte)SerializationType.Enum); WriteType(tdr); } break; default: helper.Error("Invalid type"); writer.Write((byte)0xFF); break; } recursionCounter.Decrement(); }
static bool VerifyType(TypeSig type, ElementType etype) { type = type.RemoveModifiers(); // Assume it's an enum if it's a ValueType return type != null && (etype == type.ElementType || type.ElementType == ElementType.ValueType); }
TypeSig FixTypeSig(TypeSig type) { return SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers(); }
static bool VerifyType(TypeSig type, ElementType etype) { type = type.RemoveModifiers(); // Assume it's an enum if it's a ValueType return(type is not null && (etype == type.ElementType || type.ElementType == ElementType.ValueType)); }
TypeSig FixTypeSig(TypeSig type) => SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers();
void WriteFieldOrPropType(TypeSig type) { type = type.RemoveModifiers(); if (type == null) { helper.Error("Field/property type is null"); return; } if (!recursionCounter.Increment()) { helper.Error("Infinite recursion"); return; } ITypeDefOrRef tdr; switch (type.ElementType) { case ElementType.Boolean: writer.Write((byte)SerializationType.Boolean); break; case ElementType.Char: writer.Write((byte)SerializationType.Char); break; case ElementType.I1: writer.Write((byte)SerializationType.I1); break; case ElementType.U1: writer.Write((byte)SerializationType.U1); break; case ElementType.I2: writer.Write((byte)SerializationType.I2); break; case ElementType.U2: writer.Write((byte)SerializationType.U2); break; case ElementType.I4: writer.Write((byte)SerializationType.I4); break; case ElementType.U4: writer.Write((byte)SerializationType.U4); break; case ElementType.I8: writer.Write((byte)SerializationType.I8); break; case ElementType.U8: writer.Write((byte)SerializationType.U8); break; case ElementType.R4: writer.Write((byte)SerializationType.R4); break; case ElementType.R8: writer.Write((byte)SerializationType.R8); break; case ElementType.String: writer.Write((byte)SerializationType.String); break; case ElementType.Object: writer.Write((byte)SerializationType.TaggedObject); break; case ElementType.SZArray: writer.Write((byte)SerializationType.SZArray); WriteFieldOrPropType(type.Next); break; case ElementType.Class: tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; if (CheckCorLibType(type, "Type")) { writer.Write((byte)SerializationType.Type); } else if (tdr is TypeRef) { // Could be an enum TypeRef that couldn't be resolved, so the code // assumed it's a class and created a ClassSig. writer.Write((byte)SerializationType.Enum); WriteType(tdr); } else { goto default; } break; case ElementType.ValueType: tdr = ((TypeDefOrRefSig)type).TypeDefOrRef; var enumType = GetEnumTypeDef(type); // If TypeRef => assume it's an enum that couldn't be resolved if (enumType != null || tdr is TypeRef) { writer.Write((byte)SerializationType.Enum); WriteType(tdr); } else { helper.Error("Custom attribute type doesn't seem to be an enum."); writer.Write((byte)SerializationType.Enum); WriteType(tdr); } break; default: helper.Error("Invalid type"); writer.Write((byte)0xFF); break; } recursionCounter.Decrement(); }
TypeSig FixTypeSig(TypeSig type) { return(SubstituteGenericParameter(type.RemoveModifiers()).RemoveModifiers()); }