2005-01-29 Miguel de Icaza <miguel@novell.com>
authorMiguel de Icaza <miguel@gnome.org>
Sat, 29 Jan 2005 18:19:06 +0000 (18:19 -0000)
committerMiguel de Icaza <miguel@gnome.org>
Sat, 29 Jan 2005 18:19:06 +0000 (18:19 -0000)
* pending.cs: Produce better code (no nops produced by using Ldarg
+ value).

svn path=/trunk/mcs/; revision=39749

mcs/mcs/ChangeLog
mcs/mcs/pending.cs

index 4262f60836f3c2160136ae8a0adc520b58a83f36..6962bdfeb682d0f9af8d36c053ae2e9079b3dbbf 100644 (file)
@@ -1,5 +1,8 @@
 2005-01-29  Miguel de Icaza  <miguel@novell.com>
 
+       * pending.cs: Produce better code (no nops produced by using Ldarg
+       + value).
+       
        * pending.cs (PendingImplementation.DefineProxy): It was not `arg
        i - 1' it should be arg + 1.
 
index 81cb2b7d67048a4d60653151e1572024c49ef3f0..6dac4129f483812027b0e4daa78fcd329a17cb5e 100644 (file)
@@ -468,19 +468,9 @@ namespace Mono.CSharp {
                        int top = args.Length;
                        ILGenerator ig = proxy.GetILGenerator ();
 
-                       ig.Emit (OpCodes.Ldarg_0);
-                       for (int i = 0; i < top; i++){
-                               switch (i){
-                               case 0:
-                                       ig.Emit (OpCodes.Ldarg_1); break;
-                               case 1:
-                                       ig.Emit (OpCodes.Ldarg_2); break;
-                               case 2:
-                                       ig.Emit (OpCodes.Ldarg_3); break;
-                               default:
-                                       ig.Emit (OpCodes.Ldarg, i + 1); break;
-                               }
-                       }
+                       for (int i = 0; i <= top; i++)
+                               ParameterReference.EmitLdArg (ig, i);
+
                        ig.Emit (OpCodes.Call, base_method);
                        ig.Emit (OpCodes.Ret);