//===--- StandardLibrary.h --------------------------------------*- C++ -*-===// // // 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 // //===----------------------------------------------------------------------===// /// /// \file /// Provides an interface for querying information about C and C++ Standard /// Library headers and symbols. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLING_INCLUSIONS_STANDARDLIBRARY_H #define LLVM_CLANG_TOOLING_INCLUSIONS_STANDARDLIBRARY_H #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/Hashing.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/raw_ostream.h" #include <optional> #include <string> #include <vector> namespace clang { class Decl; class NamespaceDecl; class DeclContext; namespace tooling { namespace stdlib { class Symbol; enum class Lang { … }; // A standard library header, such as <iostream> // Lightweight class, in fact just an index into a table. // C++ and C Library compatibility headers are considered different: e.g. // "<cstdio>" and "<stdio.h>" (and their symbols) are treated differently. class Header { … }; // A top-level standard library symbol, such as std::vector // Lightweight class, in fact just an index into a table. // C++ and C Standard Library symbols are considered distinct: e.g. std::printf // and ::printf are not treated as the same symbol. // The symbols do not contain macros right now, we don't have a reliable index // for them. class Symbol { … }; // A functor to find the stdlib::Symbol associated with a decl. // // For non-top-level decls (std::vector<int>::iterator), returns the top-level // symbol (std::vector). class Recognizer { … }; } // namespace stdlib } // namespace tooling } // namespace clang namespace llvm { template <> struct DenseMapInfo<clang::tooling::stdlib::Header> { … }; template <> struct DenseMapInfo<clang::tooling::stdlib::Symbol> { … }; } // namespace llvm #endif // LLVM_CLANG_TOOLING_INCLUSIONS_STANDARDLIBRARY_H