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); } } }
public override void Execute(App app) { DefFactory factory = new DefFactory(); Translator translator = new Translator(); Pdb pdb = app._pdb; string[] args = app._args; for (int i = 2; i < args.Length; i++) { string symName = PdbSymbol.InternName(args[i]); PdbSymbol symbol = pdb.Find(symName); if (symbol == null) { app.WriteError("can't find symbol: " + symName); continue; } Def def = factory.CreateMixedTypedef(symbol.TranslateBy(translator), symbol.Name); Console.WriteLine(def.Output("", " ")); } }
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; } } } }
private void AddSymbol(IDiaSymbol symbol, PdbSymbolType type) { string name = PdbSymbol.GetInternName(symbol); _symbols.Add(name, new PdbSymbol(symbol, name, type)); }
public CType TranslateTypeRef(IDiaSymbol sym) { return(new CTypeRef(PdbSymbol.InternName(sym.name))); }