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
32namespace Fortran {
33DEFINE_DUMP(parser, Name)
34DEFINE_DUMP(parser, CharBlock)
35DEFINE_DUMP(semantics, Symbol)
36DEFINE_DUMP(semantics, Scope)
37DEFINE_DUMP(semantics, IntrinsicTypeSpec)
38DEFINE_DUMP(semantics, DerivedTypeSpec)
39DEFINE_DUMP(semantics, DeclTypeSpec)
40} // namespace Fortran
41
42#endif
43

source code of flang/tools/f18/dump.cpp