예제 #1
0
        private void TypeUseFound(ITypeDefinition t)
        {
            Contract.Requires(t != null);
            Contract.Requires(!(t is Dummy));

            Contract.Requires(GarbageCollectHelper.UnspecializeAndResolveTypeReference(t) == t);
            Contract.Ensures(this.types.Contains(t));

            if (this.types.Contains(t))
            {
                return;
            }

            // add all base classes of this class
            foreach (var baseclass in GarbageCollectHelper.BaseClasses(t))
            {
                this.TypeUseFound(GarbageCollectHelper.UnspecializeAndResolveTypeReference(baseclass));
            }

            this.types.Add(t);

            // add static constructor to worklist
            var cctor = GarbageCollectHelper.GetStaticConstructor(this.wholeProgram.Host().NameTable, t);

            if (!(cctor is Dummy))
            {
                this.AddToWorklist(GarbageCollectHelper.UnspecializeAndResolveMethodReference(cctor));
            }
        }