From: Marek Safar Date: Tue, 14 Dec 2010 14:10:14 +0000 (+0000) Subject: [656918] Emit instance expression for ET delegate creation X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=bc7cc6c935d5dd7c32308a584ebedd6b4b2ff141;p=mono.git [656918] Emit instance expression for ET delegate creation --- diff --git a/mcs/mcs/delegate.cs b/mcs/mcs/delegate.cs index 5363231550a..1d7be8f894b 100644 --- a/mcs/mcs/delegate.cs +++ b/mcs/mcs/delegate.cs @@ -451,7 +451,12 @@ namespace Mono.CSharp { Arguments args = new Arguments (3); args.Add (new Argument (new TypeOf (new TypeExpression (type, loc), loc))); - args.Add (new Argument (new NullLiteral (loc))); + + if (method_group.InstanceExpression == null) + args.Add (new Argument (new NullLiteral (loc))); + else + args.Add (new Argument (method_group.InstanceExpression.CreateExpressionTree (ec))); + args.Add (new Argument (method_group.CreateExpressionTree (ec))); Expression e = new Invocation (ma, args).Resolve (ec); if (e == null) diff --git a/mcs/tests/gtest-etree-07.cs b/mcs/tests/gtest-etree-07.cs index 067717a7f1e..14455fac6a1 100644 --- a/mcs/tests/gtest-etree-07.cs +++ b/mcs/tests/gtest-etree-07.cs @@ -20,6 +20,21 @@ class C return (int*)1; } + void M () + { + } + + int TestInstance () + { + Expression> e = () => M; + Console.WriteLine (e.Body.ToString ()); + if (e.Body.ToString () != "Convert(CreateDelegate(EmptyDelegate, value(C), Void M()))") + return 1; + + e.Compile () (); + return 0; + } + public static int Main () { Expression> e = () => new EmptyDelegate (Test); @@ -52,6 +67,9 @@ class C if (v3.Invoke ()() != (int*)1) return 6; } + + if (new C ().TestInstance () != 0) + return 7; Console.WriteLine ("OK"); return 0;