public static void WriteTo(this BoundTreeNode node, TextWriter writer) { if (writer is IndentedTextWriter iw) { WriteTo(node, iw); } else { WriteTo(node, new IndentedTextWriter(writer)); } }
private static void WriteTo(this BoundTreeNode node, IndentedTextWriter writer) { switch (node) { case Block b: WriteBlock(b, writer); break; case VariableDeclaration vd: WriteVariableDeclaration(vd, writer); break; case FunctionDefinition fd: WriteFunctionDefinition(fd, writer); break; case ExpressionStatement es: WriteExpressionStatement(es, writer); break; case GotoStatement gs: WriteGotoStatement(gs, writer); break; case LabelStatement ls: WriteLabelStatement(ls, writer); break; case IfStatement ifs: WriteIfStatement(ifs, writer); break; case ReturnStatement rs: WriteReturnStatement(rs, writer); break; case AssignmentExpression ae: WriteAssignmentExpression(ae, writer); break; case VariableExpression ve: WriteVariableExpression(ve, writer); break; case ConversionExpression ce: WriteConversionExpression(ce, writer); break; case InvokeExpression ie: WriteInvokeExpression(ie, writer); break; case LiteralExpression le: WriteLiteralExpression(le, writer); break; case InvalidExpression inve: WriteInvalidExpression(inve, writer); break; case InvalidStatement _: writer.Write("<INV>"); writer.WriteLine(); break; default: writer.Write("<?>"); break; } }