Fix sweeping of nested types
authorJb Evain <jbevain@gmail.com>
Tue, 23 Nov 2010 10:12:44 +0000 (11:12 +0100)
committerJb Evain <jbevain@gmail.com>
Tue, 23 Nov 2010 10:13:00 +0000 (11:13 +0100)
mcs/tools/linker/Mono.Linker.Steps/CleanStep.cs
mcs/tools/linker/Mono.Linker.Steps/SweepStep.cs

index e118175aa1c1b9cc69a0bd400ff57e1e1cceff58..93cb8571a63874ad93523fb2546c7517eae62a2f 100644 (file)
@@ -61,25 +61,12 @@ namespace Mono.Linker.Steps {
 
                static void CleanType (TypeDefinition type)
                {
-                       if (type.HasNestedTypes)
-                               CleanNestedTypes (type);
                        if (type.HasProperties)
                                CleanProperties (type);
                        if (type.HasEvents)
                                CleanEvents (type);
                }
 
-               static void CleanNestedTypes (TypeDefinition type)
-               {
-                       var nested_types = type.NestedTypes;
-
-                       for (int i = 0; i < nested_types.Count; i++) {
-                               var nested_type = nested_types [i];
-                               if (!type.Module.Types.Contains (nested_type))
-                                       nested_types.RemoveAt (i--);
-                       }
-               }
-
                static MethodDefinition CheckMethod (TypeDefinition type, MethodDefinition method)
                {
                        if (method == null)
index 2fc9ce8234bc6d6d2a7bac1eeb110e705839c473..2c41988b348eed9bfb553bfbe5948a9052a7c402 100644 (file)
@@ -111,6 +111,21 @@ namespace Mono.Linker.Steps {
 
                        if (type.HasMethods)
                                SweepCollection (type.Methods);
+
+                       if (type.HasNestedTypes)
+                               SweepNestedTypes (type);
+               }
+
+               void SweepNestedTypes (TypeDefinition type)
+               {
+                       for (int i = 0; i < type.NestedTypes.Count; i++) {
+                               var nested = type.NestedTypes [i];
+                               if (Annotations.IsMarked (nested)) {
+                                       SweepType (nested);
+                               } else {
+                                       //type.NestedTypes.RemoveAt (i--);
+                               }
+                       }
                }
 
                void SweepCollection (IList list)