2003-12-30 Ben Maurer <bmaurer@users.sourceforge.net>
authorBen Maurer <benm@mono-cvs.ximian.com>
Tue, 30 Dec 2003 19:50:12 +0000 (19:50 -0000)
committerBen Maurer <benm@mono-cvs.ximian.com>
Tue, 30 Dec 2003 19:50:12 +0000 (19:50 -0000)
* class.cs, rootcontext.cs, typmanager.cs: do not
leak pointers.

svn path=/trunk/mcs/; revision=21558

mcs/mcs/ChangeLog
mcs/mcs/class.cs
mcs/mcs/rootcontext.cs
mcs/mcs/typemanager.cs

index 644ec3bb5edae527ed8725fcf53f0a0860a4c405..3da1786a96b0846633b36f32fcc43dc0b6919645 100755 (executable)
@@ -1,3 +1,8 @@
+2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
+
+       * class.cs, rootcontext.cs, typmanager.cs: do not
+       leak pointers.
+
 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
 
        * codegen.cs: remove stack for the ec flow branching.
index 26cd00c37b376338d6b92cb7d42702740a1500b3..522d77af1bf119c0425f72e06ed3f8c9d36f9367 100755 (executable)
@@ -1689,11 +1689,12 @@ namespace Mono.CSharp {
                
                public override void CloseType ()
                {
+                       if (Created)
+                               return;
+                       
                        try {
-                               if (!Created){
-                                       Created = true;
-                                       TypeBuilder.CreateType ();
-                               }
+                               Created = true;
+                               TypeBuilder.CreateType ();
                        } catch (TypeLoadException){
                                //
                                // This is fine, the code still created the type
@@ -1727,6 +1728,29 @@ namespace Mono.CSharp {
                        if (Delegates != null)
                                foreach (Delegate d in Delegates)
                                        d.CloseType ();
+                       
+                       types = null;
+                       properties = null;
+                       enums = null;
+                       delegates = null;
+                       fields = null;
+                       initialized_fields = null;
+                       initialized_static_fields = null;
+                       constants = null;
+                       interfaces = null;
+                       interface_order = null;
+                       methods = null;
+                       events = null;
+                       indexers = null;
+                       operators = null;
+                       ec = null;
+                       default_constructor = null;
+                       default_static_constructor = null;
+                       type_bases = null;
+                       attributes = null;
+                       ifaces = null;
+                       parent_container = null;
+                       member_cache = null;
                }
 
                public string MakeName (string n)
@@ -2616,6 +2640,7 @@ namespace Mono.CSharp {
                {
                        MethodData.Emit (container, Block, this);
                        Block = null;
+                       MethodData = null;
                }
 
                void IIteratorContainer.SetYields ()
index ef38f836114e52ecfc04b9026c203da8d0a9777a..11ee1664cc9cd66744e207e43f212f2e2818e7e2 100755 (executable)
@@ -438,6 +438,13 @@ namespace Mono.CSharp {
                                foreach (TypeBuilder type_builder in helper_classes)
                                        type_builder.CreateType ();
                        }
+                       
+                       attribute_types = null;
+                       interface_resolve_order = null;
+                       type_container_resolve_order = null;
+                       helper_classes = null;
+                       tree = null;
+                       TypeManager.CleanUp ();
                }
 
                /// <summary>
index bda80ba0754ac417cb011d8dd7187675abf7f3ee..e763d61bf1d2d67d4a25224c3714abfb00210393 100755 (executable)
@@ -240,6 +240,35 @@ public class TypeManager {
                public string name;
                public Type [] args;
        }
+       
+       public static void CleanUp ()
+       {
+               // Lets get everything clean so that we can collect before generating code
+               assemblies = null;
+               modules = null;
+               types = null;
+               typecontainers = null;
+               user_types = null;
+               builder_to_declspace = null;
+               builder_to_ifaces = null;
+               method_arguments = null;
+               indexer_arguments = null;
+               method_internal_params = null;
+               builder_to_attr = null;
+               builder_to_method = null;
+               
+               fields = null;
+               references = null;
+               negative_hits = null;
+               attr_to_allowmult = null;
+               builder_to_constant = null;
+               fieldbuilders_to_fields = null;
+               events = null;
+               priv_fields_events = null;
+               properties = null;
+               
+               TypeHandle.CleanUp ();
+       }
 
        /// <summary>
        ///   A filter for Findmembers that uses the Signature object to
@@ -2696,6 +2725,11 @@ public sealed class TypeHandle : IMemberContainer {
                type_hash.Add (t, handle);
                return handle;
        }
+       
+       public static void CleanUp ()
+       {
+               type_hash = null;
+       }
 
        /// <summary>
        ///   Returns the TypeHandle for TypeManager.object_type.