http://bugzilla.novell.com/show_bug.cgi?id=610919
http://bugzilla.novell.com/show_bug.cgi?id=610919#c0 Summary: Cannot use anonymous delegates inside explicit events Classification: Mono Product: Mono: Compilers Version: 2.6.x Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: P5 - None Component: C# AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Created an attachment (id=366380) --> (http://bugzilla.novell.com/attachment.cgi?id=366380) testcase In the attached testcase, gmcs hates wrapping the 'value' in the 'add' handler in an anonymous delegate. If you changed the add handler to read: add { var v = value; myEvent += delegate { v (this, EventArgs.Empty); }; } then it compiles perfectly and gives the expected output of: Hey! from BaseTest.MainClass / System.EventArgs Right now it gives the output: Internal compiler error at a.cs(11,45):: exception caught while emitting MethodBuilder [<>c__AnonStorey1::<>m__1] Unhandled Exception: System.ArgumentException: Trying to emit a local from a different ILGenerator. at System.Reflection.Emit.ILGenerator.Emit (OpCode opcode, System.Reflection.Emit.LocalBuilder local) [0x0038b] in /data/Projects/mcs/class/corlib/System.Reflection.Emit/ILGenerator.cs:721 at Mono.CSharp.EmitContext.Emit (OpCode opcode, System.Reflection.Emit.LocalBuilder local) [0x00000] in /data/Projects/mcs/mcs/codegen.cs:417 at Mono.CSharp.LocalTemporary.Emit (Mono.CSharp.EmitContext ec) [0x00016] in /data/Projects/mcs/mcs/assign.cs:222 at Mono.CSharp.MemberExpr.EmitInstance (Mono.CSharp.EmitContext ec, Boolean prepare_for_load) [0x0006d] in /data/Projects/mcs/mcs/ecore.cs:2829 at Mono.CSharp.FieldExpr.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x00067] in /data/Projects/mcs/mcs/ecore.cs:4532 at Mono.CSharp.HoistedVariable.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x00000] in /data/Projects/mcs/mcs/anonymous.cs:656 at Mono.CSharp.VariableReference.Emit (Mono.CSharp.EmitContext ec, Boolean leave_copy) [0x0000e] in /data/Projects/mcs/mcs/expression.cs:4350 at Mono.CSharp.VariableReference.Emit (Mono.CSharp.EmitContext ec) [0x00000] in /data/Projects/mcs/mcs/expression.cs:4325 at Mono.CSharp.Invocation.EmitCall (Mono.CSharp.EmitContext ec, Boolean is_base, Mono.CSharp.Expression instance_expr, Mono.CSharp.MethodSpec method, Mono.CSharp.Arguments Arguments, Location loc, Boolean dup_args, Boolean omit_args) [0x00163] in /data/Projects/mcs/mcs/expression.cs:5138 at Mono.CSharp.Invocation.EmitCall (Mono.CSharp.EmitContext ec, Boolean is_base, Mono.CSharp.Expression instance_expr, Mono.CSharp.MethodSpec method, Mono.CSharp.Arguments Arguments, Location loc) [0x00000] in /data/Projects/mcs/mcs/expression.cs:5065 at Mono.CSharp.DelegateInvocation.Emit (Mono.CSharp.EmitContext ec) [0x00000] in /data/Projects/mcs/mcs/delegate.cs:720 at Mono.CSharp.DelegateInvocation.EmitStatement (Mono.CSharp.EmitContext ec) [0x00000] in /data/Projects/mcs/mcs/delegate.cs:725 at Mono.CSharp.StatementExpression.DoEmit (Mono.CSharp.EmitContext ec) [0x00000] in /data/Projects/mcs/mcs/statement.cs:619 at Mono.CSharp.Statement.Emit (Mono.CSharp.EmitContext ec) [0x0000c] in /data/Projects/mcs/mcs/statement.cs:67 at Mono.CSharp.Block.DoEmit (Mono.CSharp.EmitContext ec) [0x00014] in /data/Projects/mcs/mcs/statement.cs:2141 at Mono.CSharp.Block.Emit (Mono.CSharp.EmitContext ec) [0x0001e] in /data/Projects/mcs/mcs/statement.cs:2151 at Mono.CSharp.ExplicitBlock.Emit (Mono.CSharp.EmitContext ec) [0x0004d] in /data/Projects/mcs/mcs/statement.cs:2297 at Mono.CSharp.ToplevelBlock.Emit (Mono.CSharp.EmitContext ec) [0x00030] in /data/Projects/mcs/mcs/statement.cs:2831 at Mono.CSharp.MethodData.Emit (Mono.CSharp.DeclSpace parent) [0x000d1] in /data/Projects/mcs/mcs/method.cs:1911 at Mono.CSharp.MethodOrOperator.Emit () [0x001a9] in /data/Projects/mcs/mcs/method.cs:608 at Mono.CSharp.Method.Emit () [0x00112] in /data/Projects/mcs/mcs/method.cs:1134 -- Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
