Skip to content

Commit

Permalink
Merge pull request #411 from dcci/cherry-meee
Browse files Browse the repository at this point in the history
Ignore generated @import statements in the expression evaluator
  • Loading branch information
dcci authored Dec 4, 2019
2 parents 2dddc0b + 836908f commit bb745a0
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,26 @@ using namespace lldb_private;
class ClangExpressionParser::LLDBPreprocessorCallbacks : public PPCallbacks {
ClangModulesDeclVendor &m_decl_vendor;
ClangPersistentVariables &m_persistent_vars;
clang::SourceManager &m_source_mgr;
StreamString m_error_stream;
bool m_has_errors = false;

public:
LLDBPreprocessorCallbacks(ClangModulesDeclVendor &decl_vendor,
ClangPersistentVariables &persistent_vars)
: m_decl_vendor(decl_vendor), m_persistent_vars(persistent_vars) {}
ClangPersistentVariables &persistent_vars,
clang::SourceManager &source_mgr)
: m_decl_vendor(decl_vendor), m_persistent_vars(persistent_vars),
m_source_mgr(source_mgr) {}

void moduleImport(SourceLocation import_location, clang::ModuleIdPath path,
const clang::Module * /*null*/) override {
// Ignore modules that are imported in the wrapper code as these are not
// loaded by the user.
llvm::StringRef filename =
m_source_mgr.getPresumedLoc(import_location).getFilename();
if (filename == ClangExpressionSourceCode::g_prefix_file_name)
return;

SourceModule module;

for (const std::pair<IdentifierInfo *, SourceLocation> &component : path)
Expand Down Expand Up @@ -557,8 +567,8 @@ ClangExpressionParser::ClangExpressionParser(
llvm::cast<ClangPersistentVariables>(
target_sp->GetPersistentExpressionStateForLanguage(
lldb::eLanguageTypeC));
std::unique_ptr<PPCallbacks> pp_callbacks(
new LLDBPreprocessorCallbacks(*decl_vendor, *clang_persistent_vars));
std::unique_ptr<PPCallbacks> pp_callbacks(new LLDBPreprocessorCallbacks(
*decl_vendor, *clang_persistent_vars, m_compiler->getSourceManager()));
m_pp_callbacks =
static_cast<LLDBPreprocessorCallbacks *>(pp_callbacks.get());
m_compiler->getPreprocessor().addPPCallbacks(std::move(pp_callbacks));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,12 @@

using namespace lldb_private;

#define PREFIX_NAME "<lldb wrapper prefix>"

const llvm::StringRef ClangExpressionSourceCode::g_prefix_file_name = PREFIX_NAME;

const char *ClangExpressionSourceCode::g_expression_prefix =
R"(
#line 1 "<lldb wrapper prefix>"
"#line 1 \"" PREFIX_NAME R"("
#ifndef offsetof
#define offsetof(t, d) __builtin_offsetof(t, d)
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ class ExecutionContext;

class ClangExpressionSourceCode : public ExpressionSourceCode {
public:
/// The file name we use for the wrapper code that we inject before
/// the user expression.
static const llvm::StringRef g_prefix_file_name;
static const char *g_expression_prefix;

static ClangExpressionSourceCode *CreateWrapped(llvm::StringRef filename,
Expand Down

0 comments on commit bb745a0

Please sign in to comment.