From 8d76cca3a261d0496395e18ef92cae46683618a0 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 4 Jan 2012 06:20:15 +0000 Subject: Don't treat 'import' as a contextual keyword when we're in a caching lexer, or when modules are disabled. llvm-svn: 147524 --- clang/lib/Lex/Preprocessor.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'clang/lib/Lex/Preprocessor.cpp') diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 046b0dfb01a..cfa9e23e60f 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -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); -- cgit v1.2.3