mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 23:36:06 +00:00

This patch improves the design of the IncrementalParser and Interpreter classes. Now the incremental parser is only responsible for building the partial translation unit declaration and the AST, while the Interpreter fills in the lower level llvm::Module and other JIT-related infrastructure. Finally the Interpreter class now orchestrates the AST and the LLVM IR with the IncrementalParser and IncrementalExecutor classes. The design improvement allows us to rework some of the logic that extracts an interpreter value into the clang::Value object. The new implementation simplifies use-cases which are used for out-of-process execution by allowing interpreter to be inherited or customized with an clang::ASTConsumer. This change will enable completing the pretty printing work which is in llvm/llvm-project#84769
66 lines
1.9 KiB
C++
66 lines
1.9 KiB
C++
//===--- IncrementalParser.h - Incremental Compilation ----------*- 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 implements the class which performs incremental code compilation.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_LIB_INTERPRETER_INCREMENTALPARSER_H
|
|
#define LLVM_CLANG_LIB_INTERPRETER_INCREMENTALPARSER_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/Support/Error.h"
|
|
|
|
#include <list>
|
|
#include <memory>
|
|
|
|
namespace clang {
|
|
class ASTConsumer;
|
|
class CodeGenerator;
|
|
class CompilerInstance;
|
|
class Parser;
|
|
class Sema;
|
|
class TranslationUnitDecl;
|
|
|
|
/// Provides support for incremental compilation. Keeps track of the state
|
|
/// changes between the subsequent incremental input.
|
|
///
|
|
class IncrementalParser {
|
|
protected:
|
|
/// The Sema performing the incremental compilation.
|
|
Sema &S;
|
|
|
|
/// Parser.
|
|
std::unique_ptr<Parser> P;
|
|
|
|
/// Consumer to process the produced top level decls. Owned by Act.
|
|
ASTConsumer *Consumer = nullptr;
|
|
|
|
/// Counts the number of direct user input lines that have been parsed.
|
|
unsigned InputCount = 0;
|
|
|
|
// IncrementalParser();
|
|
|
|
public:
|
|
IncrementalParser(CompilerInstance &Instance, llvm::Error &Err);
|
|
virtual ~IncrementalParser();
|
|
|
|
/// Parses incremental input by creating an in-memory file.
|
|
///\returns a \c PartialTranslationUnit which holds information about the
|
|
/// \c TranslationUnitDecl.
|
|
virtual llvm::Expected<TranslationUnitDecl *> Parse(llvm::StringRef Input);
|
|
|
|
void CleanUpPTU(TranslationUnitDecl *MostRecentTU);
|
|
|
|
private:
|
|
llvm::Expected<TranslationUnitDecl *> ParseOrWrapTopLevelDecl();
|
|
};
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_INTERPRETER_INCREMENTALPARSER_H
|