Example #1
0
        public ProgramClosure(MethodInfo entryMethod, CrRuntimeLibrary crRuntime)
        {
            var optimizationsTable = BuildProgramWideOptimizationsTable();

            Runtime          = crRuntime;
            Runtime.Closure  = this;
            EntryInterpreter = entryMethod.Register();

            ResultingInFunctionOptimizationPass.Runtime = Runtime;
            ResultingGlobalOptimizationPass.Runtime     = Runtime;
            BuildMethodClosure();
            MetaLinkerOptimizer.ApplyOptimizations(MethodClosure.Values.ToList());
            if (optimizationsTable.Optimize(this))
            {
                MetaLinkerOptimizer.ApplyOptimizations(MethodClosure.Values.ToList());
            }

            //BuildMethodClosure();
            AddAlwaysUsedType(typeof(object));
            TypesClosureLinker.SortTypeClosure(UsedTypes, crRuntime);

            var typeTable = new TypeDescriptionTable(UsedTypes);

            _typeDictionary = typeTable.ExtractInformation();

            BuildVirtualMethodTable(typeTable, MethodClosure);
        }
Example #2
0
        private void BuildMethodClosure()
        {
            var entryInterpreter = EntryInterpreter;

            var result = TypesClosureLinker.BuildClosureForEntry(entryInterpreter, this);

            MethodClosure = result.MethodInterpreters;

            UsedTypes = result.UsedTypes.ToList();
            foreach (var methodInterpreter in MethodClosure)
            {
                methodInterpreter.Value.Process(Runtime);

                methodInterpreter.Value.MidRepresentation.UpdateUseDef();
            }
        }