public VChains(IVTables vtables, IEnumerable <TypeDef> types, Func <MethodDef, bool> dontRename) { _chains = new Dictionary <ITypeKey, Dictionary <string, VChain> >(); DontRename = dontRename; foreach (var type in types) { var vtbl = vtables.GetVTable(type); foreach (var slot in vtbl.Slots) { AddNameToChain(slot); } foreach (var slot in vtbl.InterfaceSlots.Values.SelectMany(s => s)) { AddNameToChain(slot); } } #if DEBUG foreach (var chains in _chains.Values) { foreach (var ch in chains.Values) { var f = ch.Types.FirstOrDefault(t => _chains[t][ch.Name] != ch); Debug.Assert(f == null); } } #endif }
public static IVChains BuildVNameChains(IVTables vtables, IEnumerable <TypeDef> types, Func <MethodDef, bool> dontRename) => new VChains(vtables, types, dontRename);
internal VTablePlugin(IContextImpl context) : base(context) { VTables = DnextFactory.NewVTables(); }