public override string ToString()
{
// Array literal.
if (this.Value is List<Expression>)
{
var result = new System.Text.StringBuilder("[");
foreach (var item in (List<Expression>)this.Value)
{
if (result.Length > 1)
result.Append(", ");
result.Append(item);
}
result.Append("]");
return result.ToString();
}
// Object literal.
if (this.Value is List<KeyValuePair<Expression, Expression>>)
{
var result = new System.Text.StringBuilder("{");
foreach (var keyValuePair in (List<KeyValuePair<Expression, Expression>>)this.Value)
{
if (result.Length > 1)
result.Append(", ");
if (keyValuePair.Value is Expression)
{
if (keyValuePair.Key is Expression)
result.Append('[');
result.Append(keyValuePair.Key);
if (keyValuePair.Key is Expression)
result.Append(']');
result.Append(": ");
result.Append(keyValuePair.Value);
}
else if (keyValuePair.Value is FunctionExpression)
{
var function = (FunctionExpression)keyValuePair.Value;
if (function.DeclarationType == FunctionDeclarationType.Getter)
result.Append("get ");
else if (function.DeclarationType == FunctionDeclarationType.Setter)
result.Append("set ");
result.Append(function.ToString().Substring(9));
}
}
result.Append("}");
return result.ToString();
}
// RegExp literal.
if (this.Value is RegularExpressionLiteral)
return this.Value.ToString();
// String literal.
if (this.Value is string)
return Library.StringInstance.Quote((string)this.Value);
// Everything else.
return TypeConverter.ToString(this.Value);
}