in src/contrib/msc/core/printer/msc_base_printer.cc [34:99]
void MSCBasePrinter::PrintDoc(const Doc& doc, bool new_line) {
if (new_line) {
NewLine();
lines_++;
}
if (auto doc_node = doc.as<LiteralDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<IdDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<AttrAccessDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<IndexDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<CallDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ListDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<TupleDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<DictDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<SliceDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<StmtBlockDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<AssignDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<IfDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<WhileDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ForDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ScopeDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ExprStmtDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<AssertDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ReturnDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<FunctionDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ClassDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<CommentDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<DeclareDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<StrictListDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<PointerDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<StructDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<ConstructorDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<SwitchDoc>()) {
PrintTypedDoc(doc_node.value());
} else if (auto doc_node = doc.as<LambdaDoc>()) {
PrintTypedDoc(doc_node.value());
} else {
LOG(FATAL) << "Do not know how to print " << doc->GetTypeKey();
throw;
}
}