private void CheckActualAgainstFormal(Dictionary<string, Expression> actuals, Expression expression,
Parameter parameter)
{
actuals[parameter.Name] = expression;
expression.CheckExpression();
Type argumentType = expression.GetExpressionType();
if (argumentType == null)
{
AddError("Cannot evaluate argument type for argument " + expression, RuleChecksEnum.SemanticAnalysisError);
}
else
{
if (parameter.Type == null)
{
AddError("Cannot evaluate formal parameter type for " + parameter.Name, RuleChecksEnum.SemanticAnalysisError);
}
else
{
if (!parameter.Type.Match(argumentType))
{
AddError("Invalid argument " + expression + " type, expected " +
parameter.Type.FullName + ", actual " + argumentType.FullName, RuleChecksEnum.SemanticAnalysisError);
}
}
}
}