@@ -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