Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/linker.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/linker/Linker.Steps/SubStepsDispatcher.cs')
-rw-r--r--src/linker/Linker.Steps/SubStepsDispatcher.cs83
1 files changed, 49 insertions, 34 deletions
diff --git a/src/linker/Linker.Steps/SubStepsDispatcher.cs b/src/linker/Linker.Steps/SubStepsDispatcher.cs
index 050010e9c..3ed5a6e1c 100644
--- a/src/linker/Linker.Steps/SubStepsDispatcher.cs
+++ b/src/linker/Linker.Steps/SubStepsDispatcher.cs
@@ -1,13 +1,25 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
+using System;
using System.Collections.Generic;
+using System.Diagnostics;
using Mono.Cecil;
using Mono.Collections.Generic;
namespace Mono.Linker.Steps
{
+ struct CategorizedSubSteps
+ {
+ public List<ISubStep> on_assemblies;
+ public List<ISubStep> on_types;
+ public List<ISubStep> on_fields;
+ public List<ISubStep> on_methods;
+ public List<ISubStep> on_properties;
+ public List<ISubStep> on_events;
+ }
+
//
// Generic steps dispatcher is intended to by used by custom linker step which
// consist of multiple steps. It simplifies their implementation as well as the
@@ -17,12 +29,13 @@ namespace Mono.Linker.Steps
{
readonly List<ISubStep> substeps;
- List<ISubStep> on_assemblies;
- List<ISubStep> on_types;
- List<ISubStep> on_fields;
- List<ISubStep> on_methods;
- List<ISubStep> on_properties;
- List<ISubStep> on_events;
+ CategorizedSubSteps? categorized;
+ CategorizedSubSteps Categorized {
+ get {
+ Debug.Assert (categorized.HasValue);
+ return categorized.Value;
+ }
+ }
protected SubStepsDispatcher ()
{
@@ -53,7 +66,7 @@ namespace Mono.Linker.Steps
foreach (var assembly in assemblies) {
CategorizeSubSteps (assembly);
- if (HasSubSteps (on_assemblies))
+ if (HasSubSteps (Categorized.on_assemblies))
DispatchAssembly (assembly);
if (!ShouldDispatchTypes ())
@@ -65,11 +78,11 @@ namespace Mono.Linker.Steps
bool ShouldDispatchTypes ()
{
- return HasSubSteps (on_types)
- || HasSubSteps (on_fields)
- || HasSubSteps (on_methods)
- || HasSubSteps (on_properties)
- || HasSubSteps (on_events);
+ return HasSubSteps (Categorized.on_types)
+ || HasSubSteps (Categorized.on_fields)
+ || HasSubSteps (Categorized.on_methods)
+ || HasSubSteps (Categorized.on_properties)
+ || HasSubSteps (Categorized.on_events);
}
void BrowseTypes (Collection<TypeDefinition> types)
@@ -77,22 +90,22 @@ namespace Mono.Linker.Steps
foreach (TypeDefinition type in types) {
DispatchType (type);
- if (type.HasFields && HasSubSteps (on_fields)) {
+ if (type.HasFields && HasSubSteps (Categorized.on_fields)) {
foreach (FieldDefinition field in type.Fields)
DispatchField (field);
}
- if (type.HasMethods && HasSubSteps (on_methods)) {
+ if (type.HasMethods && HasSubSteps (Categorized.on_methods)) {
foreach (MethodDefinition method in type.Methods)
DispatchMethod (method);
}
- if (type.HasProperties && HasSubSteps (on_properties)) {
+ if (type.HasProperties && HasSubSteps (Categorized.on_properties)) {
foreach (PropertyDefinition property in type.Properties)
DispatchProperty (property);
}
- if (type.HasEvents && HasSubSteps (on_events)) {
+ if (type.HasEvents && HasSubSteps (Categorized.on_events)) {
foreach (EventDefinition @event in type.Events)
DispatchEvent (@event);
}
@@ -104,42 +117,42 @@ namespace Mono.Linker.Steps
void DispatchAssembly (AssemblyDefinition assembly)
{
- foreach (var substep in on_assemblies) {
+ foreach (var substep in Categorized.on_assemblies) {
substep.ProcessAssembly (assembly);
}
}
void DispatchType (TypeDefinition type)
{
- foreach (var substep in on_types) {
+ foreach (var substep in Categorized.on_types) {
substep.ProcessType (type);
}
}
void DispatchField (FieldDefinition field)
{
- foreach (var substep in on_fields) {
+ foreach (var substep in Categorized.on_fields) {
substep.ProcessField (field);
}
}
void DispatchMethod (MethodDefinition method)
{
- foreach (var substep in on_methods) {
+ foreach (var substep in Categorized.on_methods) {
substep.ProcessMethod (method);
}
}
void DispatchProperty (PropertyDefinition property)
{
- foreach (var substep in on_properties) {
+ foreach (var substep in Categorized.on_properties) {
substep.ProcessProperty (property);
}
}
void DispatchEvent (EventDefinition @event)
{
- foreach (var substep in on_events) {
+ foreach (var substep in Categorized.on_events) {
substep.ProcessEvent (@event);
}
}
@@ -152,12 +165,14 @@ namespace Mono.Linker.Steps
void CategorizeSubSteps (AssemblyDefinition assembly)
{
- on_assemblies = new List<ISubStep> ();
- on_types = new List<ISubStep> ();
- on_fields = new List<ISubStep> ();
- on_methods = new List<ISubStep> ();
- on_properties = new List<ISubStep> ();
- on_events = new List<ISubStep> ();
+ categorized = new CategorizedSubSteps {
+ on_assemblies = new List<ISubStep> (),
+ on_types = new List<ISubStep> (),
+ on_fields = new List<ISubStep> (),
+ on_methods = new List<ISubStep> (),
+ on_properties = new List<ISubStep> (),
+ on_events = new List<ISubStep> ()
+ };
foreach (var substep in substeps)
CategorizeSubStep (substep, assembly);
@@ -168,12 +183,12 @@ namespace Mono.Linker.Steps
if (!substep.IsActiveFor (assembly))
return;
- CategorizeTarget (substep, SubStepTargets.Assembly, on_assemblies);
- CategorizeTarget (substep, SubStepTargets.Type, on_types);
- CategorizeTarget (substep, SubStepTargets.Field, on_fields);
- CategorizeTarget (substep, SubStepTargets.Method, on_methods);
- CategorizeTarget (substep, SubStepTargets.Property, on_properties);
- CategorizeTarget (substep, SubStepTargets.Event, on_events);
+ CategorizeTarget (substep, SubStepTargets.Assembly, Categorized.on_assemblies);
+ CategorizeTarget (substep, SubStepTargets.Type, Categorized.on_types);
+ CategorizeTarget (substep, SubStepTargets.Field, Categorized.on_fields);
+ CategorizeTarget (substep, SubStepTargets.Method, Categorized.on_methods);
+ CategorizeTarget (substep, SubStepTargets.Property, Categorized.on_properties);
+ CategorizeTarget (substep, SubStepTargets.Event, Categorized.on_events);
}
static void CategorizeTarget (ISubStep substep, SubStepTargets target, List<ISubStep> list)