コード例 #1
0
        public DevirtualizationTests()
        {
            var target = new TargetDetails(TargetArchitecture.X64, TargetOS.Windows, TargetAbi.CoreRT);

            _context = new CompilerTypeSystemContext(target, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All);

            _context.InputFilePaths = new Dictionary <string, string> {
                { "Test.CoreLib", @"Test.CoreLib.dll" },
                { "ILCompiler.Compiler.Tests.Assets", @"ILCompiler.Compiler.Tests.Assets.dll" },
            };
            _context.ReferenceFilePaths = new Dictionary <string, string>();

            _context.SetSystemModule(_context.GetModuleForSimpleName("Test.CoreLib"));
            _testModule = _context.GetModuleForSimpleName("ILCompiler.Compiler.Tests.Assets");
        }
コード例 #2
0
        public static IEnumerable <object[]> GetTestMethods()
        {
            var target  = new TargetDetails(TargetArchitecture.X64, TargetOS.Windows, TargetAbi.NativeAot);
            var context = new CompilerTypeSystemContext(target, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All);

            context.InputFilePaths = new Dictionary <string, string> {
                { "Test.CoreLib", @"Test.CoreLib.dll" },
                { "ILCompiler.Compiler.Tests.Assets", @"ILCompiler.Compiler.Tests.Assets.dll" },
            };
            context.ReferenceFilePaths = new Dictionary <string, string>();

            context.SetSystemModule(context.GetModuleForSimpleName("Test.CoreLib"));
            var testModule = context.GetModuleForSimpleName("ILCompiler.Compiler.Tests.Assets");

            bool foundSomethingToCheck = false;

            foreach (var type in testModule.GetType("ILCompiler.Compiler.Tests.Assets", "DependencyGraph").GetNestedTypes())
            {
                foundSomethingToCheck = true;
                yield return(new object[] { type.GetMethod("Entrypoint", null) });
            }

            Assert.True(foundSomethingToCheck, "No methods to check?");
        }
コード例 #3
0
ファイル: ILCompilerDriver.cs プロジェクト: mikem8361/runtime
        public void Trim(ILCompilerOptions options, ILogWriter logWriter)
        {
            ComputeDefaultOptions(out var targetOS, out var targetArchitecture);
            var targetDetails = new TargetDetails(targetArchitecture, targetOS, TargetAbi.NativeAot);
            CompilerTypeSystemContext typeSystemContext =
                new CompilerTypeSystemContext(targetDetails, SharedGenericsMode.CanonicalReferenceTypes, DelegateFeature.All);

            typeSystemContext.InputFilePaths     = options.InputFilePaths;
            typeSystemContext.ReferenceFilePaths = options.ReferenceFilePaths;
            typeSystemContext.SetSystemModule(typeSystemContext.GetModuleForSimpleName(DefaultSystemModule));

            List <EcmaModule> inputModules = new List <EcmaModule> ();

            foreach (var inputFile in typeSystemContext.InputFilePaths)
            {
                EcmaModule module = typeSystemContext.GetModuleFromPath(inputFile.Value);
                inputModules.Add(module);
            }

            CompilationModuleGroup compilationGroup = new TestInfraMultiFileSharedCompilationModuleGroup(typeSystemContext, inputModules);

            List <ICompilationRootProvider> compilationRoots = new List <ICompilationRootProvider> ();
            EcmaModule?entrypointModule = null;

            foreach (var inputFile in typeSystemContext.InputFilePaths)
            {
                EcmaModule module = typeSystemContext.GetModuleFromPath(inputFile.Value);

                if (module.PEReader.PEHeaders.IsExe)
                {
                    if (entrypointModule != null)
                    {
                        throw new Exception("Multiple EXE modules");
                    }
                    entrypointModule = module;
                }

                compilationRoots.Add(new ExportedMethodsRootProvider(module));
            }

            compilationRoots.Add(new MainMethodRootProvider(entrypointModule, CreateInitializerList(typeSystemContext, options)));

            ILProvider ilProvider = new NativeAotILProvider();

            ilProvider = new FeatureSwitchManager(ilProvider, options.FeatureSwitches);

            Logger logger = new Logger(logWriter, ilProvider, isVerbose: true);
            CompilerGeneratedState compilerGeneratedState = new CompilerGeneratedState(ilProvider, logger);

            UsageBasedMetadataManager metadataManager = new UsageBasedMetadataManager(
                compilationGroup,
                typeSystemContext,
                new NoMetadataBlockingPolicy(),
                new ManifestResourceBlockingPolicy(options.FeatureSwitches),
                logFile: null,
                new NoStackTraceEmissionPolicy(),
                new NoDynamicInvokeThunkGenerationPolicy(),
                new FlowAnnotations(logger, ilProvider, compilerGeneratedState),
                UsageBasedMetadataGenerationOptions.ReflectionILScanning,
                logger,
                Array.Empty <KeyValuePair <string, bool> > (),
                Array.Empty <string> (),
                options.TrimAssemblies.ToArray());

            CompilationBuilder builder = new RyuJitCompilationBuilder(typeSystemContext, compilationGroup)
                                         .UseILProvider(ilProvider)
                                         .UseCompilationUnitPrefix("");

            IILScanner scanner = builder.GetILScannerBuilder()
                                 .UseCompilationRoots(compilationRoots)
                                 .UseMetadataManager(metadataManager)
                                 .UseParallelism(System.Diagnostics.Debugger.IsAttached ? 1 : -1)
                                 .ToILScanner();

            ILScanResults results = scanner.Scan();
        }