003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/include/clang/Lex
usr
/
src
/
contrib
/
llvm-project
/
clang
/
include
/
clang
/
Lex
/
📁
..
📄
CodeCompletionHandler.h
(3.02 KB)
📄
DependencyDirectivesSourceMinimizer.h
(3.66 KB)
📄
DirectoryLookup.h
(7.21 KB)
📄
ExternalPreprocessorSource.h
(1.52 KB)
📄
HeaderMap.h
(3.27 KB)
📄
HeaderMapTypes.h
(1.45 KB)
📄
HeaderSearch.h
(31.25 KB)
📄
HeaderSearchOptions.h
(8.62 KB)
📄
LexDiagnostic.h
(496 B)
📄
Lexer.h
(33.92 KB)
📄
LiteralSupport.h
(10.06 KB)
📄
MacroArgs.h
(5.41 KB)
📄
MacroInfo.h
(20.14 KB)
📄
ModuleLoader.h
(7.25 KB)
📄
ModuleMap.h
(27.64 KB)
📄
MultipleIncludeOpt.h
(6.41 KB)
📄
PPCallbacks.h
(23.05 KB)
📄
PPConditionalDirectiveRecord.h
(3.75 KB)
📄
Pragma.h
(4.23 KB)
📄
PreprocessingRecord.h
(20.55 KB)
📄
Preprocessor.h
(89.66 KB)
📄
PreprocessorExcludedConditionalDirectiveSkipMapping.h
(1.24 KB)
📄
PreprocessorLexer.h
(6.1 KB)
📄
PreprocessorOptions.h
(8.35 KB)
📄
ScratchBuffer.h
(1.41 KB)
📄
Token.h
(11.63 KB)
📄
TokenConcatenation.h
(2.55 KB)
📄
TokenLexer.h
(9.96 KB)
📄
VariadicMacroSupport.h
(8.95 KB)
Editing: TokenConcatenation.h
//===--- TokenConcatenation.h - Token Concatenation Avoidance ---*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the TokenConcatenation class. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_LEX_TOKENCONCATENATION_H #define LLVM_CLANG_LEX_TOKENCONCATENATION_H #include "clang/Basic/TokenKinds.h" namespace clang { class Preprocessor; class Token; /// TokenConcatenation class, which answers the question of /// "Is it safe to emit two tokens without a whitespace between them, or /// would that cause implicit concatenation of the tokens?" /// /// For example, it emitting two identifiers "foo" and "bar" next to each /// other would cause the lexer to produce one "foobar" token. Emitting "1" /// and ")" next to each other is safe. /// class TokenConcatenation { const Preprocessor &PP; enum AvoidConcatInfo { /// By default, a token never needs to avoid concatenation. Most tokens /// (e.g. ',', ')', etc) don't cause a problem when concatenated. aci_never_avoid_concat = 0, /// aci_custom_firstchar - AvoidConcat contains custom code to handle this /// token's requirements, and it needs to know the first character of the /// token. aci_custom_firstchar = 1, /// aci_custom - AvoidConcat contains custom code to handle this token's /// requirements, but it doesn't need to know the first character of the /// token. aci_custom = 2, /// aci_avoid_equal - Many tokens cannot be safely followed by an '=' /// character. For example, "<<" turns into "<<=" when followed by an =. aci_avoid_equal = 4 }; /// TokenInfo - This array contains information for each token on what /// action to take when avoiding concatenation of tokens in the AvoidConcat /// method. char TokenInfo[tok::NUM_TOKENS]; public: TokenConcatenation(const Preprocessor &PP); bool AvoidConcat(const Token &PrevPrevTok, const Token &PrevTok, const Token &Tok) const; private: /// IsIdentifierStringPrefix - Return true if the spelling of the token /// is literally 'L', 'u', 'U', or 'u8'. bool IsIdentifierStringPrefix(const Token &Tok) const; }; } // end clang namespace #endif
Upload File
Create Folder