Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by [EMAIL PROTECTED]

http://bugzilla.ximian.com/show_bug.cgi?id=78570

--- shadow/78570        2006-06-03 13:26:26.000000000 -0400
+++ shadow/78570.tmp.14598      2006-06-05 15:58:31.000000000 -0400
@@ -1,12 +1,12 @@
 Bug#: 78570
 Product: Mono: Runtime
 Version: 1.1
 OS: unknown
 OS Details: Windows XP
-Status: NEEDINFO   
+Status: REOPENED   
 Resolution: 
 Severity: Unknown
 Priority: Wishlist
 Component: debug
 AssignedTo: [EMAIL PROTECTED]                            
 ReportedBy: [EMAIL PROTECTED]               
@@ -100,6 +100,95 @@
 ------- Additional Comments From [EMAIL PROTECTED]  2006-06-03 13:26 -------
 Please provide a small C#-based test case that illustrates the problem.  
 
 In addition, I realize this is an urgent bug for you, but the only
 person that can fix this will not be around to fix this bug on time
 for your release he is on vacation.
+
+------- Additional Comments From [EMAIL PROTECTED]  2006-06-05 15:58 -------
+using System;
+using System.IO;
+using System.Reflection.Emit;
+using System.Reflection;
+using System.Diagnostics.SymbolStore;
+
+namespace BugReport
+{
+    public interface IFoo
+    {
+        void Bar();
+    }
+
+    class Program
+    {
+        const string DocumentPath = "/temp/test.cs";
+
+        static void Main(string[] args)
+        {
+            IFoo foo = EmitFoo();
+            try
+            {
+                foo.Bar();
+            }
+            catch (Exception x)
+            {
+                Assert(x.StackTrace.IndexOf(DocumentPath) != -1);
+            }
+        }
+        
+        static void Assert(bool condition)
+        {
+            if (!condition) throw new ApplicationException();
+        }
+
+        static IFoo EmitFoo()
+        {
+            AppDomain currentDomain = AppDomain.CurrentDomain;
+            string fname = Path.Combine(currentDomain.BaseDirectory,
+"bugged.dll");
+
+            AssemblyName name = new AssemblyName();
+            name.Name = Path.GetFileNameWithoutExtension(fname);
+
+            AssemblyBuilder builder =
+currentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save,
+Path.GetDirectoryName(fname), null);
+            ModuleBuilder module =
+builder.DefineDynamicModule(Path.GetFileName(fname), true);
+            ISymbolDocumentWriter document =
+module.DefineDocument(DocumentPath, SymDocumentType.Text,
+SymLanguageType.CSharp, Guid.Empty);
+
+            TypeBuilder outer = module.DefineType("Outer",
+TypeAttributes.Public | TypeAttributes.Class, typeof(object));
+            TypeBuilder inner = outer.DefineNestedType("Inner",
+TypeAttributes.NestedPublic | TypeAttributes.Class, typeof(object));
+            string typeName = "Outer+Inner";
+            //comment out the two lines above and uncomment the two lines
+            // below to see mono working
+            //TypeBuilder inner = module.DefineType("Inner",
+TypeAttributes.Public | TypeAttributes.Class, typeof(object));
+            //string typeName = "Inner";
+            inner.AddInterfaceImplementation(typeof(IFoo));
+
+            MethodBuilder foo = inner.DefineMethod("Bar",
+MethodAttributes.Public | MethodAttributes.Virtual, typeof(void), new
+Type[0]);
+            ILGenerator il = foo.GetILGenerator();
+            il.MarkSequencePoint(document, 10, 0, 11, 0);
+            il.ThrowException(typeof(ApplicationException));
+            // MONO uses the next sequence point as the line number
+for the
+            // exception above
+            il.MarkSequencePoint(document, 10, 0, 11, 0);
+            il.Emit(OpCodes.Ret);
+
+            inner.CreateType();
+            outer.CreateType();
+
+            builder.Save(Path.GetFileName(fname));
+            return
+(IFoo)Activator.CreateInstance(Assembly.LoadFrom(fname).GetType(typeName));
+        }
+    }
+}
+
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to