//===-- tools/f18/dump.cpp ------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // This file defines Dump routines available for calling from the debugger. // Each is based on operator<< for that type. There are overloadings for // reference and pointer, and for dumping to a provided raw_ostream or errs(). #ifdef DEBUGF18 #include "llvm/Support/raw_ostream.h" #define DEFINE_DUMP(ns, name) \ namespace ns { \ class name; \ llvm::raw_ostream &operator<<(llvm::raw_ostream &, const name &); \ } \ void Dump(llvm::raw_ostream &os, const ns::name &x) { os << x << '\n'; } \ void Dump(llvm::raw_ostream &os, const ns::name *x) { \ if (x == nullptr) \ os << "null\n"; \ else \ Dump(os, *x); \ } \ void Dump(const ns::name &x) { Dump(llvm::errs(), x); } \ void Dump(const ns::name *x) { Dump(llvm::errs(), *x); } namespace Fortran { DEFINE_DUMP(parser, Name) DEFINE_DUMP(parser, CharBlock) DEFINE_DUMP(semantics, Symbol) DEFINE_DUMP(semantics, Scope) DEFINE_DUMP(semantics, IntrinsicTypeSpec) DEFINE_DUMP(semantics, DerivedTypeSpec) DEFINE_DUMP(semantics, DeclTypeSpec) } // namespace Fortran #endif