- //===--- Interpreter.h - Incremental Compilation and Execution---*- 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 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // This file defines the component which performs incremental code 
- // compilation and execution. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CLANG_INTERPRETER_INTERPRETER_H 
- #define LLVM_CLANG_INTERPRETER_INTERPRETER_H 
-   
- #include "clang/Interpreter/PartialTranslationUnit.h" 
-   
- #include "clang/AST/GlobalDecl.h" 
-   
- #include "llvm/ExecutionEngine/JITSymbol.h" 
- #include "llvm/Support/Error.h" 
-   
- #include <memory> 
- #include <vector> 
-   
- namespace llvm { 
- namespace orc { 
- class LLJIT; 
- class ThreadSafeContext; 
- } 
- } // namespace llvm 
-   
- namespace clang { 
-   
- class CompilerInstance; 
- class IncrementalExecutor; 
- class IncrementalParser; 
-   
- /// Create a pre-configured \c CompilerInstance for incremental processing. 
- class IncrementalCompilerBuilder { 
- public: 
-   static llvm::Expected<std::unique_ptr<CompilerInstance>> 
-   create(std::vector<const char *> &ClangArgv); 
- }; 
-   
- /// Provides top-level interfaces for incremental compilation and execution. 
- class Interpreter { 
-   std::unique_ptr<llvm::orc::ThreadSafeContext> TSCtx; 
-   std::unique_ptr<IncrementalParser> IncrParser; 
-   std::unique_ptr<IncrementalExecutor> IncrExecutor; 
-   
-   Interpreter(std::unique_ptr<CompilerInstance> CI, llvm::Error &Err); 
-   
- public: 
-   ~Interpreter(); 
-   static llvm::Expected<std::unique_ptr<Interpreter>> 
-   create(std::unique_ptr<CompilerInstance> CI); 
-   const CompilerInstance *getCompilerInstance() const; 
-   const llvm::orc::LLJIT *getExecutionEngine() const; 
-   llvm::Expected<PartialTranslationUnit &> Parse(llvm::StringRef Code); 
-   llvm::Error Execute(PartialTranslationUnit &T); 
-   llvm::Error ParseAndExecute(llvm::StringRef Code) { 
-     auto PTU = Parse(Code); 
-     if (!PTU) 
-       return PTU.takeError(); 
-     if (PTU->TheModule) 
-       return Execute(*PTU); 
-     return llvm::Error::success(); 
-   } 
-   
-   /// Undo N previous incremental inputs. 
-   llvm::Error Undo(unsigned N = 1); 
-   
-   /// \returns the \c JITTargetAddress of a \c GlobalDecl. This interface uses 
-   /// the CodeGenModule's internal mangling cache to avoid recomputing the 
-   /// mangled name. 
-   llvm::Expected<llvm::JITTargetAddress> getSymbolAddress(GlobalDecl GD) const; 
-   
-   /// \returns the \c JITTargetAddress of a given name as written in the IR. 
-   llvm::Expected<llvm::JITTargetAddress> 
-   getSymbolAddress(llvm::StringRef IRName) const; 
-   
-   /// \returns the \c JITTargetAddress of a given name as written in the object 
-   /// file. 
-   llvm::Expected<llvm::JITTargetAddress> 
-   getSymbolAddressFromLinkerName(llvm::StringRef LinkerName) const; 
- }; 
- } // namespace clang 
-   
- #endif // LLVM_CLANG_INTERPRETER_INTERPRETER_H 
-