43 lines · cpp
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-exception6//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 for11// reference and pointer, and for dumping to a provided raw_ostream or errs().12 13#ifdef DEBUGF1814 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 Fortran41 42#endif43