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