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_call.c,1.25,1.26 null_coder


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnet/engine cvmc_call.c,1.25,1.26 null_coder.c,1.18,1.19 verify_call.c,1.37,1.38 verify_except.c,1.7,1.8
Date: Wed, 07 May 2003 21:34:17 -0400

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

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


Redesign parameter handling for coder method calls so that empty "__arglist"
specifications will work correctly.


Index: cvmc_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/cvmc_call.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -r1.25 -r1.26
*** cvmc_call.c 14 Apr 2003 00:36:00 -0000      1.25
--- cvmc_call.c 8 May 2003 01:34:15 -0000       1.26
***************
*** 105,113 ****
   * Adjust the position of the stack for a call.
   */
! static void AdjustForCall(ILCoder *coder, ILEngineStackItem *args,
!                                                 ILUInt32 numArgs, 
ILEngineStackItem *returnItem,
!                                                 ILMethod *methodInfo)
  {
!       CVM_ADJUST(-(ILInt32)ComputeStackSize(coder, args, numArgs));
        if(returnItem != 0 && returnItem->engineType != ILEngineType_Invalid)
        {
--- 105,117 ----
   * Adjust the position of the stack for a call.
   */
! static void AdjustForCall(ILCoder *coder, ILCoderMethodInfo *info,
!                                                 ILEngineStackItem *returnItem)
  {
!       CVM_ADJUST(-(ILInt32)ComputeStackSize
!                                       (coder, info->args, info->numBaseArgs));
!       if(info->hasParamArray)
!       {
!               CVM_ADJUST(-1);
!       }
        if(returnItem != 0 && returnItem->engineType != ILEngineType_Invalid)
        {
***************
*** 116,125 ****
  }
  
! static void CVMCoder_CheckCallNull(ILCoder *coder, ILEngineStackItem *args,
!                                                              ILUInt32 
numArgs, int extraVarArgParam)
  {
!       ILUInt32 size = ComputeStackSize(coder, args, numArgs);
!       if(extraVarArgParam)
        {
                ++size;
        }
--- 120,129 ----
  }
  
! static void CVMCoder_CheckCallNull(ILCoder *coder, ILCoderMethodInfo *info)
  {
!       ILUInt32 size = ComputeStackSize(coder, info->args, info->numBaseArgs);
!       if(info->hasParamArray)
        {
+               /* Account for the vararg parameter array on the stack */
                ++size;
        }
***************
*** 135,140 ****
  }
  
! static void CVMCoder_CallMethod(ILCoder *coder, ILEngineStackItem *args,
!                                                           ILUInt32 numArgs,
                                                                
ILEngineStackItem *returnItem,
                                                                ILMethod 
*methodInfo)
--- 139,143 ----
  }
  
! static void CVMCoder_CallMethod(ILCoder *coder, ILCoderMethodInfo *info,
                                                                
ILEngineStackItem *returnItem,
                                                                ILMethod 
*methodInfo)
***************
*** 149,196 ****
                CVM_OUT_PTR(COP_CALL, methodInfo);
        }
!       AdjustForCall(coder, args, numArgs, returnItem, methodInfo);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallIndirect(ILCoder *coder, ILEngineStackItem *args,
!                                                             ILUInt32 numArgs,
                                                                  
ILEngineStackItem *returnItem)
  {
        CVM_OUT_NONE(COP_CALLI);
        CVM_ADJUST(-1); /* The function pointer was popped */
!       AdjustForCall(coder, args, numArgs, returnItem, 0);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallCtor(ILCoder *coder, ILEngineStackItem *args,
!                                                         ILUInt32 numArgs, 
ILMethod *methodInfo)
  {
        CallStaticConstructor(coder, ILMethod_Owner(methodInfo), 1);
        CVM_OUT_PTR(COP_CALL_CTOR, methodInfo);
!       CVM_ADJUST(-(ILInt32)ComputeStackSize(coder, args, numArgs));
        CVM_ADJUST(1);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallVirtual(ILCoder *coder, ILEngineStackItem *args,
!                                                    ILUInt32 numArgs,
                                                                 
ILEngineStackItem *returnItem,
                                                                 ILMethod 
*methodInfo)
  {
!       ILUInt32 argSize = ComputeStackSize(coder, args, numArgs);
        CVM_OUT_DWIDE(COP_CALL_VIRTUAL, argSize, methodInfo->index);
!       AdjustForCall(coder, args, numArgs, returnItem, methodInfo);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallInterface(ILCoder *coder, ILEngineStackItem *args,
!                                                          ILUInt32 numArgs,
                                                                   
ILEngineStackItem *returnItem,
                                                                   ILMethod 
*methodInfo)
  {
        void *ptr = ILMethod_Owner(methodInfo);
!       ILUInt32 argSize = ComputeStackSize(coder, args, numArgs);
        CVM_OUT_DWIDE_PTR(COP_CALL_INTERFACE, argSize, methodInfo->index, ptr);
!       AdjustForCall(coder, args, numArgs, returnItem, methodInfo);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
--- 152,204 ----
                CVM_OUT_PTR(COP_CALL, methodInfo);
        }
!       AdjustForCall(coder, info, returnItem);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallIndirect(ILCoder *coder, ILCoderMethodInfo *info,
                                                                  
ILEngineStackItem *returnItem)
  {
        CVM_OUT_NONE(COP_CALLI);
        CVM_ADJUST(-1); /* The function pointer was popped */
!       AdjustForCall(coder, info, returnItem);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallCtor(ILCoder *coder, ILCoderMethodInfo *info,
!                                                         ILMethod *methodInfo)
  {
        CallStaticConstructor(coder, ILMethod_Owner(methodInfo), 1);
        CVM_OUT_PTR(COP_CALL_CTOR, methodInfo);
!       AdjustForCall(coder, info, 0);
        CVM_ADJUST(1);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallVirtual(ILCoder *coder, ILCoderMethodInfo *info,
                                                                 
ILEngineStackItem *returnItem,
                                                                 ILMethod 
*methodInfo)
  {
!       ILUInt32 argSize = ComputeStackSize(coder, info->args, 
info->numBaseArgs);
!       if(info->hasParamArray)
!       {
!               ++argSize;
!       }
        CVM_OUT_DWIDE(COP_CALL_VIRTUAL, argSize, methodInfo->index);
!       AdjustForCall(coder, info, returnItem);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }
  
! static void CVMCoder_CallInterface(ILCoder *coder, ILCoderMethodInfo *info,
                                                                   
ILEngineStackItem *returnItem,
                                                                   ILMethod 
*methodInfo)
  {
        void *ptr = ILMethod_Owner(methodInfo);
!       ILUInt32 argSize = ComputeStackSize(coder, info->args, 
info->numBaseArgs);
!       if(info->hasParamArray)
!       {
!               ++argSize;
!       }
        CVM_OUT_DWIDE_PTR(COP_CALL_INTERFACE, argSize, methodInfo->index, ptr);
!       AdjustForCall(coder, info, returnItem);
        ((ILCVMCoder *)coder)->tailCallFlag = 0;
  }

Index: null_coder.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/null_coder.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -r1.18 -r1.19
*** null_coder.c        14 Apr 2003 00:36:00 -0000      1.18
--- null_coder.c        8 May 2003 01:34:15 -0000       1.19
***************
*** 270,297 ****
  {
  }
! static void Coder_CheckCallNull(ILCoder *coder, ILEngineStackItem *args,
!                                                           ILUInt32 numArgs, 
int extraVarArgParam)
  {
  }
! static void Coder_CallMethod(ILCoder *coder, ILEngineStackItem *args,
!                                                        ILUInt32 numArgs, 
ILEngineStackItem *returnItem,
                                                         ILMethod *methodInfo)
  {
  }
! static void Coder_CallIndirect(ILCoder *coder, ILEngineStackItem *args,
!                                                          ILUInt32 numArgs, 
ILEngineStackItem *returnItem)
  {
  }
! static void Coder_CallCtor(ILCoder *coder, ILEngineStackItem *args,
!                                                  ILUInt32 numArgs, ILMethod 
*methodInfo)
  {
  }
! static void Coder_CallVirtual(ILCoder *coder, ILEngineStackItem *args,
!                                                 ILUInt32 numArgs, 
ILEngineStackItem *returnItem,
                                                          ILMethod *methodInfo)
  {
  }
! static void Coder_CallInterface(ILCoder *coder, ILEngineStackItem *args,
!                                                       ILUInt32 numArgs, 
ILEngineStackItem *returnItem,
                                                                ILMethod 
*methodInfo)
  {
--- 270,296 ----
  {
  }
! static void Coder_CheckCallNull(ILCoder *coder, ILCoderMethodInfo *info)
  {
  }
! static void Coder_CallMethod(ILCoder *coder, ILCoderMethodInfo *info,
!                                                        ILEngineStackItem 
*returnItem,
                                                         ILMethod *methodInfo)
  {
  }
! static void Coder_CallIndirect(ILCoder *coder, ILCoderMethodInfo *info,
!                                                          ILEngineStackItem 
*returnItem)
  {
  }
! static void Coder_CallCtor(ILCoder *coder, ILCoderMethodInfo *info,
!                                                  ILMethod *methodInfo)
  {
  }
! static void Coder_CallVirtual(ILCoder *coder, ILCoderMethodInfo *info,
!                                                 ILEngineStackItem *returnItem,
                                                          ILMethod *methodInfo)
  {
  }
! static void Coder_CallInterface(ILCoder *coder, ILCoderMethodInfo *info,
!                                                       ILEngineStackItem 
*returnItem,
                                                                ILMethod 
*methodInfo)
  {

Index: verify_call.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/verify_call.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -r1.37 -r1.38
*** verify_call.c       14 Apr 2003 01:16:31 -0000      1.37
--- verify_call.c       8 May 2003 01:34:15 -0000       1.38
***************
*** 174,178 ****
                                                      ILMethod *method, int 
unsafeAllowed,
                                                          int suppressThis, int 
indirectCall,
!                                                         ILUInt32 
*numVarArgParams)
  {
        ILClass *owner = (method ? ILMethod_Owner(method) : 0);
--- 174,178 ----
                                                      ILMethod *method, int 
unsafeAllowed,
                                                          int suppressThis, int 
indirectCall,
!                                                         ILCoderMethodInfo 
*callInfo)
  {
        ILClass *owner = (method ? ILMethod_Owner(method) : 0);
***************
*** 193,197 ****
        /* Check the vararg vs non-vararg conventions, and get the
           number of non-vararg parameters */
-       *numVarArgParams = 0;
  #ifdef IL_CONFIG_VARARGS
        if(indirectCall)
--- 193,196 ----
***************
*** 615,618 ****
--- 614,623 ----
        }
  
+       /* Initialize the call argument information */
+       callInfo->args = stack;
+       callInfo->numBaseArgs = numParams;
+       callInfo->numVarArgs = totalParams - numParams;
+       callInfo->hasParamArray = 0;
+ 
  #ifdef IL_CONFIG_VARARGS
        /* Convert the vararg parameters into an "Object[]" array */
***************
*** 622,626 ****
                                                   (hasThis ? numParams + 1 : 
numParams + 2),
                                                   stack + numParams, 
totalParams - numParams);
!               *numVarArgParams = totalParams - numParams;
        }
  #endif /* IL_CONFIG_VARARGS */
--- 627,631 ----
                                                   (hasThis ? numParams + 1 : 
numParams + 2),
                                                   stack + numParams, 
totalParams - numParams);
!               callInfo->hasParamArray = 1;
        }
  #endif /* IL_CONFIG_VARARGS */
***************
*** 958,963 ****
  ILType *methodSignature;
  ILType *returnType;
  ILInt32 numParams;
- ILUInt32 numVarArgParams;
  int inlineType;
  
--- 963,968 ----
  ILType *methodSignature;
  ILType *returnType;
+ ILCoderMethodInfo callInfo;
  ILInt32 numParams;
  int inlineType;
  
***************
*** 1013,1017 ****
                        numParams = MatchSignature(coder, stack, stackSize,
                                                                           
methodSignature, methodInfo,
!                                                                          
unsafeAllowed, 0, 0, &numVarArgParams);
                        if(numParams >= 0)
                        {
--- 1018,1022 ----
                        numParams = MatchSignature(coder, stack, stackSize,
                                                                           
methodSignature, methodInfo,
!                                                                          
unsafeAllowed, 0, 0, &callInfo);
                        if(numParams >= 0)
                        {
***************
*** 1030,1035 ****
                                   !ILCoderCallInlineable(coder, inlineType, 
methodInfo))
                                {
!                                       ILCoderCallMethod(coder, stack + 
stackSize - numParams,
!                                                                         
(ILUInt32)numParams, &(stack[stackSize]),
                                                                          
methodInfo);
                                }
--- 1035,1039 ----
                                   !ILCoderCallInlineable(coder, inlineType, 
methodInfo))
                                {
!                                       ILCoderCallMethod(coder, &callInfo, 
&(stack[stackSize]),
                                                                          
methodInfo);
                                }
***************
*** 1109,1113 ****
                                                                   
methodSignature, 0,
                                                                   
unsafeAllowed, 0, 1,
!                                                                  
&numVarArgParams);
                if(numParams >= 0)
                {
--- 1113,1117 ----
                                                                   
methodSignature, 0,
                                                                   
unsafeAllowed, 0, 1,
!                                                                  &callInfo);
                if(numParams >= 0)
                {
***************
*** 1122,1127 ****
                                stack[stackSize].engineType = 
ILEngineType_Invalid;
                        }
!                       ILCoderCallIndirect(coder, stack + stackSize - 
numParams,
!                                                           
(ILUInt32)numParams, &(stack[stackSize]));
                        stackSize -= (ILUInt32)numParams;
                        if(returnType != ILType_Void)
--- 1126,1130 ----
                                stack[stackSize].engineType = 
ILEngineType_Invalid;
                        }
!                       ILCoderCallIndirect(coder, &callInfo, 
&(stack[stackSize]));
                        stackSize -= (ILUInt32)numParams;
                        if(returnType != ILType_Void)
***************
*** 1193,1197 ****
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 0, 0,
!                                                                          
&numVarArgParams);
                        if(numParams >= 0)
                        {
--- 1196,1200 ----
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 0, 0,
!                                                                          
&callInfo);
                        if(numParams >= 0)
                        {
***************
*** 1220,1231 ****
                                                {
                                                        /* Check the first 
parameter against "null" */
!                                                       ILCoderCheckCallNull
!                                                               (coder, stack + 
stackSize - numParams,
!                                                                
((ILUInt32)numParams) - numVarArgParams,
!                                                                
(ILType_Kind(methodSignature) &
!                                                                       
IL_TYPE_COMPLEX_METHOD_SENTINEL) != 0);
                                                }
!                                               ILCoderCallMethod(coder, stack 
+ stackSize - numParams,
!                                                                               
  (ILUInt32)numParams,
                                                                                
  &(stack[stackSize]), methodInfo);
                                        }
