diff options
author | Sean Callanan <scallanan@apple.com> | 2014-12-09 23:47:56 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2014-12-09 23:47:56 +0000 |
commit | 8759649013a21b7727feba4ebaf630a774ff4241 (patch) | |
tree | 1a11120712bd274abccadf3af87b690913be4242 /clang/lib/Lex/Preprocessor.cpp | |
parent | d73f3c6b73becfc016165df3ba746e1866786140 (diff) | |
download | bcm5719-llvm-8759649013a21b7727feba4ebaf630a774ff4241.tar.gz bcm5719-llvm-8759649013a21b7727feba4ebaf630a774ff4241.zip |
Modified the Objective-C lexer and parser (only
in debugger mode) to accept @import declarations
and pass them to the debugger.
In the preprocessor, accept import declarations
if the debugger is enabled, but don't actually
load the module, just pass the import path on to
the preprocessor callbacks.
In the Objective-C parser, if it sees an import
declaration in statement context (usual for LLDB),
ignore it and return a NullStmt.
llvm-svn: 223855
Diffstat (limited to 'clang/lib/Lex/Preprocessor.cpp')
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 63c9aec8554..b2a6d933a0f 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -672,7 +672,8 @@ bool Preprocessor::HandleIdentifier(Token &Identifier) { // keyword when we're in a caching lexer, because caching lexers only get // used in contexts where import declarations are disallowed. if (LastTokenWasAt && II.isModulesImport() && !InMacroArgs && - !DisableMacroExpansion && getLangOpts().Modules && + !DisableMacroExpansion && + (getLangOpts().Modules || getLangOpts().DebuggerSupport) && CurLexerKind != CLK_CachingLexer) { ModuleImportLoc = Identifier.getLocation(); ModuleImportPath.clear(); @@ -745,12 +746,14 @@ void Preprocessor::LexAfterModuleImport(Token &Result) { } // If we have a non-empty module path, load the named module. - if (!ModuleImportPath.empty() && getLangOpts().Modules) { - Module *Imported = TheModuleLoader.loadModule(ModuleImportLoc, - ModuleImportPath, - Module::MacrosVisible, - /*IsIncludeDirective=*/false); - if (Callbacks) + if (!ModuleImportPath.empty()) { + Module *Imported = nullptr; + if (getLangOpts().Modules) + Imported = TheModuleLoader.loadModule(ModuleImportLoc, + ModuleImportPath, + Module::MacrosVisible, + /*IsIncludeDirective=*/false); + if (Callbacks && (getLangOpts().Modules || getLangOpts().DebuggerSupport)) Callbacks->moduleImport(ModuleImportLoc, ModuleImportPath, Imported); } } |