[Top][All Lists]
[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 */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [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,
Rhys Weatherley <address@hidden> <=