@@ -701,6 +701,7 @@ struct Preprocessor::Private {
701701 Control *control_ = nullptr ;
702702 DiagnosticsClient *diagnosticsClient_ = nullptr ;
703703 CommentHandler *commentHandler_ = nullptr ;
704+ LanguageKind language_ = LanguageKind::kCXX ;
704705 bool canResolveFiles_ = true ;
705706 std::vector<std::string> systemIncludePaths_;
706707 std::vector<std::string> quoteIncludePaths_;
@@ -1621,7 +1622,7 @@ void Preprocessor::Private::finalizeToken(std::vector<Token> &tokens,
16211622
16221623 switch (tk->kind ) {
16231624 case TokenKind::T_IDENTIFIER: {
1624- kind = Lexer::classifyKeyword (tk->text );
1625+ kind = Lexer::classifyKeyword (tk->text , language_ );
16251626
16261627 if (kind == TokenKind::T_IDENTIFIER) {
16271628 value.idValue = control_->getIdentifier (tk->text );
@@ -1710,7 +1711,7 @@ void Preprocessor::Private::finalizeToken(std::vector<Token> &tokens,
17101711
17111712auto Preprocessor::Private::tokenize (const std::string_view &source,
17121713 int sourceFile, bool bol) -> TokList * {
1713- cxx::Lexer lex (source);
1714+ cxx::Lexer lex (source, language_ );
17141715 lex.setKeepComments (true );
17151716 lex.setPreprocessing (true );
17161717 TokList *ts = nullptr ;
@@ -2824,7 +2825,7 @@ auto Preprocessor::Private::merge(const Tok *left, const Tok *right)
28242825 if (!right) return left;
28252826 const auto hideset = makeIntersection (left->hideset , right->hideset );
28262827 auto text = string (std::string (left->text ) + std::string (right->text ));
2827- Lexer lex (text);
2828+ Lexer lex (text, language_ );
28282829 lex.setPreprocessing (true );
28292830 lex.next ();
28302831 auto tok = gen (lex.tokenKind (), lex.tokenText (), hideset);
@@ -2925,6 +2926,10 @@ auto Preprocessor::diagnosticsClient() const -> DiagnosticsClient * {
29252926 return d->diagnosticsClient_ ;
29262927}
29272928
2929+ auto Preprocessor::language () const -> LanguageKind { return d->language_ ; }
2930+
2931+ void Preprocessor::setLanguage (LanguageKind lang) { d->language_ = lang; }
2932+
29282933auto Preprocessor::commentHandler () const -> CommentHandler * {
29292934 return d->commentHandler_ ;
29302935}
@@ -3091,7 +3096,7 @@ void Preprocessor::getPreprocessedText(const std::vector<Token> &tokens,
30913096 const auto &prevToken = tokens[index - 2 ];
30923097 std::string s = prevToken.spell ();
30933098 s += token.spell ();
3094- Lexer lex (s);
3099+ Lexer lex (s, d-> language_ );
30953100 // lex.setPreprocessing(true);
30963101 lex.next ();
30973102 if (lex.tokenKind () != prevToken.kind ()) {
0 commit comments