// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #ifndef CARBON_TOOLCHAIN_SEM_IR_CPP_FILE_H_ #define CARBON_TOOLCHAIN_SEM_IR_CPP_FILE_H_ #include "clang/Basic/Diagnostic.h" #include "clang/Frontend/ASTUnit.h" #include "clang/Frontend/CompilerInvocation.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/Support/FileSystem.h" namespace Carbon::SemIR { // The result of compiling the C++ portion of a `File`, including both any // imported C++ headers and any inline C++ fragments. class CppFile { public: explicit CppFile(std::unique_ptr ast_unit) : ast_unit_(std::move(ast_unit)) {} // Access to compilation options. auto diagnostic_options() const -> const clang::DiagnosticOptions& { return ast_unit_->getDiagnostics().getDiagnosticOptions(); } auto lang_options() const -> const clang::LangOptions& { return ast_unit_->getLangOpts(); } // Access to Clang's compilation environment. auto source_manager() -> clang::SourceManager& { return ast_unit_->getSourceManager(); } auto source_manager() const -> const clang::SourceManager& { return ast_unit_->getSourceManager(); } auto diagnostics() const -> clang::DiagnosticsEngine& { return ast_unit_->getDiagnostics(); } // Access to layers of Clang's C++ representation. auto ast_context() -> clang::ASTContext& { return ast_unit_->getASTContext(); } auto ast_context() const -> const clang::ASTContext& { return ast_unit_->getASTContext(); } auto sema() -> clang::Sema& { return ast_unit_->getSema(); } // Visit all top-level declarations in the file. auto VisitLocalTopLevelDecls( llvm::function_refvoid> visitor) const -> void; private: std::unique_ptr ast_unit_; }; } // namespace Carbon::SemIR #endif // CARBON_TOOLCHAIN_SEM_IR_CPP_FILE_H_