예제 #1
0
 private static void WriteBoundConversionExpression(this IndentedTextWriter writer, BoundConversionExpression node)
 {
     writer.WriteBlueKeyword(node.ResultType.Name);
     writer.ColorWrite('(');
     writer.WriteBoundNode(node.Expression);
     writer.ColorWrite(')');
 }
예제 #2
0
 private static void WriteBoundUnaryExpression(this IndentedTextWriter writer, BoundUnaryExpression node)
 {
     writer.ColorWrite("(");
     writer.Write(node.Op.GetText());
     writer.WriteBoundNode(node.Expression);
     writer.ColorWrite(")");
 }
예제 #3
0
 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(")");
 }
예제 #4
0
 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("}");
 }
예제 #5
0
 private static void WriteBoundAssignmentExpression(this IndentedTextWriter writer, BoundAssignmentExpression node)
 {
     writer.WriteVariable(node.Variable !.Name);
     writer.WriteSpace();
     writer.ColorWrite("=");
     writer.WriteSpace();
     writer.WriteBoundNode(node.Expression);
 }
예제 #6
0
 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);
 }
예제 #7
0
        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(")");
        }
예제 #8
0
 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;
     }
 }
예제 #9
0
        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);
        }
예제 #10
0
 private static void WriteBoundGotoStatement(this IndentedTextWriter writer, BoundGotoStatement node)
 {
     writer.WriteMagentaKeyword("goto");
     writer.WriteSpace();
     writer.ColorWrite(node.Label.Identifier);
 }
예제 #11
0
 internal static void WriteBlueKeyword(this IndentedTextWriter writer, string keyword) => writer.ColorWrite(keyword, ConsoleColor.Blue);
예제 #12
0
 internal static void WriteMagentaKeyword(this IndentedTextWriter writer, string keyword) => writer.ColorWrite(keyword, ConsoleColor.Magenta);
예제 #13
0
 internal static void WriteString(this IndentedTextWriter writer, string content) => writer.ColorWrite($"\"{content}\"", ConsoleColor.DarkCyan);
예제 #14
0
 internal static void WriteFunction(this IndentedTextWriter writer, string name) => writer.ColorWrite(name, ConsoleColor.Yellow);
예제 #15
0
 internal static void WriteVariable(this IndentedTextWriter writer, string name) => writer.ColorWrite(name, ConsoleColor.Cyan);
예제 #16
0
 internal static void WriteNumber(this IndentedTextWriter writer, object val) => writer.ColorWrite(val, ConsoleColor.DarkGreen);