public LinkContext(Pipeline pipeline, AssemblyResolver resolver, ReaderParameters readerParameters, UnintializedContextFactory factory) { _pipeline = pipeline; _resolver = resolver; _resolver.Context = this; _actions = new Dictionary <string, AssemblyAction> (); _parameters = new Dictionary <string, string> (StringComparer.Ordinal); _readerParameters = readerParameters; SymbolReaderProvider = new DefaultSymbolReaderProvider(false); if (factory == null) { throw new ArgumentNullException(nameof(factory)); } _annotations = factory.CreateAnnotationStore(this); MarkingHelpers = factory.CreateMarkingHelpers(this); Tracer = factory.CreateTracer(this); ReflectionPatternRecorder = new LoggingReflectionPatternRecorder(this); MarkedKnownMembers = new KnownMembers(); StripResources = true; PInvokes = new List <PInvokeInfo> (); // See https://github.com/mono/linker/issues/612 const CodeOptimizations defaultOptimizations = CodeOptimizations.BeforeFieldInit | CodeOptimizations.OverrideRemoval | CodeOptimizations.UnusedInterfaces | CodeOptimizations.IPConstantPropagation; Optimizations = new CodeOptimizationsSettings(defaultOptimizations); }
public static bool GetOptimizationName(string optimization, out CodeOptimizations codeOptimizations) { var method = typeof(Driver).GetMethod("GetOptimizationName", BindingFlags.NonPublic | BindingFlags.Static); var parameters = new object [] { optimization, null }; var ret = (bool)(method.Invoke(null, parameters)); codeOptimizations = (CodeOptimizations)(parameters [1]); return(ret); }
public bool IsEnabled(CodeOptimizations optimizations, string assemblyName) { // Only one bit is set Debug.Assert(optimizations != 0 && (optimizations & (optimizations - 1)) == 0); if (perAssembly.Count > 0 && perAssembly.TryGetValue(assemblyName, out CodeOptimizations assembly)) { return((assembly & optimizations) != 0); } return((Global & optimizations) != 0); }
public LinkContext(Pipeline pipeline, ILogger logger) { _pipeline = pipeline; _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _resolver = new AssemblyResolver() { Context = this }; _typeNameResolver = new TypeNameResolver(this); _actions = new Dictionary <string, AssemblyAction> (); _parameters = new Dictionary <string, string> (StringComparer.Ordinal); _readerParameters = new ReaderParameters { AssemblyResolver = _resolver }; _customAttributes = new CustomAttributeSource(this); _cachedWarningMessageContainers = new List <MessageContainer> (); SymbolReaderProvider = new DefaultSymbolReaderProvider(false); var factory = new UnintializedContextFactory(); _annotations = factory.CreateAnnotationStore(this); MarkingHelpers = factory.CreateMarkingHelpers(this); Tracer = factory.CreateTracer(this); ReflectionPatternRecorder = new LoggingReflectionPatternRecorder(this); MarkedKnownMembers = new KnownMembers(); PInvokes = new List <PInvokeInfo> (); Suppressions = new UnconditionalSuppressMessageAttributeState(this); NoWarn = new HashSet <int> (); GeneralWarnAsError = false; WarnAsError = new Dictionary <int, bool> (); WarnVersion = WarnVersion.Latest; const CodeOptimizations defaultOptimizations = CodeOptimizations.BeforeFieldInit | CodeOptimizations.OverrideRemoval | CodeOptimizations.UnusedInterfaces | CodeOptimizations.UnusedTypeChecks | CodeOptimizations.IPConstantPropagation | CodeOptimizations.UnreachableBodies | CodeOptimizations.RemoveDescriptors | CodeOptimizations.RemoveLinkAttributes | CodeOptimizations.RemoveSubstitutions | CodeOptimizations.RemoveDynamicDependencyAttribute; Optimizations = new CodeOptimizationsSettings(defaultOptimizations); }
public void Disable(CodeOptimizations optimizations, string assemblyContext = null) { if (assemblyContext == null) { Global &= ~optimizations; return; } if (!perAssembly.ContainsKey(assemblyContext)) { perAssembly.Add(assemblyContext, 0); return; } perAssembly [assemblyContext] &= ~optimizations; }
public LinkContext(Pipeline pipeline, AssemblyResolver resolver, ReaderParameters readerParameters, UnintializedContextFactory factory) { _pipeline = pipeline; _resolver = resolver; _resolver.Context = this; _typeNameResolver = new TypeNameResolver(this); _actions = new Dictionary <string, AssemblyAction> (); _parameters = new Dictionary <string, string> (StringComparer.Ordinal); _readerParameters = readerParameters; _customAttributes = new CustomAttributeSource(); _cachedWarningMessageContainers = new List <MessageContainer> (); SymbolReaderProvider = new DefaultSymbolReaderProvider(false); Logger = new ConsoleLogger(); if (factory == null) { throw new ArgumentNullException(nameof(factory)); } _annotations = factory.CreateAnnotationStore(this); MarkingHelpers = factory.CreateMarkingHelpers(this); Tracer = factory.CreateTracer(this); ReflectionPatternRecorder = new LoggingReflectionPatternRecorder(this); MarkedKnownMembers = new KnownMembers(); StripDescriptors = true; StripSubstitutions = true; StripLinkAttributes = true; PInvokes = new List <PInvokeInfo> (); Suppressions = new UnconditionalSuppressMessageAttributeState(this); NoWarn = new HashSet <int> (); GeneralWarnAsError = false; WarnAsError = new Dictionary <int, bool> (); WarnVersion = WarnVersion.Latest; // See https://github.com/mono/linker/issues/612 const CodeOptimizations defaultOptimizations = CodeOptimizations.BeforeFieldInit | CodeOptimizations.OverrideRemoval | CodeOptimizations.UnusedInterfaces | CodeOptimizations.UnusedTypeChecks | CodeOptimizations.IPConstantPropagation; Optimizations = new CodeOptimizationsSettings(defaultOptimizations); }
static bool GetOptimizationName(string text, out CodeOptimizations optimization) { switch (text.ToLowerInvariant()) { case "beforefieldinit": optimization = CodeOptimizations.BeforeFieldInit; return(true); case "overrideremoval": optimization = CodeOptimizations.OverrideRemoval; return(true); case "unreachablebodies": optimization = CodeOptimizations.UnreachableBodies; return(true); case "clearinitlocals": optimization = CodeOptimizations.ClearInitLocals; return(true); case "unusedinterfaces": optimization = CodeOptimizations.UnusedInterfaces; return(true); case "ipconstprop": optimization = CodeOptimizations.IPConstantPropagation; return(true); case "sealer": optimization = CodeOptimizations.Sealer; return(true); } Console.WriteLine($"Invalid optimization value '{text}'"); optimization = 0; return(false); }
public new bool GetOptimizationName(string optimization, out CodeOptimizations codeOptimizations) { return(base.GetOptimizationName(optimization, out codeOptimizations)); }
public bool IsOptimizationEnabled(CodeOptimizations optimization) { return((DisabledOptimizations & optimization) == 0); }
internal bool IsEnabled(CodeOptimizations optimizations, AssemblyDefinition context) { return(IsEnabled(optimizations, context?.Name.Name)); }
public CodeOptimizationsSettings(CodeOptimizations globalOptimizations) { Global = globalOptimizations; }
public bool IsOptimizationEnabled(CodeOptimizations optimization, AssemblyDefinition context) { return(Optimizations.IsEnabled(optimization, context)); }
public bool IsOptimizationEnabled(CodeOptimizations optimization, MemberReference context) { return(Optimizations.IsEnabled(optimization, context?.Module.Assembly)); }
public Pair(CodeOptimizations set, CodeOptimizations values) { this.Set = set; this.Values = values; }
public bool CanApplyOptimization(CodeOptimizations optimization, AssemblyDefinition context) { return(Annotations.GetAction(context) == AssemblyAction.Link && IsOptimizationEnabled(optimization, context)); }