Пример #1
0
        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
        }
Пример #2
0
 public static IVChains BuildVNameChains(IVTables vtables, IEnumerable <TypeDef> types,
                                         Func <MethodDef, bool> dontRename) =>
 new VChains(vtables, types, dontRename);
Пример #3
0
 internal VTablePlugin(IContextImpl context)
     : base(context)
 {
     VTables = DnextFactory.NewVTables();
 }