dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnet/engine cvmc.c,1.33,1.34 cvmc_call.c,1.20


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/engine cvmc.c,1.33,1.34 cvmc_call.c,1.20,1.21 null_coder.c,1.13,1.14 verify_call.c,1.27,1.28
Date: Thu, 14 Nov 2002 20:37:44 -0500

Update of /cvsroot/dotgnu-pnet/pnet/engine
In directory subversions:/tmp/cvs-serv8950/engine

Modified Files:
        cvmc.c cvmc_call.c null_coder.c verify_call.c 
Log Message:


Use "callvirt" instead of "call" to call non-virtual instance methods,
so that runtime null pointer checks happen automatically.


Index: cvmc.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -C2 -r1.33 -r1.34
*** cvmc.c      24 Jun 2002 05:54:37 -0000      1.33
--- cvmc.c      15 Nov 2002 01:37:42 -0000      1.34
***************
*** 432,435 ****
--- 432,436 ----
        CVMCoder_PackVarArgs,
        CVMCoder_ValueCtorArgs,
+       CVMCoder_CheckCallNull,
        CVMCoder_CallMethod,
        CVMCoder_CallIndirect,

Index: cvmc_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc_call.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -C2 -r1.20 -r1.21
*** cvmc_call.c 24 Jun 2002 05:54:37 -0000      1.20
--- cvmc_call.c 15 Nov 2002 01:37:42 -0000      1.21
***************
*** 116,119 ****
--- 116,134 ----
  }
  
+ static void CVMCoder_CheckCallNull(ILCoder *coder, ILEngineStackItem *args,
+                                                              ILUInt32 numArgs)
+ {
+       ILUInt32 size = ComputeStackSize(coder, args, numArgs);
+       if(size == 1)
+       {
+               CVM_OUT_NONE(COP_CKNULL);
+       }
+       else
+       {
+               --size;
+               CVM_OUT_WIDE(COP_CKNULL_N, size);
+       }
+ }
+ 
  static void CVMCoder_CallMethod(ILCoder *coder, ILEngineStackItem *args,
                                                            ILUInt32 numArgs,

Index: null_coder.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/null_coder.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -r1.13 -r1.14
*** null_coder.c        24 Jun 2002 05:54:37 -0000      1.13
--- null_coder.c        15 Nov 2002 01:37:42 -0000      1.14
***************
*** 270,273 ****
--- 270,277 ----
  {
  }
+ static void Coder_CheckCallNull(ILCoder *coder, ILEngineStackItem *args,
+                                                           ILUInt32 numArgs)
+ {
+ }
  static void Coder_CallMethod(ILCoder *coder, ILEngineStackItem *args,
                                                         ILUInt32 numArgs, 
ILEngineStackItem *returnItem,
***************
*** 435,438 ****
--- 439,443 ----
        Coder_PackVarArgs,
        Coder_ValueCtorArgs,
+       Coder_CheckCallNull,
        Coder_CallMethod,
        Coder_CallIndirect,

Index: verify_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/verify_call.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -r1.27 -r1.28
*** verify_call.c       16 Sep 2002 02:17:22 -0000      1.27
--- verify_call.c       15 Nov 2002 01:37:42 -0000      1.28
***************
*** 1195,1198 ****
--- 1195,1207 ----
                                           !ILCoderCallInlineable(coder, 
inlineType))
                                        {
+                                               if(numParams > 0 && 
!ILMethod_IsStatic(methodInfo) &&
+                                                  (stack + stackSize - 
numParams)->engineType
+                                                               == 
ILEngineType_O)
+                                               {
+                                                       /* Check the first 
parameter against "null" */
+                                                       ILCoderCheckCallNull
+                                                               (coder, stack + 
stackSize - numParams,
+                                                                
(ILUInt32)numParams);
+                                               }
                                                ILCoderCallMethod(coder, stack 
+ stackSize - numParams,
                                                                                
  (ILUInt32)numParams,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]