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