public CType Translate(IDiaSymbol sym) { switch ((SymTagEnum)sym.symTag) { case SymTagEnum.SymTagBaseType: return(TranslateBaseType(sym)); case SymTagEnum.SymTagPointerType: return(TranslatePtr(sym)); case SymTagEnum.SymTagArrayType: return(TranslateArr(sym)); case SymTagEnum.SymTagFunctionType: return(TranslateFunc(sym)); case SymTagEnum.SymTagUDT: return(PdbSymbol.IsUnnamed(sym) ? TranslateUnnamedUdt(sym) : TranslateTypeRef(sym)); case SymTagEnum.SymTagEnum: return(PdbSymbol.IsUnnamed(sym) ? TranslateEnum(sym) : TranslateTypeRef(sym)); default: throw new NotImplementedException(((SymTagEnum)sym.symTag).ToString()); } }
private void LoadEnums(IDiaSymbol global) { IDiaEnumSymbols symbols; global.findChildren(SymTagEnum.SymTagEnum, null, 0, out symbols); foreach (IDiaSymbol symbol in symbols) { if (!PdbSymbol.IsUnnamed(symbol)) { AddSymbol(symbol, PdbSymbolTypes.Enum); } } }
private void LoadUdts(IDiaSymbol global) { IDiaEnumSymbols symbols; global.findChildren(SymTagEnum.SymTagUDT, null, 0, out symbols); foreach (IDiaSymbol symbol in symbols) { if (!PdbSymbol.IsUnnamed(symbol) && !IsUdtEmpty(symbol)) { switch ((UdtKindEnum)symbol.udtKind) { case UdtKindEnum.UdtStruct: AddSymbol(symbol, PdbSymbolTypes.Struct); break; case UdtKindEnum.UdtUnion: AddSymbol(symbol, PdbSymbolTypes.Union); break; } } } }