Fri Jan 10 16:03:30 CET 2003 Paolo Molaro <lupus@ximian.com>
authorPaolo Molaro <lupus@oddwiz.org>
Fri, 10 Jan 2003 15:06:28 +0000 (15:06 -0000)
committerPaolo Molaro <lupus@oddwiz.org>
Fri, 10 Jan 2003 15:06:28 +0000 (15:06 -0000)
* ILGenerator.cs, MethodBuilder.cs, TypeBuilder.cs,
ConstructorBuilder.cs: some tweaks to reduce memory usage.

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

mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/ConstructorBuilder.cs
mcs/class/corlib/System.Reflection.Emit/ILGenerator.cs
mcs/class/corlib/System.Reflection.Emit/MethodBuilder.cs
mcs/class/corlib/System.Reflection.Emit/TypeBuilder.cs

index 672c7ef5f662393a149d5c978c47b102cccdc0a5..1de67e3515f1d368e77fe5f18af44a64fa932652 100644 (file)
@@ -1,4 +1,9 @@
 
+Fri Jan 10 16:03:30 CET 2003 Paolo Molaro <lupus@ximian.com>
+
+       * ILGenerator.cs, MethodBuilder.cs, TypeBuilder.cs,
+       ConstructorBuilder.cs: some tweaks to reduce memory usage.
+
 Thu Jan 2 18:46:09 CET 2003 Paolo Molaro <lupus@ximian.com>
 
        * ModuleBuilder.cs, TypeBuilder.cs: support global fields and methods.
index 00ecc75bbcfbf88dac4e7fb2f974860e6f1dcff8..8ff8577f5ab5eb5c99d4ece640fa257034aed21b 100644 (file)
@@ -107,7 +107,7 @@ namespace System.Reflection.Emit {
                public override object [] GetCustomAttributes (Type attribute_type, bool inherit) {return null;}
 
                public ILGenerator GetILGenerator () {
-                       return GetILGenerator (256);
+                       return GetILGenerator (64);
                }
                internal ILGenerator GetILGenerator (int size) {
                        ilgen = new ILGenerator (this, size);
index 1f461abc607e04de1d64a9c5b98df54e058f464f..837f3e857ae7ecc8da6083882953fa2c84c3a015 100644 (file)
@@ -138,16 +138,15 @@ namespace System.Reflection.Emit {
 
                internal ILGenerator (MethodBase mb, int size) {
                        if (size < 0)
-                               size = 256;
+                               size = 128;
                        code_len = 0;
                        code = new byte [size];
                        mbuilder = mb;
                        cur_stack = max_stack = 0;
                        num_fixups = num_labels = 0;
-                       label_to_addr = new int [16];
-                       fixups = new LabelFixup [16];
-                       token_fixups = new ILTokenInfo [16];
-                       scopes = new Stack ();
+                       label_to_addr = new int [8];
+                       fixups = new LabelFixup [8];
+                       token_fixups = new ILTokenInfo [8];
                        num_token_fixups = 0;
                        if (mb is MethodBuilder) {
                                module = (ModuleBuilder)((MethodBuilder)mb).TypeBuilder.Module;
@@ -310,8 +309,11 @@ namespace System.Reflection.Emit {
                        ex_handlers [cur_block].AddFinally (code_len);
                }
                public virtual void BeginScope () {
-                       if (sym_writer != null)
+                       if (sym_writer != null) {
+                               if (scopes == null)
+                                       scopes = new Stack ();
                                scopes.Push (sym_writer.OpenScope (code_len));
+                       }
                }
                public LocalBuilder DeclareLocal (Type localType) {
                        LocalBuilder res = new LocalBuilder (module, localType, this);
@@ -589,6 +591,8 @@ namespace System.Reflection.Emit {
                public virtual void EndScope () {
                        if (sym_writer != null) {
                                sym_writer.CloseScope (code_len);
+                               if (scopes == null)
+                                       throw new InvalidOperationException ();
                                scopes.Pop ();
                        }
                }
index e00a3b99ba0b40e59b71713138d67a3385fa663b..7f44d3192cd468c37cf8a26e3550b26dab080767 100755 (executable)
@@ -121,7 +121,7 @@ namespace System.Reflection.Emit {
                        return null;
                }
                public ILGenerator GetILGenerator () {
-                       return GetILGenerator (256);
+                       return GetILGenerator (64);
                }
                public ILGenerator GetILGenerator (int size) {
                        ilgen = new ILGenerator (this, size);
index 2f9786a91feab31652fbace5469ebfab997e6185..ce388d5dd991e55cd3195cf19542ce4880a9e141 100644 (file)
@@ -37,6 +37,7 @@ namespace System.Reflection.Emit {
        private int class_size;
        private PackingSize packing_size;
        private Type created;
+       string fullname;
 
        public const int UnspecifiedTypeSize = 0;
 
@@ -54,7 +55,7 @@ namespace System.Reflection.Emit {
                        this.parent = null;
                        this.attrs = attr;
                        this.class_size = -1;
-                       this.tname = "<Module>";
+                       fullname = this.tname = "<Module>";
                        this.nspace = "";
                        pmodule = mb;
                        setup_internal_class (this);
@@ -82,6 +83,7 @@ namespace System.Reflection.Emit {
                        // skip .<Module> ?
                        table_idx = mb.get_next_table_index (this, 0x02, true);
                        setup_internal_class (this);
+                       fullname = GetFullName ();
                }
 
                public override Assembly Assembly {
@@ -89,7 +91,7 @@ namespace System.Reflection.Emit {
                }
                public override string AssemblyQualifiedName {
                        get {
-                               return FullName + ", " + Assembly.ToString();
+                               return fullname + ", " + Assembly.ToString();
                        }
                }
                public override Type BaseType {
@@ -110,13 +112,17 @@ namespace System.Reflection.Emit {
                        }
                }
 
+               string GetFullName () {
+                       if (nesting_type != null)
+                               return String.Concat (nesting_type.FullName, "+", tname);
+                       if ((nspace != null) && (nspace.Length > 0))
+                               return String.Concat (nspace, ".", tname);
+                       return tname;
+               }
+       
                public override string FullName {
                        get {
-                               if (nesting_type != null)
-                                       return String.Concat (nesting_type.FullName, "+", tname);
-                               if ((nspace != null) && (nspace.Length > 0))
-                                       return String.Concat (nspace, ".", tname);
-                               return tname;
+                               return fullname;
                        }
                }
        
@@ -190,6 +196,7 @@ namespace System.Reflection.Emit {
                private TypeBuilder DefineNestedType (string name, TypeAttributes attr, Type parent, Type[] interfaces, PackingSize packsize, int typesize) {
                        TypeBuilder res = new TypeBuilder (pmodule, name, attr, parent, interfaces, packsize, typesize);
                        res.nesting_type = this;
+                       res.fullname = res.GetFullName ();
                        if (subtypes != null) {
                                TypeBuilder[] new_types = new TypeBuilder [subtypes.Length + 1];
                                System.Array.Copy (subtypes, new_types, subtypes.Length);