2002-03-23 Martin Baulig <martin@gnome.org>
authorMartin Baulig <martin@novell.com>
Sat, 23 Mar 2002 11:01:23 +0000 (11:01 -0000)
committerMartin Baulig <martin@novell.com>
Sat, 23 Mar 2002 11:01:23 +0000 (11:01 -0000)
* ILGenerator.cs (BeginScope, EndScope): Implemented.

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

mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/ILGenerator.cs

index d883adf804ae6a817aabaa0021edab124c51e901..020d66e1b0ab2400ebaf4f5677c286ff9d15e946 100644 (file)
@@ -1,3 +1,7 @@
+2002-03-23  Martin Baulig  <martin@gnome.org>
+
+       * ILGenerator.cs (BeginScope, EndScope): Implemented.
+
 2002-03-20  Martin Baulig  <martin@gnome.org>
 
        * ModuleBuilder.cs (GetSymbolWriter): New internal function. Dynamically
index 1ed611a6154edb16192d5cc33b4866efedf51585..04b5ac1e64c462d6fab0ee7e1424d7922638489c 100644 (file)
@@ -9,6 +9,7 @@
 //
 
 using System;
+using System.Collections;
 using System.Diagnostics.SymbolStore;
 
 namespace System.Reflection.Emit {
@@ -123,6 +124,7 @@ namespace System.Reflection.Emit {
                private ModuleBuilder module;
                private AssemblyBuilder abuilder;
                private ISymbolWriter sym_writer;
+               private Stack scopes;
                private int cur_block;
                private int open_blocks;
 
@@ -137,6 +139,7 @@ namespace System.Reflection.Emit {
                        label_to_addr = new int [16];
                        fixups = new LabelFixup [16];
                        token_fixups = new ILTokenInfo [16];
+                       scopes = new Stack ();
                        num_token_fixups = 0;
                        if (mb is MethodBuilder) {
                                module = (ModuleBuilder)((MethodBuilder)mb).TypeBuilder.Module;
@@ -296,7 +299,8 @@ namespace System.Reflection.Emit {
                        //throw new NotImplementedException ();
                }
                public virtual void BeginScope () {
-                       throw new NotImplementedException ();
+                       if (sym_writer != null)
+                               scopes.Push (sym_writer.OpenScope (code_len));
                }
                public virtual LocalBuilder DeclareLocal (Type localType) {
                        LocalBuilder res = new LocalBuilder (sym_writer, localType);
@@ -490,7 +494,10 @@ namespace System.Reflection.Emit {
                        //throw new NotImplementedException ();
                }
                public virtual void EndScope () {
-                       throw new NotImplementedException ();
+                       if (sym_writer != null) {
+                               sym_writer.CloseScope (code_len);
+                               scopes.Pop ();
+                       }
                }
                public virtual void MarkLabel (Label loc) {
                        if (loc.label < 0 || loc.label >= num_labels)