--- 1223,1229 ----
                                                {
                                                        /* Check the first 
parameter against "null" */
!                                                       
ILCoderCheckCallNull(coder, &callInfo);
                                                }
!                                               ILCoderCallMethod(coder, 
&callInfo,
                                                                                
  &(stack[stackSize]), methodInfo);
                                        }
***************
*** 1233,1244 ****
                                else 
if(ILClass_IsInterface(ILMethod_Owner(methodInfo)))
                                {
!                                       ILCoderCallInterface(coder, stack + 
stackSize - numParams,
!                                                                            
(ILUInt32)numParams,
                                                                                
 &(stack[stackSize]), methodInfo);
                                }
                                else
                                {
!                                       ILCoderCallVirtual(coder, stack + 
stackSize - numParams,
!                                                                          
(ILUInt32)numParams,
                                                                           
&(stack[stackSize]), methodInfo);
                                }
--- 1231,1240 ----
                                else 
if(ILClass_IsInterface(ILMethod_Owner(methodInfo)))
                                {
!                                       ILCoderCallInterface(coder, &callInfo,
                                                                                
 &(stack[stackSize]), methodInfo);
                                }
                                else
                                {
!                                       ILCoderCallVirtual(coder, &callInfo,
                                                                           
&(stack[stackSize]), methodInfo);
                                }
