private string GetCLanguageTypeName( TypeReference type, TypeNameFlags flags = TypeNameFlags.Strict) { var prefix = ((flags == TypeNameFlags.DereferencedWithStructPrefix) || (flags == TypeNameFlags.ForcePointerWithStructPrefix)) ? "struct " : string.Empty; var postfix = ((flags == TypeNameFlags.ForcePointer) || (flags == TypeNameFlags.ForcePointerWithStructPrefix)) ? "*" : string.Empty; if (predefinedCTypeNames.TryGetValue(type.FullName, out var cTypeName)) { // Predefined type name must not applies prefix. return(cTypeName + postfix); } if (type.IsByReference || type.IsPointer) { var dereferencedType = type .GetElementType(); var dereferencedTypeName = this.GetCLanguageTypeName( dereferencedType); if ((flags == TypeNameFlags.Dereferenced) || (flags == TypeNameFlags.DereferencedWithStructPrefix)) { return(prefix + dereferencedTypeName); } else { return(prefix + dereferencedTypeName + "*"); } } var fullName = type .GetFullMemberName() .ManglingSymbolName(); if (!type.IsValueType) { if ((flags == TypeNameFlags.Dereferenced) || (flags == TypeNameFlags.DereferencedWithStructPrefix)) { return(prefix + fullName); } else { return(prefix + fullName + "*"); } } else { return(prefix + fullName + postfix); } }
string IExtractContext.GetCLanguageTypeName(TypeReference type, TypeNameFlags flags) { return(this.GetCLanguageTypeName(type, flags)); }