private void PrintArgumentList(IEnumerable<IExpression> arguments, IEnumerable<IParameterTypeInformation> parameters) {
this.sourceEmitterOutput.Write("(");
var paramEnum = parameters.GetEnumerator();
bool paramIsValid = true;
bool needComma = false;
foreach (IExpression argument in arguments) {
paramIsValid = paramIsValid && paramEnum.MoveNext();
if (needComma) {
this.PrintToken(CSharpToken.Comma);
this.PrintToken(CSharpToken.Space);
}
var addressOf = argument as IAddressOf;
if (addressOf != null) {
string modifier = "ref ";
if (paramIsValid) {
var pardef = paramEnum.Current as IParameterDefinition;
if (pardef != null && pardef.IsByReference && pardef.IsOut && !pardef.IsIn)
modifier = "out ";
}
this.sourceEmitterOutput.Write(modifier);
this.Traverse(addressOf.Expression);
} else
this.Traverse(argument);
needComma = true;
}
this.sourceEmitterOutput.Write(")");
}