private static void WriteBoundConversionExpression(this IndentedTextWriter writer, BoundConversionExpression node) { writer.WriteBlueKeyword(node.ResultType.Name); writer.ColorWrite('('); writer.WriteBoundNode(node.Expression); writer.ColorWrite(')'); }
private static void WriteBoundUnaryExpression(this IndentedTextWriter writer, BoundUnaryExpression node) { writer.ColorWrite("("); writer.Write(node.Op.GetText()); writer.WriteBoundNode(node.Expression); writer.ColorWrite(")"); }
private static void WriteBoundBinaryExpression(this IndentedTextWriter writer, BoundBinaryExpression node) { writer.ColorWrite("("); writer.WriteBoundNode(node.Left); writer.WriteSpace(); writer.ColorWrite(node.Op.GetText()); writer.WriteSpace(); writer.WriteBoundNode(node.Right); writer.ColorWrite(")"); }
private static void WriteBoundBlockStatement(this IndentedTextWriter writer, BoundBlockStatement node) { writer.ColorWrite("{"); writer.Indent += 4; foreach (var n in node.Statements) { writer.WriteLine(); writer.WriteBoundNode(n); } writer.Indent -= 4; writer.WriteLine(); writer.ColorWrite("}"); }
private static void WriteBoundAssignmentExpression(this IndentedTextWriter writer, BoundAssignmentExpression node) { writer.WriteVariable(node.Variable !.Name); writer.WriteSpace(); writer.ColorWrite("="); writer.WriteSpace(); writer.WriteBoundNode(node.Expression); }
private static void WriteBoundVariableDeclarationStatement(this IndentedTextWriter writer, BoundVariableDeclarationStatement node) { writer.WriteBlueKeyword("var"); writer.WriteSpace(); writer.WriteVariable(node.Variable.Name); writer.WriteSpace(); writer.ColorWrite("="); writer.WriteSpace(); writer.WriteBoundNode(node.Expression); }
private static void WriteFunctionSymbol(this IndentedTextWriter writer, FunctionSymbol symbol) { writer.WriteBlueKeyword("func"); writer.WriteSpace(); writer.WriteFunction(symbol.Name); writer.ColorWrite("("); for (int i = 0; i < symbol.Parameters.Length; i++) { var parameter = symbol.Parameters[i]; writer.WriteVariable(parameter.Name); writer.ColorWrite(":"); writer.WriteSpace(); writer.WriteBlueKeyword(parameter.Type.Name); if (i != symbol.Parameters.Length - 1) { writer.ColorWrite(", "); } } writer.ColorWrite(")"); }
private static void WriteBoundLabelStatement(this IndentedTextWriter writer, BoundLabelStatement node) { if (writer is IndentedTextWriter iw) { iw.Indent -= 4; iw.ColorWrite(node.Label.Identifier + ":", ConsoleColor.DarkGray); iw.Indent += 4; } else { var iw2 = new IndentedTextWriter(writer); iw2.Indent -= 4; iw2.ColorWrite(node.Label.Identifier + ":", ConsoleColor.DarkGray); iw2.Indent += 4; } }
private static void WriteBoundConditionalGotoStatement(this IndentedTextWriter writer, BoundConditionalGotoStatement node) { writer.WriteMagentaKeyword("goto"); writer.WriteSpace(); writer.ColorWrite(node.Label.Identifier); writer.WriteSpace(); if (node.JumpIfFalse) { writer.WriteMagentaKeyword("unless"); } else { writer.WriteMagentaKeyword("if"); } writer.WriteSpace(); writer.WriteBoundNode(node.Condition); }
private static void WriteBoundGotoStatement(this IndentedTextWriter writer, BoundGotoStatement node) { writer.WriteMagentaKeyword("goto"); writer.WriteSpace(); writer.ColorWrite(node.Label.Identifier); }
internal static void WriteBlueKeyword(this IndentedTextWriter writer, string keyword) => writer.ColorWrite(keyword, ConsoleColor.Blue);
internal static void WriteMagentaKeyword(this IndentedTextWriter writer, string keyword) => writer.ColorWrite(keyword, ConsoleColor.Magenta);
internal static void WriteString(this IndentedTextWriter writer, string content) => writer.ColorWrite($"\"{content}\"", ConsoleColor.DarkCyan);
internal static void WriteFunction(this IndentedTextWriter writer, string name) => writer.ColorWrite(name, ConsoleColor.Yellow);
internal static void WriteVariable(this IndentedTextWriter writer, string name) => writer.ColorWrite(name, ConsoleColor.Cyan);
internal static void WriteNumber(this IndentedTextWriter writer, object val) => writer.ColorWrite(val, ConsoleColor.DarkGreen);