public override Expression VisitLiteral(Literal literal)
{
// TODO: probably need special cases here for the various integer & real types.
// Also need to investigate quoting behavior in string literals.
if (literal.Value == null)
Write("null");
else if (literal.Value is string)
Write("@\"{0}\"", literal.Value.ToString().Replace("\"", "\"\""));
else if (literal.Value is bool)
Write(((bool)literal.Value) ? "true" : "false");
else if (literal.Value is char)
Write("'\\x{0:X4}'", ((ushort)(char)literal.Value));
else if (literal.Value is TypeNode)
this.VisitTypeReference((TypeNode)literal.Value);
else if (literal.Type == SystemTypes.UInt64)
Write("{0}ul", literal.Value);
else
Write("{0}", literal.Value);
return literal;
}