//===-- ASTUtils.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 // //===----------------------------------------------------------------------===// #ifndef LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_ASTUTILS_H #define LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_ASTUTILS_H #include "clang/Basic/ASTSourceDescriptor.h" #include "clang/Sema/Lookup.h" #include "clang/Sema/MultiplexExternalSemaSource.h" #include "clang/Sema/Sema.h" #include "clang/Sema/SemaConsumer.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/Support/Casting.h" #include <optional> namespace clang { class Module; } // namespace clang namespace lldb_private { /// Wraps an ExternalASTSource into an ExternalSemaSource. /// /// Assumes shared ownership of the underlying source. class ExternalASTSourceWrapper : public clang::ExternalSemaSource { … }; /// Wraps an ASTConsumer into an SemaConsumer. Doesn't take ownership of the /// provided consumer. If the provided ASTConsumer is also a SemaConsumer, /// the wrapper will also forward SemaConsumer functions. class ASTConsumerForwarder : public clang::SemaConsumer { … }; /// A ExternalSemaSource multiplexer that prioritizes its sources. /// /// This ExternalSemaSource will forward all requests to its attached sources. /// However, unlike a normal multiplexer it will not forward a request to all /// sources, but instead give priority to certain sources. If a source with a /// higher priority can fulfill a request, all sources with a lower priority /// will not receive the request. /// /// This class is mostly use to multiplex between sources of different /// 'quality', e.g. a C++ modules and debug information. The C++ module will /// provide more accurate replies to the requests, but might not be able to /// answer all requests. The debug information will be used as a fallback then /// to provide information that is not in the C++ module. class SemaSourceWithPriorities : public clang::ExternalSemaSource { … }; } // namespace lldb_private #endif // LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_ASTUTILS_H