Beispiel #1
0
        public string GetTypeNameFromSymbol(PdbSymbol type)
        {
            if (type == null)
            {
                return("");
            }

            PdbSymbolTag tag = type.SymTag;

            string name = type.Name;

            if (name != null)
            {
                return(name);
            }

            if (tag == PdbSymbolTag.PointerType)
            {
                return(GetTypeNameFromSymbol(type.Type) + "*");
            }
            else if (tag == PdbSymbolTag.BaseType)
            {
                ulong             size     = type.Length;
                PdbSymbolBaseType baseType = type.BaseType;

                switch (baseType)
                {
                case PdbSymbolBaseType.Char: return("char");

                case PdbSymbolBaseType.WChar: return("char");

                case PdbSymbolBaseType.Int: return(size == 2 ? "s16" : size == 4 ? "s32" : size == 8 ? "s64" : "");

                case PdbSymbolBaseType.UInt: return(size == 2 ? "u16" : size == 4 ? "u32" : size == 8 ? "u64" : "");

                case PdbSymbolBaseType.Float: return("float");

                case PdbSymbolBaseType.Bool: return("bool");

                case PdbSymbolBaseType.Long: return("s64");

                case PdbSymbolBaseType.ULong: return("u64");
                }

                return("");
            }
            else if (tag == PdbSymbolTag.ArrayType)
            {
            }
            else if (tag == PdbSymbolTag.FunctionType)
            {
            }
            else if (tag == PdbSymbolTag.CustomType)
            {
            }

            return("");
        }
Beispiel #2
0
        public Type GetTypeFromSymbol(PdbSymbol type)
        {
            PdbSymbolTag tag = type.SymTag;

            if (tag == PdbSymbolTag.PointerType)
            {
                return(typeof(IntPtr));
            }
            else if (tag == PdbSymbolTag.BaseType)
            {
                ulong             size     = type.Length;
                PdbSymbolBaseType baseType = type.BaseType;

                switch (baseType)
                {
                case PdbSymbolBaseType.Char: return(typeof(char));

                case PdbSymbolBaseType.WChar: return(typeof(char));

                case PdbSymbolBaseType.Int: return(size == 2 ? typeof(short) : size == 4 ? typeof(int) : size == 8 ? typeof(long) : null);

                case PdbSymbolBaseType.UInt: return(size == 2 ? typeof(ushort) : size == 4 ? typeof(uint) : size == 8 ? typeof(ulong) : null);

                case PdbSymbolBaseType.Float: return(typeof(float));

                case PdbSymbolBaseType.Bool: return(typeof(bool));

                case PdbSymbolBaseType.Long: return(typeof(long));

                case PdbSymbolBaseType.ULong: return(typeof(ulong));
                }

                return(null);
            }
            else if (tag == PdbSymbolTag.ArrayType)
            {
            }
            else if (tag == PdbSymbolTag.FunctionType)
            {
            }
            else if (tag == PdbSymbolTag.CustomType)
            {
            }

            return(null);
        }