clang 23.0.0git
clang::StringLiteralParser Class Reference

StringLiteralParser - This decodes string escape characters and performs wide string analysis and Translation Phase #6 (concatenation of string literals) (C99 5.1.1.2p1). More...

#include "clang/Lex/LiteralSupport.h"

Public Member Functions

 StringLiteralParser (ArrayRef< Token > StringToks, Preprocessor &PP, StringLiteralEvalMethod StringMethod=StringLiteralEvalMethod::Evaluated, ConversionAction Action=CA_NoConversion)
 StringLiteralParser (ArrayRef< Token > StringToks, const SourceManager &sm, const LangOptions &features, const TargetInfo &target, DiagnosticsEngine *diags=nullptr)
StringRef GetString () const
unsigned GetStringLength () const
unsigned GetNumStringChars () const
unsigned getOffsetOfStringByte (const Token &TheTok, unsigned ByteNo) const
 getOffsetOfStringByte - This function returns the offset of the specified byte of the string data represented by Token.
bool isOrdinary () const
bool isWide () const
bool isUTF8 () const
bool isUTF16 () const
bool isUTF32 () const
bool isPascal () const
bool isUnevaluated () const
StringRef getUDSuffix () const
unsigned getUDSuffixToken () const
 Get the index of a token containing a ud-suffix.
unsigned getUDSuffixOffset () const
 Get the spelling offset of the first byte of the ud-suffix.

Static Public Member Functions

static bool isValidUDSuffix (const LangOptions &LangOpts, StringRef Suffix)
 Determine whether a suffix is a valid ud-suffix.

Public Attributes

bool hadError
bool Pascal

Detailed Description

StringLiteralParser - This decodes string escape characters and performs wide string analysis and Translation Phase #6 (concatenation of string literals) (C99 5.1.1.2p1).

Definition at line 233 of file LiteralSupport.h.

Constructor & Destructor Documentation

◆ StringLiteralParser() [1/2]

StringLiteralParser::StringLiteralParser ( ArrayRef< Token > StringToks,
Preprocessor & PP,
StringLiteralEvalMethod EvalMethod = StringLiteralEvalMethod::Evaluated,
ConversionAction Action = CA_NoConversion )
///       string-literal: [C++0x lex.string]
///         encoding-prefix " [s-char-sequence] "
///         encoding-prefix R raw-string
///       encoding-prefix:
///         u8
///         u
///         U
///         L
///       s-char-sequence:
///         s-char
///         s-char-sequence s-char
///       s-char:
///         any member of the source character set except the double-quote ",
///           backslash \, or new-line character
///         escape-sequence
///         universal-character-name
///       raw-string:
///         " d-char-sequence ( r-char-sequence ) d-char-sequence "
///       r-char-sequence:
///         r-char
///         r-char-sequence r-char
///       r-char:
///         any member of the source character set, except a right parenthesis )
///           followed by the initial d-char-sequence (which may be empty)
///           followed by a double quote ".
///       d-char-sequence:
///         d-char
///         d-char-sequence d-char
///       d-char:
///         any member of the basic source character set except:
///           space, the left parenthesis (, the right parenthesis ),
///           the backslash \, and the control characters representing horizontal
///           tab, vertical tab, form feed, and newline.
///       escape-sequence: [C++0x lex.ccon]
///         simple-escape-sequence
///         octal-escape-sequence
///         hexadecimal-escape-sequence
///       simple-escape-sequence:
///         one of \' \" \? \\ \a \b \f \n \r \t \v
///       octal-escape-sequence:
///         \ octal-digit
///         \ octal-digit octal-digit
///         \ octal-digit octal-digit octal-digit
///       hexadecimal-escape-sequence:
///         \x hexadecimal-digit
///         hexadecimal-escape-sequence hexadecimal-digit
///       universal-character-name:
///         \u hex-quad
///         \U hex-quad hex-quad
///       hex-quad:
///         hex-digit hex-digit hex-digit hex-digit
/// 

Definition at line 2101 of file LiteralSupport.cpp.

References false, hadError, and Pascal.

◆ StringLiteralParser() [2/2]

