clang
19.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 unsigned | getEncodingPrefixLen (tok::TokenKind kind) |
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. More... | |
static bool | IsEscapeValidInUnevaluatedStringLiteral (char Escape) |
static unsigned | ProcessCharEscape (const char *ThisTokBegin, const char *&ThisTokBuf, const char *ThisTokEnd, bool &HadError, FullSourceLoc Loc, unsigned CharWidth, DiagnosticsEngine *Diags, const LangOptions &Features, StringLiteralEvalMethod EvalMethod) |
ProcessCharEscape - Parse a standard C escape sequence, which can occur in either a character or a string literal. More... | |
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. More... | |
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. More... | |
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. More... | |
static bool | alwaysFitsInto64Bits (unsigned Radix, unsigned NumDigits) |
static bool | IsExponentPart (char c, bool isHex) |
static const char * | resyncUTF8 (const char *Err, const char *End) |
Definition at line 1447 of file LiteralSupport.cpp.
Referenced by clang::NumericLiteralParser::GetFixedPointValue(), and clang::NumericLiteralParser::GetIntegerValue().
|
static |
Definition at line 372 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 99 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), Begin, clang::FullSourceLoc::getManager(), MakeCharSourceRange(), and clang::DiagnosticsEngine::Report().
Referenced by clang::Sema::ActOnCallExpr(), clang::Sema::ActOnCaseStmt(), clang::Sema::ActOnCompoundStmt(), clang::Sema::ActOnCXXAssumeAttr(), clang::Sema::ActOnCXXForRangeDecl(), clang::Sema::ActOnCXXTypeid(), clang::Sema::ActOnDefaultStmt(), clang::Sema::ActOnDependentMemberExpr(), clang::Sema::ActOnForEachDeclStmt(), clang::Sema::ActOnForStmt(), clang::Sema::ActOnInitList(), clang::Sema::ActOnLabelStmt(), clang::Sema::ActOnLambdaExpressionAfterIntroducer(), clang::Sema::ActOnModuleDecl(), clang::Sema::ActOnModuleImport(), clang::Sema::ActOnMSAsmStmt(), clang::Sema::ActOnPrivateModuleFragmentDecl(), clang::Sema::ActOnReturnStmt(), clang::Sema::ActOnSEHExceptBlock(), clang::Sema::ActOnSEHLeaveStmt(), clang::Sema::ActOnSEHTryBlock(), clang::Sema::ActOnStartOfFunctionDef(), clang::Sema::ActOnStartOfSwitchStmt(), clang::Sema::ActOnTemplateParameterList(), clang::Sema::ActOnUninitializedDecl(), addConstraintSatisfaction(), clang::Sema::AddInitializerToDecl(), clang::interp::State::addNotes(), applyEditsToTemp(), clang::Sema::AttachTypeConstraint(), clang::Sema::BuildAtomicExpr(), clang::Sema::BuildCallExpr(), clang::Sema::BuildCodeAlignAttr(), clang::Sema::BuildCXXUuidof(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::BuildLambdaExpr(), clang::Sema::BuildPredefinedExpr(), clang::Sema::BuildQualifiedDeclarationNameExpr(), clang::Sema::BuildQualifiedTemplateIdExpr(), clang::Sema::BuildResolvedCallExpr(), clang::Sema::BuildReturnStmt(), clang::SemaSYCL::BuildSYCLBuiltinBaseTypeExpr(), clang::SemaSYCL::BuildSYCLBuiltinFieldTypeExpr(), clang::SemaSYCL::BuildSYCLBuiltinNumBasesExpr(), clang::SemaSYCL::BuildSYCLBuiltinNumFieldsExpr(), clang::Sema::BuildSYCLIntelInitiationIntervalAttr(), clang::Sema::BuildSYCLIntelIVDepAttr(), clang::Sema::BuildSYCLIntelLoopCoalesceAttr(), clang::Sema::BuildSYCLIntelLoopCountAttr(), clang::Sema::BuildSYCLIntelMaxConcurrencyAttr(), clang::Sema::BuildSYCLIntelMaxInterleavingAttr(), clang::Sema::BuildSYCLIntelMaxReinvocationDelayAttr(), clang::Sema::BuildSYCLIntelSpeculatedIterationsAttr(), clang::Sema::BuildVAArgExpr(), clang::Sema::BuildVectorLiteral(), clang::Sema::BuiltinConstantArgMultiple(), clang::Sema::BuiltinConstantArgPower2(), clang::Sema::BuiltinConstantArgRange(), clang::Sema::BuiltinConstantArgShiftedByte(), clang::Sema::BuiltinConstantArgShiftedByteOrXXFF(), clang::Sema::BuiltinShuffleVector(), clang::Sema::BuiltinVectorMath(), clang::interp::State::CCEDiag(), clang::Sema::CheckAddressOfOperand(), clang::Sema::checkArgCount(), clang::Sema::checkArgCountAtLeast(), clang::Sema::checkArgCountAtMost(), clang::Sema::CheckAssignmentOperands(), checkAVX512ParamFeature(), checkAVXParam(), checkAVXParamFeature(), clang::Sema::CheckBooleanCondition(), clang::Sema::CheckCompletedCoroutineBody(), clang::Sema::CheckCompleteVariableDeclaration(), clang::Sema::CheckConceptRedefinition(), clang::Sema::CheckCoroutineWrapper(), clang::Sema::CheckCXXDefaultArgExpr(), clang::Sema::CheckCXXThrowOperand(), clang::Sema::CheckDeductionGuideTemplate(), clang::Sema::CheckDependentFunctionTemplateSpecialization(), clang::Sema::CheckEnumRedeclaration(), clang::Sema::CheckEnumUnderlyingType(), clang::Sema::checkFinalSuspendNoThrow(), clang::Sema::CheckForFunctionRedefinition(), clang::SemaPseudoObject::checkIncDec(), checkIntToPointerCast(), clang::SemaRISCV::CheckLMUL(), clang::Sema::CheckLogicalOperands(), clang::Sema::CheckLoopHintExpr(), clang::Sema::CheckMain(), clang::Sema::CheckMatrixCast(), clang::Sema::CheckNonTypeTemplateParameterType(), clang::Sema::CheckParmsForFunctionDef(), clang::Sema::CheckRedeclarationModuleOwnership(), clang::SemaRISCV::checkRVVTypeSupport(), clang::Sema::CheckShadowingDeclModification(), clang::Sema::CheckSingleAssignmentConstraints(), clang::Sema::CheckSizelessVectorCompareOperands(), clang::Sema::CheckSizelessVectorOperands(), clang::Sema::CheckTCBEnforcement(), clang::Sema::CheckTypeConstraint(), clang::Sema::checkUnsafeExprAssigns(), clang::Sema::CheckUseOfCXXMethodAsAddressOfOperand(), clang::Sema::checkVarDeclRedefinition(), clang::Sema::CheckVariableDeclarationType(), clang::Sema::checkVariadicArgument(), clang::Sema::CheckVectorCompareOperands(), clang::computeDependence(), clang::Sema::ConvertVectorExpr(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateBuiltinUnaryOp(), createResult(), createThreadFlows(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), clang::DeductionFailureInfo::Destroy(), clang::Sema::DiagIfReachable(), clang::Sema::DiagnoseAlwaysNonNullPointer(), clang::Sema::DiagnoseAssignmentAsCondition(), clang::Sema::DiagnoseDependentMemberLookup(), clang::Sema::DiagnoseDeprecatedAttribute(), clang::Sema::DiagnoseEmptyStmtBody(), clang::Sema::DiagnoseFunctionSpecifiers(), diagnoseInstanceReference(), clang::Sema::DiagnoseMisalignedMembers(), clang::ODRDiagsEmitter::diagnoseMismatch(), clang::Sema::DiagnoseSelfMove(), clang::Sema::DiagnoseSentinelCalls(), clang::Sema::DiagnoseShadowingLambdaDecls(), clang::Sema::DiagnoseTemplateParameterShadow(), clang::Sema::DiagnoseUnusedDecl(), clang::Sema::DiagnoseUnusedLambdaCapture(), clang::Sema::DiagnoseUnusedNestedTypedefs(), clang::Sema::DiagnoseUnusedParameters(), clang::installapi::DylibVerifier::VerifierContext::emitDiag(), clang::SARIFDiagnostic::emitDiagnosticMessage(), clang::DiagnosticRenderer::emitStoredDiagnostic(), clang::Sema::EnsureTemplateArgumentListConstraints(), EvaluateFeatureLikeBuiltinMacro(), clang::Expr::EvaluateKnownConstInt(), clang::Expr::EvaluateKnownConstIntCheckOverflow(), clang::interp::State::FFDiag(), clang::TextDiagnosticBuffer::FlushDiagnostics(), clang::arcmt::FileRemapper::flushToDisk(), clang::arcmt::FileRemapper::flushToFile(), clang::Diagnostic::FormatDiagnostic(), clang::SrcMgr::ContentCache::getBufferOrNone(), clang::Sema::getDarwinSDKInfoForAvailabilityChecking(), clang::Sema::getDestructorTypeForDecltype(), clang::DiagnosticIDs::getDiagnosticFlags(), clang::SourceManager::getLineNumber(), clang::SourceManager::getPresumedLoc(), clang::SourceMgrAdapter::handleDiag(), clang::arcmt::FileRemapper::initFromDisk(), clang::arcmt::FileRemapper::initFromFile(), clang::Sema::InvalidLogicalVectorOperands(), clang::Sema::InvalidOperands(), clang::Sema::MaybeSuggestAddingStaticToDecl(), clang::Sema::MergeVarDecl(), clang::Sema::NoteDeletedFunction(), clang::Sema::notePreviousDefinition(), clang::Rewriter::overwriteChangedFiles(), clang::arcmt::FileRemapper::overwriteOriginal(), clang::Parser::parseMapperModifier(), clang::Parser::parseMapTypeModifiers(), clang::Parser::ParseOpenMPVarList(), clang::Sema::PopExpressionEvaluationContext(), printDiagnostic(), ProcessCharEscape(), ProcessNamedUCNEscape(), ProcessNumericUCNEscape(), ProcessUCNEscape(), clang::ASTReader::ReadPragmaDiagnosticMappings(), reportDiag(), clang::Sema::RequireStructuralType(), clang::runWithSufficientStackSpace(), clang::runWithSufficientStackSpaceSlow(), clang::DiagnosticsEngine::setDiagnosticGroupErrorAsFatal(), clang::DiagnosticsEngine::setDiagnosticGroupWarningAsError(), clang::Sema::SetMemberAccessSpecifier(), clang::DiagnosticsEngine::setSeverity(), clang::DiagnosticsEngine::setSeverityForAll(), clang::DiagnosticsEngine::setSeverityForGroup(), clang::Sema::TemplateParameterListsAreEqual(), clang::SourceManager::translateLineCol(), TryReinterpretCast(), clang::Sema::VerifyBitField(), clang::Sema::WarnOnPendingNoDerefs(), and clang::ento::PathDiagnosticConsumer::~PathDiagnosticConsumer().
|
static |
Definition at line 541 of file LiteralSupport.cpp.
|
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 755 of file LiteralSupport.cpp.
References Loc, ProcessUCNEscape(), clang::UTF32, and clang::UTF8.
|
static |
Definition at line 40 of file LiteralSupport.cpp.
Referenced by clang::CharLiteralParser::CharLiteralParser(), clang::TargetInfo::getBitIntAlign(), clang::TargetInfo::hasBuiltinAtomic(), and clang::targets::X86TargetInfo::X86TargetInfo().
|
static |
Definition at line 60 of file LiteralSupport.cpp.
|
static |
Definition at line 110 of file LiteralSupport.cpp.
Referenced by ProcessCharEscape().
Definition at line 1544 of file LiteralSupport.cpp.
References c.
Referenced by clang::NumericLiteralParser::GetFixedPointValue().
|
static |
Definition at line 80 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), Begin, End, clang::CharSourceRange::getCharRange(), and clang::FullSourceLoc::getManager().
Referenced by Diag().
|
static |
MeasureUCNEscape - Determine the number of bytes within the resulting string which this UCN will occupy.
Definition at line 720 of file LiteralSupport.cpp.
References Loc, and 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 130 of file LiteralSupport.cpp.
References Diag(), IsEscapeValidInUnevaluatedStringLiteral(), clang::isHexDigit(), clang::isPrintable(), Loc, and clang::Unevaluated.
Referenced by clang::CharLiteralParser::CharLiteralParser(), and clang::StringLiteralParser::getOffsetOfStringByte().
|
static |
Definition at line 596 of file LiteralSupport.cpp.
References AttributeLangSupport::C, Diag(), clang::Incomplete, clang::isVerticalWhitespace(), and Loc.
Referenced by ProcessUCNEscape().
|
static |
Definition at line 455 of file LiteralSupport.cpp.
References Diag(), clang::isHexDigit(), and Loc.
Referenced by ProcessUCNEscape().
|
static |
ProcessUCNEscape - Read the Universal Character Name, check constraints and return the UTF32.
Definition at line 645 of file LiteralSupport.cpp.
References Diag(), Loc, ProcessNamedUCNEscape(), and ProcessNumericUCNEscape().
Referenced by clang::CharLiteralParser::CharLiteralParser(), EncodeUCNEscape(), and MeasureUCNEscape().
|
static |
Definition at line 2282 of file LiteralSupport.cpp.
References End.