private void MakeOutputTypeInferences()
{
// SPEC: Otherwise, for all arguments Ei with corresponding parameter CType Ti
// SPEC: where the output types contain unfixed CType parameters but the input
// SPEC: types do not, an output CType inference is made from Ei to Ti.
for (int iArg = 0; iArg < _pMethodArguments.carg; iArg++)
{
CType pDest = _pMethodFormalParameterTypes.Item(iArg);
if (pDest.IsParameterModifierType())
{
pDest = pDest.AsParameterModifierType().GetParameterType();
}
EXPR pExpr = _pMethodArguments.prgexpr[iArg];
if (HasUnfixedParamInOutputType(pExpr, pDest) &&
!HasUnfixedParamInInputType(pExpr, pDest))
{
CType pSource = _pMethodArguments.types.Item(iArg);
if (pSource.IsParameterModifierType())
{
pSource = pSource.AsParameterModifierType().GetParameterType();
}
OutputTypeInference(pExpr, pSource, pDest);
}
}
}