2002-09-09 Martin Baulig <martin@gnome.org>
[mono.git] / mcs / mcs / delegate.cs
index 875c86ea2229da291b7dca5dc614835ca91f5193..853d6902542ca2a2e1e0479b533f1b9227ca358a 100644 (file)
@@ -656,7 +656,11 @@ namespace Mono.CSharp {
                        else\r
                                delegate_instance_expr.Emit (ec);\r
                        \r
-                       ec.ig.Emit (OpCodes.Ldftn, (MethodInfo) delegate_method);\r
+                       if (delegate_method.IsVirtual) {\r
+                               ec.ig.Emit (OpCodes.Dup);\r
+                               ec.ig.Emit (OpCodes.Ldvirtftn, (MethodInfo) delegate_method);\r
+                       } else\r
+                               ec.ig.Emit (OpCodes.Ldftn, (MethodInfo) delegate_method);\r
                        ec.ig.Emit (OpCodes.Newobj, (ConstructorInfo) constructor_method);\r
                }\r
        }\r