forked from OSchip/llvm-project
Don't treat 'import' as a contextual keyword when we're in a caching lexer, or when modules are disabled.
llvm-svn: 147524
This commit is contained in:
parent
2aa7acfadb
commit
8d76cca3a2
|
@ -683,6 +683,10 @@ public:
|
|||
CachedTokens[CachedLexPos-1] = Tok;
|
||||
}
|
||||
|
||||
/// \brief Recompute the current lexer kind based on the CurLexer/CurPTHLexer/
|
||||
/// CurTokenLexer pointers.
|
||||
void recomputeCurLexerKind();
|
||||
|
||||
/// \brief Specify the point at which code-completion will be performed.
|
||||
///
|
||||
/// \param File the file in which code completion should occur. If
|
||||
|
|
|
@ -42,6 +42,7 @@ void Preprocessor::Backtrack() {
|
|||
&& "EnableBacktrackAtThisPos was not called!");
|
||||
CachedLexPos = BacktrackPositions.back();
|
||||
BacktrackPositions.pop_back();
|
||||
recomputeCurLexerKind();
|
||||
}
|
||||
|
||||
void Preprocessor::CachingLex(Token &Result) {
|
||||
|
@ -74,8 +75,7 @@ void Preprocessor::EnterCachingLexMode() {
|
|||
return;
|
||||
|
||||
PushIncludeMacroStack();
|
||||
if (CurLexerKind != CLK_LexAfterModuleImport)
|
||||
CurLexerKind = CLK_CachingLexer;
|
||||
CurLexerKind = CLK_CachingLexer;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -266,6 +266,17 @@ Preprocessor::macro_end(bool IncludeExternalMacros) const {
|
|||
return Macros.end();
|
||||
}
|
||||
|
||||
void Preprocessor::recomputeCurLexerKind() {
|
||||
if (CurLexer)
|
||||
CurLexerKind = CLK_Lexer;
|
||||
else if (CurPTHLexer)
|
||||
CurLexerKind = CLK_PTHLexer;
|
||||
else if (CurTokenLexer)
|
||||
CurLexerKind = CLK_TokenLexer;
|
||||
else
|
||||
CurLexerKind = CLK_CachingLexer;
|
||||
}
|
||||
|
||||
bool Preprocessor::SetCodeCompletionPoint(const FileEntry *File,
|
||||
unsigned CompleteLine,
|
||||
unsigned CompleteColumn) {
|
||||
|
@ -550,7 +561,12 @@ void Preprocessor::HandleIdentifier(Token &Identifier) {
|
|||
|
||||
// If this is the 'import' contextual keyword, note that the next token
|
||||
// indicates a module name.
|
||||
if (II.isImport() && !InMacroArgs && !DisableMacroExpansion) {
|
||||
//
|
||||
// Note that we do not treat 'import' as a contextual keyword when we're
|
||||
// in a caching lexer, because caching lexers only get used in contexts where
|
||||
// import declarations are disallowed.
|
||||
if (II.isImport() && !InMacroArgs && !DisableMacroExpansion &&
|
||||
getLangOptions().Modules && CurLexerKind != CLK_CachingLexer) {
|
||||
ModuleImportLoc = Identifier.getLocation();
|
||||
ModuleImportPath.clear();
|
||||
ModuleImportExpectsIdentifier = true;
|
||||
|
@ -562,14 +578,7 @@ void Preprocessor::HandleIdentifier(Token &Identifier) {
|
|||
///
|
||||
void Preprocessor::LexAfterModuleImport(Token &Result) {
|
||||
// Figure out what kind of lexer we actually have.
|
||||
if (CurLexer)
|
||||
CurLexerKind = CLK_Lexer;
|
||||
else if (CurPTHLexer)
|
||||
CurLexerKind = CLK_PTHLexer;
|
||||
else if (CurTokenLexer)
|
||||
CurLexerKind = CLK_TokenLexer;
|
||||
else
|
||||
CurLexerKind = CLK_CachingLexer;
|
||||
recomputeCurLexerKind();
|
||||
|
||||
// Lex the next token.
|
||||
Lex(Result);
|
||||
|
|
|
@ -15,6 +15,12 @@ void test(int i, float f) {
|
|||
::f0(&f);
|
||||
}
|
||||
|
||||
int import;
|
||||
|
||||
void f() {
|
||||
int import;
|
||||
}
|
||||
|
||||
// RUN: rm -rf %t
|
||||
// RUN: %clang_cc1 -fmodules -x objective-c++ -emit-module -fmodule-cache-path %t -fmodule-name=lookup_left_cxx %S/Inputs/module.map -verify
|
||||
// RUN: %clang_cc1 -fmodules -x objective-c++ -emit-module -fmodule-cache-path %t -fmodule-name=lookup_right_cxx %S/Inputs/module.map -verify
|
||||
|
|
Loading…
Reference in New Issue