示例#1
0
        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);
            }
        }
示例#2
0
 string IExtractContext.GetCLanguageTypeName(TypeReference type, TypeNameFlags flags)
 {
     return(this.GetCLanguageTypeName(type, flags));
 }