***************
*** 1294,1299 ****
  
                        /* Call the allocation constructor for the delegate */
!                       ILCoderCallCtor(coder, stack + stackSize - numParams,
!                                                   (ILUInt32)numParams, 
methodInfo);
                        stackSize -= (ILUInt32)numParams;
                        stack[stackSize].engineType = ILEngineType_O;
--- 1290,1298 ----
  
                        /* Call the allocation constructor for the delegate */
!                       callInfo.args = stack + stackSize - numParams;
!                       callInfo.numBaseArgs = (ILUInt32)numParams;
!                       callInfo.numVarArgs = 0;
!                       callInfo.hasParamArray = 0;
!                       ILCoderCallCtor(coder, &callInfo, methodInfo);
                        stackSize -= (ILUInt32)numParams;
                        stack[stackSize].engineType = ILEngineType_O;
***************
*** 1307,1311 ****
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 1, 0,
!                                                                          
&numVarArgParams);
                        if(numParams < 0)
                        {
--- 1306,1310 ----
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 1, 0,
!                                                                          
&callInfo);
                        if(numParams < 0)
                        {
***************
*** 1314,1319 ****
  
                        /* Call the allocation constructor for the class */
!                       ILCoderCallCtor(coder, stack + stackSize - numParams,
!                                                   (ILUInt32)numParams, 
methodInfo);
                        stackSize -= (ILUInt32)numParams;
                        if(stackSize < code->maxStack)
--- 1313,1317 ----
  
                        /* Call the allocation constructor for the class */
!                       ILCoderCallCtor(coder, &callInfo, methodInfo);
                        stackSize -= (ILUInt32)numParams;
                        if(stackSize < code->maxStack)
***************
*** 1348,1352 ****
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 0, 0,
!                                                                          
&numVarArgParams);
                        if(numParams < 0)
                        {
--- 1346,1350 ----
                                                                           
methodSignature, methodInfo,
                                                                           
unsafeAllowed, 0, 0,
!                                                                          
&callInfo);
                        if(numParams < 0)
                        {
***************
*** 1355,1360 ****
  
                        /* Call the constructor and pop all of its arguments */
!                       ILCoderCallMethod(coder, stack + stackSize - numParams,
!                                                         (ILUInt32)numParams, 
0, methodInfo);
                        stackSize -= (ILUInt32)numParams;
  
--- 1353,1357 ----
  
                        /* Call the constructor and pop all of its arguments */
!                       ILCoderCallMethod(coder, &callInfo, 0, methodInfo);
                        stackSize -= (ILUInt32)numParams;
  
***************
*** 1497,1501 ****
                                                                   
methodSignature, methodInfo,
                                                                   
unsafeAllowed, 0, 0,
!                                                                  
&numVarArgParams);
  
                case IL_OP_CALLI:
--- 1494,1498 ----
                                                                   
methodSignature, methodInfo,
                                                                   
unsafeAllowed, 0, 0,
!                                                                  &callInfo);
  
                case IL_OP_CALLI:

Index: verify_except.c
===================================================================
RCS file: /cvsroot/dotgnu-pnet/pnet/engine/verify_except.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** verify_except.c     20 Dec 2002 16:00:36 -0000      1.7
--- verify_except.c     8 May 2003 01:34:15 -0000       1.8
***************
*** 167,170 ****
--- 167,171 ----
        ILClass *classInfo;
        ILMethod *ctor;
+       ILCoderMethodInfo callInfo;
  
        /* Find the no-argument constructor for the class */
***************
*** 191,195 ****
  
        /* Invoke the constructor */
!       ILCoderCallCtor(coder, 0, 0, ctor);
  
        /* Throw the object */
--- 192,200 ----
  
        /* Invoke the constructor */
!       callInfo.args = 0;
!       callInfo.numBaseArgs = 0;
!       callInfo.numVarArgs = 0;
!       callInfo.hasParamArray = 0;
!       ILCoderCallCtor(coder, &callInfo, ctor);
  
        /* Throw the object */





reply via email to

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