Example #1
0
        public static void Setup()
        {
            // Get AssemblyListTable and Assembly count
            Ptr  assemblyListTable = Intrinsic.GetAssemblyListTable();
            uint assemblyCount     = (uint)assemblyListTable.Dereference(0);

            assemblyListTable.Increment();

            Assemblies = new LinkedList <RuntimeAssembly>();

            // Loop through and populate the array
            for (uint i = 0; i < assemblyCount; i++)
            {
                // Get the pointer to the Assembly Metadata
                MDAssemblyDefinition *ptr = (MDAssemblyDefinition *)(assemblyListTable.Dereference(i));
                Assemblies.AddLast(new RuntimeAssembly(ptr));
            }
        }
Example #2
0
        internal RuntimeAssembly(MDAssemblyDefinition *pointer)
        {
            assemblyDefinition = pointer;
            fullName           = assemblyDefinition->Name;

            uint typeCount = assemblyDefinition->NumberOfTypes;

            typeList    = new LinkedList <RuntimeType>();
            typeHandles = new LinkedList <RuntimeTypeHandle>();

            for (uint i = 0; i < typeCount; i++)
            {
                var handle = new RuntimeTypeHandle();
                ((uint **)&handle)[0] = (uint *)assemblyDefinition->GetTypeDefinition(i);

                if (typeHandles.Contains(handle))
                {
                    continue;
                }

                ProcessType(handle);
            }
        }