public string AsString()
{
// TODO Use String Builder
string result = this.target.AsString();
if (this.target is MessageExpression)
{
MessageExpression mexpr = (MessageExpression)this.target;
if ((this.IsUnaryMessage && (mexpr.IsBinaryMessage || mexpr.IsKeywordMessage)) ||
(this.IsBinaryMessage && mexpr.IsKeywordMessage) ||
(this.IsKeywordMessage && mexpr.IsKeywordMessage))
result = "(" + result + ")";
}
// TODO Use string.Format
if (this.arguments.Count() == 0)
if (this.selector == "-")
return "-" + result;
else
return result + " " + this.selector;
if (this.IsBinaryMessage)
{
IExpression arg = this.arguments.First();
string argresult = arg.AsString();
if (arg is MessageExpression && (((MessageExpression)arg).IsBinaryMessage || ((MessageExpression)arg).IsKeywordMessage))
argresult = "(" + argresult + ")";
return result + " " + this.selector + " " + argresult;
}
string[]names = this.selector.Split(':');
int k = 0;
foreach (IExpression expr in this.arguments)
{
string exprresult = expr.AsString();
if (expr is MessageExpression && ((MessageExpression)expr).IsKeywordMessage)
exprresult = "(" + exprresult + ")";
result += " " + names[k] + ": " + exprresult;
k++;
}
return result;
}