clang::StringLiteralParser::StringLiteralParser ( ArrayRef< Token > StringToks,
const SourceManager & sm,
const LangOptions & features,
const TargetInfo & target,
DiagnosticsEngine * diags = nullptr )
inline

Member Function Documentation

◆ GetNumStringChars()

unsigned clang::StringLiteralParser::GetNumStringChars ( ) const
inline

Definition at line 275 of file LiteralSupport.h.

References GetStringLength().

◆ getOffsetOfStringByte()

unsigned StringLiteralParser::getOffsetOfStringByte ( const Token & Tok,
unsigned ByteNo ) const

getOffsetOfStringByte - This function returns the offset of the specified byte of the string data represented by Token.

This handles advancing over escape sequences in the string.

If the Diagnostics pointer is non-null, then this will do semantic checking of the string literal and emit errors and warnings.

This handles advancing over escape sequences in the string.

Definition at line 2526 of file LiteralSupport.cpp.

References clang::Evaluated, clang::Lexer::getSpelling(), MeasureUCNEscape(), ProcessCharEscape(), and Tok.

Referenced by clang::StringLiteral::getLocationOfByte().

◆ GetString()

StringRef clang::StringLiteralParser::GetString ( ) const
inline

Definition at line 270 of file LiteralSupport.h.

References GetStringLength().

◆ GetStringLength()

unsigned clang::StringLiteralParser::GetStringLength ( ) const
inline

◆ getUDSuffix()

StringRef clang::StringLiteralParser::getUDSuffix ( ) const
inline

Definition at line 296 of file LiteralSupport.h.

◆ getUDSuffixOffset()

unsigned clang::StringLiteralParser::getUDSuffixOffset ( ) const
inline

Get the spelling offset of the first byte of the ud-suffix.

Definition at line 304 of file LiteralSupport.h.

◆ getUDSuffixToken()

unsigned clang::StringLiteralParser::getUDSuffixToken ( ) const
inline

Get the index of a token containing a ud-suffix.

Definition at line 299 of file LiteralSupport.h.

◆ isOrdinary()

bool clang::StringLiteralParser::isOrdinary ( ) const
inline

Definition at line 286 of file LiteralSupport.h.

◆ isPascal()

bool clang::StringLiteralParser::isPascal ( ) const
inline

Definition at line 291 of file LiteralSupport.h.

References Pascal.

◆ isUnevaluated()

bool clang::StringLiteralParser::isUnevaluated ( ) const
inline

Definition at line 292 of file LiteralSupport.h.

References clang::Unevaluated.

◆ isUTF16()

bool clang::StringLiteralParser::isUTF16 ( ) const
inline

Definition at line 289 of file LiteralSupport.h.

◆ isUTF32()

bool clang::StringLiteralParser::isUTF32 ( ) const
inline

Definition at line 290 of file LiteralSupport.h.

◆ isUTF8()

bool clang::StringLiteralParser::isUTF8 ( ) const
inline

Definition at line 288 of file LiteralSupport.h.

◆ isValidUDSuffix()

bool StringLiteralParser::isValidUDSuffix ( const LangOptions & LangOpts,
StringRef Suffix )
static

Determine whether a suffix is a valid ud-suffix.

We avoid treating reserved suffixes as ud-suffixes, because the diagnostic experience is better if we treat it as an invalid suffix.

Definition at line 2607 of file LiteralSupport.cpp.

References clang::NumericLiteralParser::isValidUDSuffix().

Referenced by clang::Sema::CheckLiteralOperatorDeclaration().

◆ isWide()

bool clang::StringLiteralParser::isWide ( ) const
inline

Definition at line 287 of file LiteralSupport.h.

Member Data Documentation

◆ hadError

bool clang::StringLiteralParser::hadError

Definition at line 267 of file LiteralSupport.h.

Referenced by StringLiteralParser(), and StringLiteralParser().

◆ Pascal

bool clang::StringLiteralParser::Pascal

Definition at line 268 of file LiteralSupport.h.

Referenced by isPascal(), StringLiteralParser(), and StringLiteralParser().


The documentation for this class was generated from the following files: