| 1 | //===-- tools/f18/dump.cpp ------------------------------------------------===// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | // This file defines Dump routines available for calling from the debugger. |
| 10 | // Each is based on operator<< for that type. There are overloadings for |
| 11 | // reference and pointer, and for dumping to a provided raw_ostream or errs(). |
| 12 | |
| 13 | #ifdef DEBUGF18 |
| 14 | |
| 15 | #include "llvm/Support/raw_ostream.h" |
| 16 | |
| 17 | #define DEFINE_DUMP(ns, name) \ |
| 18 | namespace ns { \ |
| 19 | class name; \ |
| 20 | llvm::raw_ostream &operator<<(llvm::raw_ostream &, const name &); \ |
| 21 | } \ |
| 22 | void Dump(llvm::raw_ostream &os, const ns::name &x) { os << x << '\n'; } \ |
| 23 | void Dump(llvm::raw_ostream &os, const ns::name *x) { \ |
| 24 | if (x == nullptr) \ |
| 25 | os << "null\n"; \ |
| 26 | else \ |
| 27 | Dump(os, *x); \ |
| 28 | } \ |
| 29 | void Dump(const ns::name &x) { Dump(llvm::errs(), x); } \ |
| 30 | void Dump(const ns::name *x) { Dump(llvm::errs(), *x); } |
| 31 | |
| 32 | namespace Fortran { |
| 33 | DEFINE_DUMP(parser, Name) |
| 34 | DEFINE_DUMP(parser, CharBlock) |
| 35 | DEFINE_DUMP(semantics, Symbol) |
| 36 | DEFINE_DUMP(semantics, Scope) |
| 37 | DEFINE_DUMP(semantics, IntrinsicTypeSpec) |
| 38 | DEFINE_DUMP(semantics, DerivedTypeSpec) |
| 39 | DEFINE_DUMP(semantics, DeclTypeSpec) |
| 40 | } // namespace Fortran |
| 41 | |
| 42 | #endif |
| 43 | |