clang 17.0.0git
|
#include "clang/Lex/LiteralSupport.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/LexDiagnostic.h"
#include "clang/Lex/Lexer.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Lex/Token.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Unicode.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <string>
Go to the source code of this file.
Functions | |
static unsigned | getCharWidth (tok::TokenKind kind, const TargetInfo &Target) |
static CharSourceRange | MakeCharSourceRange (const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd) |
static DiagnosticBuilder | Diag (DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc TokLoc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, unsigned DiagID) |
Produce a diagnostic highlighting some portion of a literal. | |
static unsigned | ProcessCharEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features) |
ProcessCharEscape - Parse a standard C escape sequence, which can occur in either a character or a string literal. | |
static void | appendCodePoint (unsigned Codepoint, llvm::SmallVectorImpl< char > &Str) |
static bool | ProcessNumericUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, bool &Delimited, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal=false) |
static void | DiagnoseInvalidUnicodeCharacterName (DiagnosticsEngine *Diags, const LangOptions &Features, FullSourceLoc Loc, const char *TokBegin, const char *TokRangeBegin, const char *TokRangeEnd, llvm::StringRef Name) |
static bool | ProcessNamedUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features) |
static bool | ProcessUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, uint32_t &UcnVal, unsigned short &UcnLen, FullSourceLoc Loc, DiagnosticsEngine *Diags, const LangOptions &Features, bool in_char_string_literal=false) |
ProcessUCNEscape - Read the Universal Character Name, check constraints and return the UTF32. | |
static int | MeasureUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, unsigned CharByteWidth, const LangOptions &Features, bool &HadError) |
MeasureUCNEscape - Determine the number of bytes within the resulting string which this UCN will occupy. | |
static void | EncodeUCNEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, char *&ResultBuf, bool &HadError, FullSourceLoc Loc, unsigned CharByteWidth, DiagnosticsEngine *Diags, const LangOptions &Features) |
EncodeUCNEscape - Read the Universal Character Name, check constraints and convert the UTF32 to UTF8 or UTF16. | |
static bool | alwaysFitsInto64Bits (unsigned Radix, unsigned NumDigits) |
static bool | IsExponentPart (char c) |
static const char * | resyncUTF8 (const char *Err, const char *End) |
Definition at line 1342 of file LiteralSupport.cpp.
Referenced by clang::NumericLiteralParser::GetFixedPointValue(), and clang::NumericLiteralParser::GetIntegerValue().
|
static |
Definition at line 324 of file LiteralSupport.cpp.
Referenced by clang::expandUCNs().
|
static |
Produce a diagnostic highlighting some portion of a literal.
Emits the diagnostic DiagID
, highlighting the range of characters from TokRangeBegin
(inclusive) to TokRangeEnd
(exclusive), which must be a substring of a spelling buffer for the token beginning at TokBegin
.
Definition at line 79 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), Begin, clang::FullSourceLoc::getManager(), MakeCharSourceRange(), and clang::DiagnosticsEngine::Report().
Referenced by addConstraintSatisfaction(), clang::interp::State::addNotes(), applyEditsToTemp(), clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildOverloadedArrowExpr(), clang::interp::State::CCEDiag(), checkAttributeNumArgsImpl(), CheckCXX98CompatAccessibleCopy(), checkIntToPointerCast(), clang::Sema::CheckMemberPointerConversion(), checkMoreSpecializedThanPrimary(), checkNewAttributesAfterDef(), checkObjCPointerIntrospection(), clang::Sema::CheckPointerConversion(), CheckTautologicalComparison(), CheckTemplateSpecializationScope(), clang::ASTUnit::CodeComplete(), collectModuleHeaderIncludes(), clang::computeDependence(), ComputeSelectedDestructor(), clang::Sema::CreateOverloadedBinOp(), createResult(), createThreadFlows(), clang::DeductionFailureInfo::Destroy(), clang::Sema::diagnoseEquivalentInternalLinkageDeclarations(), DiagnoseInvalidUnicodeCharacterName(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), DiagnoseSelfAssignment(), diagnoseUnsatisfiedConstraintExpr(), clang::SARIFDiagnostic::emitDiagnosticMessage(), emitNullabilityConsistencyWarning(), clang::DiagnosticRenderer::emitStoredDiagnostic(), EvaluateFeatureLikeBuiltinMacro(), clang::Expr::EvaluateKnownConstInt(), clang::Expr::EvaluateKnownConstIntCheckOverflow(), clang::interp::State::FFDiag(), fixItNullability(), clang::TextDiagnosticBuffer::FlushDiagnostics(), clang::arcmt::FileRemapper::flushToDisk(), clang::arcmt::FileRemapper::flushToFile(), clang::Diagnostic::FormatDiagnostic(), clang::SrcMgr::ContentCache::getBufferOrNone(), clang::DiagnosticIDs::getDiagnosticFlags(), GetFullTypeForDeclarator(), clang::SourceManager::getLineNumber(), clang::SourceManager::getPresumedLoc(), clang::arcmt::FileRemapper::initFromDisk(), clang::arcmt::FileRemapper::initFromFile(), clang::Sema::IsOverload(), clang::MakeDeductionFailureInfo(), clang::Sema::NoteOverloadCandidate(), clang::SourceManager::noteSLocAddressSpaceUsage(), clang::arcmt::FileRemapper::overwriteOriginal(), clang::Sema::PerformContextuallyConvertToBool(), clang::Sema::PerformObjectArgumentInitialization(), ProcessCharEscape(), ProcessNamedUCNEscape(), ProcessNumericUCNEscape(), ProcessUCNEscape(), clang::ASTReader::ReadPragmaDiagnosticMappings(), rejectConstNotMutableType(), reportDiag(), clang::Sema::ResolveAndFixSingleFunctionTemplateSpecialization(), clang::Sema::ResolveSingleFunctionTemplateSpecialization(), clang::runWithSufficientStackSpace(), clang::runWithSufficientStackSpaceSlow(), SelectPropertyForSynthesisFromProtocols(), clang::DiagnosticsEngine::setDiagnosticGroupErrorAsFatal(), clang::DiagnosticsEngine::setDiagnosticGroupWarningAsError(), clang::DiagnosticsEngine::setSeverity(), clang::DiagnosticsEngine::setSeverityForAll(), clang::DiagnosticsEngine::setSeverityForGroup(), clang::SourceManager::translateLineCol(), TryReinterpretCast(), and clang::ento::PathDiagnosticConsumer::~PathDiagnosticConsumer().
|
static |
Definition at line 480 of file LiteralSupport.cpp.
References clang::FixItHint::CreateReplacement(), Diag(), MakeCharSourceRange(), and V.
Referenced by ProcessNamedUCNEscape().
|
static |
EncodeUCNEscape - Read the Universal Character Name, check constraints and convert the UTF32 to UTF8 or UTF16.
This is a subroutine of StringLiteralParser. When we decide to implement UCN's for identifiers, we will likely rework our support for UCN's.
Definition at line 688 of file LiteralSupport.cpp.
References ProcessUCNEscape().
|
static |
Definition at line 40 of file LiteralSupport.cpp.
References clang::Target.
Referenced by clang::CharLiteralParser::CharLiteralParser(), and clang::targets::X86TargetInfo::X86TargetInfo().
|
inlinestatic |
Definition at line 1439 of file LiteralSupport.cpp.
References c.
Referenced by clang::NumericLiteralParser::GetFixedPointValue().
|
static |
Definition at line 60 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), Begin, clang::CharSourceRange::getCharRange(), and clang::FullSourceLoc::getManager().
Referenced by Diag(), and DiagnoseInvalidUnicodeCharacterName().
|
static |
MeasureUCNEscape - Determine the number of bytes within the resulting string which this UCN will occupy.
Definition at line 653 of file LiteralSupport.cpp.
References ProcessUCNEscape().
Referenced by clang::StringLiteralParser::getOffsetOfStringByte().
|
static |
ProcessCharEscape - Parse a standard C escape sequence, which can occur in either a character or a string literal.
Definition at line 92 of file LiteralSupport.cpp.
References Diag(), clang::isHexDigit(), and clang::isPrintable().
Referenced by clang::CharLiteralParser::CharLiteralParser(), and clang::StringLiteralParser::getOffsetOfStringByte().
|
static |
Definition at line 535 of file LiteralSupport.cpp.
References clang::C, Diag(), DiagnoseInvalidUnicodeCharacterName(), and clang::isVerticalWhitespace().
Referenced by ProcessUCNEscape().
|
static |
Definition at line 394 of file LiteralSupport.cpp.
References Diag(), and clang::isHexDigit().
Referenced by ProcessUCNEscape().
|
static |
ProcessUCNEscape - Read the Universal Character Name, check constraints and return the UTF32.
Definition at line 584 of file LiteralSupport.cpp.
References Diag(), ProcessNamedUCNEscape(), and ProcessNumericUCNEscape().
Referenced by clang::CharLiteralParser::CharLiteralParser(), EncodeUCNEscape(), and MeasureUCNEscape().
|
static |
Definition at line 2147 of file LiteralSupport.cpp.