[svn] r6115: nemerle/trunk/ncc: generation/ILEmitter.n typing/OverloadPossibility.n

nazgul svnadmin at nemerle.org
Sat Feb 11 17:57:14 CET 2006


Log:
Avoid callvirt for this.not_virtual_method()

Author: nazgul
Date: Sat Feb 11 17:57:09 2006
New Revision: 6115

Modified:
   nemerle/trunk/ncc/generation/ILEmitter.n
   nemerle/trunk/ncc/typing/OverloadPossibility.n

Modified: nemerle/trunk/ncc/generation/ILEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/ILEmitter.n	(original)
+++ nemerle/trunk/ncc/generation/ILEmitter.n	Sat Feb 11 17:57:09 2006
@@ -1006,7 +1006,7 @@
               _ilg.Emit (OpCodes.Tailcall);
             }
             _ilg.Emit (OpCodes.Constrained, base_object.SystemType);
-            emit_method_call (expr, is_value_type || notvirt, method_inf);
+            emit_method_call (expr, false, method_inf); // constrained always need callvirt
             when (is_tail)
               _ilg.Emit (OpCodes.Ret);
           } else

Modified: nemerle/trunk/ncc/typing/OverloadPossibility.n
==============================================================================
--- nemerle/trunk/ncc/typing/OverloadPossibility.n	(original)
+++ nemerle/trunk/ncc/typing/OverloadPossibility.n	Sat Feb 11 17:57:09 2006
@@ -133,7 +133,7 @@
                     TExpr.StaticRef (from, meth, method_typarms)
                 }
               else
-                TExpr.MethodRef (expr, meth, method_typarms, notvirtual = false)
+                TExpr.MethodRef (expr, meth, method_typarms, notvirtual = expr is TExpr.This && !(meth.Attributes %&& NemerleAttributes.Virtual))
 
             | ev is IEvent =>
               if (ev.IsStatic)



More information about the svn mailing list