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