clang
10.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/ErrorHandling.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. More... | |
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. More... | |
static void | appendCodePoint (unsigned Codepoint, llvm::SmallVectorImpl< char > &Str) |
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) |
static const char * | resyncUTF8 (const char *Err, const char *End) |
|
static |
Definition at line 964 of file LiteralSupport.cpp.
Referenced by clang::NumericLiteralParser::GetFixedPointValue(), and clang::NumericLiteralParser::GetIntegerValue().
|
static |
Definition at line 229 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 77 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), Begin, clang::FullSourceLoc::getManager(), MakeCharSourceRange(), and clang::DiagnosticsEngine::Report().
Referenced by clang::Sema::ActOnBaseSpecifier(), clang::Sema::ActOnBlockStmtExpr(), clang::Sema::ActOnCallExpr(), clang::Sema::ActOnCaseStmt(), clang::Sema::ActOnCastExpr(), clang::Sema::ActOnClassPropertyRefExpr(), clang::Sema::ActOnCompoundStmt(), clang::Sema::ActOnCXXConditionDeclaration(), clang::Sema::ActOnCXXFoldExpr(), clang::Sema::ActOnCXXForRangeDecl(), clang::Sema::ActOnCXXTryBlock(), clang::Sema::ActOnCXXTypeid(), clang::Sema::ActOnDefaultStmt(), clang::Sema::ActOnDependentMemberExpr(), clang::Sema::ActOnFinishCXXMemberSpecification(), clang::Sema::ActOnFinishFunctionBody(), clang::Sema::ActOnForEachDeclStmt(), clang::Sema::ActOnForStmt(), clang::Sema::ActOnFriendFunctionDecl(), clang::Sema::ActOnFriendTypeDecl(), clang::Sema::ActOnInitList(), clang::Sema::ActOnLabelStmt(), clang::Sema::ActOnMemberAccessExpr(), clang::Sema::ActOnMemInitializers(), clang::Sema::ActOnModuleDecl(), clang::Sema::ActOnModuleImport(), clang::Sema::ActOnNamespaceAliasDef(), clang::Sema::ActOnObjCAtSynchronizedOperand(), clang::Sema::ActOnObjCAtThrowStmt(), clang::Sema::ActOnObjCAtTryStmt(), clang::Sema::ActOnObjCForCollectionStmt(), clang::Sema::ActOnOpenMPAlignedClause(), clang::Sema::ActOnOpenMPAtomicDefaultMemOrderClause(), clang::Sema::ActOnOpenMPAtomicDirective(), clang::Sema::ActOnOpenMPCancelDirective(), clang::Sema::ActOnOpenMPCancellationPointDirective(), clang::Sema::ActOnOpenMPCopyinClause(), clang::Sema::ActOnOpenMPCopyprivateClause(), clang::Sema::ActOnOpenMPCriticalDirective(), clang::Sema::ActOnOpenMPDeclareMapperType(), clang::Sema::ActOnOpenMPDeclareReductionType(), clang::Sema::ActOnOpenMPDeclareSimdDirective(), clang::Sema::ActOnOpenMPDeclareTargetName(), clang::Sema::ActOnOpenMPDefaultClause(), clang::Sema::ActOnOpenMPDefaultmapClause(), clang::Sema::ActOnOpenMPDependClause(), clang::Sema::ActOnOpenMPDistScheduleClause(), clang::Sema::ActOnOpenMPIdExpression(), clang::Sema::ActOnOpenMPIsDevicePtrClause(), clang::Sema::ActOnOpenMPLastprivateClause(), clang::Sema::ActOnOpenMPLinearClause(), clang::Sema::ActOnOpenMPMapClause(), clang::Sema::ActOnOpenMPNontemporalClause(), clang::Sema::ActOnOpenMPOrderedDirective(), clang::Sema::ActOnOpenMPParallelSectionsDirective(), clang::Sema::ActOnOpenMPPrivateClause(), clang::Sema::ActOnOpenMPProcBindClause(), clang::Sema::ActOnOpenMPRegionEnd(), clang::Sema::ActOnOpenMPRequiresDirective(), clang::Sema::ActOnOpenMPScheduleClause(), clang::Sema::ActOnOpenMPSectionsDirective(), clang::Sema::ActOnOpenMPSharedClause(), clang::Sema::ActOnOpenMPSingleDirective(), clang::Sema::ActOnOpenMPTargetDataDirective(), clang::Sema::ActOnOpenMPTargetEnterDataDirective(), clang::Sema::ActOnOpenMPTargetExitDataDirective(), clang::Sema::ActOnOpenMPTargetUpdateDirective(), clang::Sema::ActOnOpenMPUseDevicePtrClause(), clang::Sema::ActOnPackExpansion(), clang::Sema::ActOnParamDefaultArgument(), clang::Sema::ActOnPrivateModuleFragmentDecl(), clang::Sema::ActOnPureSpecifier(), clang::Sema::ActOnSEHExceptBlock(), clang::Sema::ActOnSEHLeaveStmt(), clang::Sema::ActOnSEHTryBlock(), clang::Sema::ActOnStartLinkageSpecification(), clang::Sema::ActOnStartNamespaceDef(), clang::Sema::ActOnStartOfFunctionDef(), clang::Sema::ActOnStartOfSwitchStmt(), clang::Sema::ActOnStartOpenMPDeclareTargetDirective(), clang::Sema::ActOnTemplateParameterList(), clang::Sema::ActOnTypeConstraint(), clang::Sema::ActOnTypenameType(), clang::Sema::ActOnUninitializedDecl(), clang::Sema::ActOnUsingDirective(), addConstraintSatisfaction(), clang::Sema::AddInitializerToDecl(), clang::Sema::addLambdaParameters(), clang::interp::State::addNotes(), applyEditsToTemp(), clang::Sema::AttachTypeConstraint(), clang::FixItRewriter::buffer_end(), clang::Sema::BuildArrayType(), clang::Sema::BuildAtomicExpr(), clang::Sema::BuildBaseInitializer(), clang::Sema::BuildBinOp(), clang::Sema::BuildBlockPointerType(), clang::Sema::BuildCallExpr(), clang::Sema::BuildClassMessage(), clang::Sema::BuildCXXThrow(), clang::Sema::BuildCXXUuidof(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::BuildDelegatingInitializer(), clang::Sema::BuildExtVectorType(), clang::Sema::BuildInstanceMessage(), clang::Sema::BuildLambdaExpr(), clang::Sema::BuildMemberPointerType(), clang::Sema::BuildMemberReferenceExpr(), clang::Sema::BuildMemInitializer(), clang::Sema::BuildObjCAtThrowStmt(), clang::Sema::BuildObjCBridgedCast(), clang::Sema::BuildPointerType(), clang::Sema::BuildPredefinedExpr(), clang::Sema::BuildQualifiedDeclarationNameExpr(), clang::Sema::BuildQualifiedTemplateIdExpr(), clang::Sema::BuildQualifiedType(), clang::Sema::BuildResolvedCallExpr(), clang::Sema::BuildReturnStmt(), clang::Sema::BuildStaticAssertDeclaration(), clang::Sema::BuildTypeofExprType(), clang::Sema::BuildUnaryTransformType(), clang::Sema::BuildVAArgExpr(), clang::Sema::BuildVectorLiteral(), clang::Sema::BuildVectorType(), clang::interp::State::CCEDiag(), clang::Sema::CheckAddressOfOperand(), clang::Sema::CheckAssignmentOperands(), clang::Sema::CheckBaseSpecifier(), clang::Sema::CheckBooleanCondition(), checkBuiltinArgument(), clang::Sema::CheckCompletedCoroutineBody(), clang::Sema::CheckCompletedCXXClass(), clang::Sema::CheckCompleteVariableDeclaration(), clang::Sema::CheckConditionalOperands(), clang::Sema::CheckConstexprFunctionDefinition(), clang::Sema::CheckConstructorDeclarator(), clang::Sema::CheckConversionDeclarator(), CheckCXX98CompatAccessibleCopy(), clang::Sema::CheckCXXDefaultArgExpr(), clang::Sema::CheckCXXDefaultArguments(), clang::Sema::checkDeclIsAllowedInOpenMPTarget(), clang::Sema::CheckDeductionGuideDeclarator(), clang::Sema::CheckDeductionGuideTemplate(), clang::Sema::CheckDependentFunctionTemplateSpecialization(), clang::Sema::CheckDestructor(), clang::Sema::CheckDestructorDeclarator(), clang::Sema::CheckEnumRedeclaration(), clang::Sema::CheckEnumUnderlyingType(), clang::Sema::CheckExplicitlyDefaultedSpecialMember(), clang::Sema::CheckExtraCXXDefaultArguments(), clang::Sema::CheckFloatComparison(), clang::Sema::CheckForFunctionRedefinition(), clang::Sema::CheckFriendTypeDecl(), clang::Sema::CheckFunctionReturnType(), clang::Sema::CheckIfOverriddenFunctionIsMarkedFinal(), clang::Sema::checkIllFormedTrivialABIStruct(), clang::Sema::CheckInheritingConstructorUsingDecl(), clang::Sema::checkInitializerLifetime(), checkIntToPointerCast(), clang::Sema::CheckLiteralOperatorDeclaration(), clang::Sema::CheckLogicalOperands(), clang::Sema::CheckLoopHintExpr(), clang::Sema::CheckMain(), clang::Sema::CheckMessageArgumentTypes(), checkMoreSpecializedThanPrimary(), clang::Sema::CheckMSVCRTEntryPoint(), clang::Sema::CheckNonTypeTemplateParameterType(), clang::Sema::checkObjCBridgeRelatedComponents(), clang::Sema::CheckObjCBridgeRelatedConversions(), clang::Sema::CheckObjCConversion(), clang::Sema::CheckObjCForCollectionOperand(), checkObjCPointerIntrospection(), clang::Sema::CheckOMPRequiresDecl(), clang::Sema::checkOpenMPDeclareVariantFunction(), clang::Sema::CheckOpenMPLinearDecl(), clang::Sema::CheckOpenMPLinearModifier(), clang::Sema::CheckOverloadedOperatorDeclaration(), clang::Sema::CheckOverrideControl(), clang::Sema::CheckOverridingFunctionAttributes(), clang::Sema::CheckPackExpansion(), clang::Sema::CheckParmsForFunctionDef(), clang::Sema::CheckPureMethod(), clang::Sema::CheckQualifiedFunctionForTypeId(), clang::Sema::CheckRedeclarationModuleOwnership(), clang::Sema::CheckShadowingDeclModification(), clang::Sema::CheckSingleAssignmentConstraints(), clang::Sema::CheckSpecializationInstantiationRedecl(), clang::Sema::checkStringLiteralArgumentAttr(), clang::Sema::CheckSubscriptingKind(), clang::Sema::CheckTemplateArgument(), clang::Sema::CheckTemplateDeclScope(), CheckTemplateSpecializationScope(), clang::Sema::checkUnsafeExprAssigns(), clang::Sema::CheckUsingDeclQualifier(), clang::Sema::CheckUsingDeclRedeclaration(), clang::Sema::CheckUsingShadowDecl(), clang::Sema::checkVarDeclRedefinition(), clang::Sema::CheckVariableDeclarationType(), clang::Sema::checkVariadicArgument(), checkVAStartIsInVariadicFunction(), clang::Sema::CheckVectorCompareOperands(), computeKeyFunction(), clang::SrcMgr::ContentCache::ContentCache(), clang::Sema::ConversionToObjCStringLiteralCheck(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CreateBuiltinUnaryOp(), clang::Sema::CreateUnaryExprOrTypeTraitExpr(), clang::Sema::DeduceAutoType(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), clang::Sema::DeduceTemplateSpecializationFromInitializer(), clang::DeductionFailureInfo::Destroy(), clang::Sema::Diag(), clang::ASTReader::Diag(), clang::Sema::diagIfOpenMPHostCode(), clang::Sema::DiagnoseAbsenceOfOverrideControl(), clang::Sema::DiagnoseAbstractType(), clang::Sema::DiagnoseAlwaysNonNullPointer(), clang::Sema::DiagnoseAssignmentAsCondition(), clang::Sema::DiagnoseAutoDeductionFailure(), clang::Sema::DiagnoseCommaOperator(), clang::Sema::DiagnoseEmptyLoopBody(), clang::Sema::DiagnoseEmptyStmtBody(), clang::Sema::diagnoseEquivalentInternalLinkageDeclarations(), clang::Sema::DiagnoseFunctionSpecifiers(), clang::Sema::DiagnoseHiddenVirtualMethods(), clang::Sema::DiagnoseMisalignedMembers(), clang::Sema::diagnoseMissingImport(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), clang::Sema::DiagnoseSelfMove(), clang::Sema::DiagnoseSentinelCalls(), clang::Sema::DiagnoseShadowingLambdaDecls(), clang::Sema::DiagnoseTemplateParameterShadow(), clang::Sema::diagnoseTypo(), clang::Sema::DiagnoseUnusedLambdaCapture(), clang::Sema::DiagnoseUnusedParameters(), clang::Sema::DiagnoseUseOfDecl(), clang::Sema::DiagRuntimeBehavior(), emitNullabilityConsistencyWarning(), clang::DiagnosticRenderer::emitStoredDiagnostic(), clang::DiagnosticRenderer::endDiagnostic(), clang::Sema::EnsureTemplateArgumentListConstraints(), clang::Preprocessor::EnterSourceFile(), EvaluateDirectiveSubExpr(), clang::Expr::EvaluateKnownConstInt(), clang::Expr::EvaluateKnownConstIntCheckOverflow(), clang::interp::State::FFDiag(), clang::Sema::FinalizeVarWithDestructor(), clang::Sema::FindInstantiatedDecl(), clang::TextDiagnosticBuffer::FlushDiagnostics(), clang::arcmt::FileRemapper::flushToFile(), clang::Diagnostic::FormatDiagnostic(), clang::Lexer::getBuffer(), clang::DiagnosticIDs::getCategoryNumberForDiag(), clang::Sema::getDestructorTypeForDecltype(), clang::DiagnosticIDs::getDiagnosticFlags(), clang::SourceManager::getDiagnostics(), clang::Sema::GetFormatStringType(), clang::Sema::getMostSpecialized(), clang::DiagnosticIDs::getNearestOption(), GetNSSetArgumentIndex(), getNumberOfModules(), clang::ASTReader::getOwningModuleNameForDiagnostic(), getPaddingDiagFromTagKind(), clang::ASTReader::getSuggestedPredefines(), clang::Preprocessor::HandleEndOfFile(), clang::Sema::HandleExprPropertyRefExpr(), clang::Sema::HandleMSProperty(), clang::Preprocessor::HandlePragmaDependency(), clang::Preprocessor::HandlePragmaHdrstop(), clang::Preprocessor::HandlePragmaIncludeAlias(), clang::Preprocessor::HandlePragmaModuleBuild(), clang::Preprocessor::HandlePragmaOnce(), clang::Preprocessor::HandlePragmaPoison(), clang::Preprocessor::HandlePragmaPopMacro(), clang::Preprocessor::HandlePragmaSystemHeader(), clang::DiagnosticsEngine::hasAllExtensionsSilenced(), clang::Sema::inferObjCARCLifetime(), clang::Sema::InstantiateExceptionSpec(), clang::Sema::InstantiateFunctionDefinition(), clang::Sema::InvalidLogicalVectorOperands(), clang::Sema::InvalidOperands(), isDiagnosedResult(), isGCCAsmStatement(), clang::Sema::isOpenMPTargetCapturedDecl(), IsSameCharType(), IsShiftedByte(), clang::Preprocessor::LexOnOffSwitch(), clang::Sema::lookupCoroutineTraits(), clang::Sema::LookupIvarInObjCMethod(), clang::Sema::lookupOpenMPDeclareTargetName(), clang::Sema::MaybeSuggestAddingStaticToDecl(), clang::Sema::MergeVarDecl(), moduleKindForDiagnostic(), clang::Sema::NoteDeletedFunction(), clang::Sema::NoteHiddenVirtualMethods(), clang::Sema::NoteOverloadCandidate(), clang::Sema::notePreviousDefinition(), clang::arcmt::FileRemapper::overwriteOriginal(), parseDeclareSimdClauses(), parseDeviceSelector(), ParseLangArgs(), clang::Parser::parseMapperModifier(), clang::Parser::parseMapTypeModifiers(), clang::Sema::ParseObjCProtocolExpression(), clang::Sema::ParseObjCSelectorExpression(), clang::Parser::ParseOpenMPParensExpr(), parseOpenMPSimpleClause(), clang::Parser::ParseOpenMPVarList(), clang::Preprocessor::ParsePragmaPushOrPopMacro(), clang::Sema::PopExpressionEvaluationContext(), PragmaLoopHintString(), ProcessCharEscape(), ProcessUCNEscape(), clang::Sema::propagateDLLAttrToBaseClassTemplate(), clang::serialization::reader::ASTDeclContextNameLookupTrait::ReadDataInto(), clang::arcmt::FileRemapper::remap(), clang::ASTReader::resolvePendingMacro(), roundUpSizeToCharAlignment(), clang::runWithSufficientStackSpace(), clang::runWithSufficientStackSpaceSlow(), SemaBuiltinCpuIs(), clang::Sema::SemaBuiltinShuffleVector(), clang::Sema::SemaConvertVectorExpr(), clang::Sema::SetDeclDefaulted(), clang::Sema::SetDeclDeleted(), clang::DiagnosticsEngine::setDiagnosticGroupErrorAsFatal(), clang::DiagnosticsEngine::setDiagnosticGroupWarningAsError(), clang::Sema::SetMemberAccessSpecifier(), clang::DiagnosticsEngine::setSeverityForAll(), clang::DiagnosticsEngine::setSeverityForGroup(), clang::Sema::ShouldDeleteSpecialMember(), clang::Sema::SpecialMemberIsTrivial(), clang::Sema::TemplateParameterListsAreEqual(), clang::Sema::tryCaptureVariable(), clang::Sema::VerifyBitField(), clang::Sema::WarnOnPendingNoDerefs(), and clang::ento::PathDiagnosticConsumer::~PathDiagnosticConsumer().
|
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 380 of file LiteralSupport.cpp.
References ProcessUCNEscape().
Referenced by clang::StringLiteralParser::StringLiteralParser().
|
static |
Definition at line 38 of file LiteralSupport.cpp.
References clang::TargetInfo::getChar16Width(), clang::TargetInfo::getChar32Width(), clang::TargetInfo::getCharWidth(), and clang::TargetInfo::getWCharWidth().
Referenced by clang::CharLiteralParser::CharLiteralParser(), clang::TargetInfo::hasBuiltinAtomic(), and clang::StringLiteralParser::StringLiteralParser().
|
inlinestatic |
Definition at line 1061 of file LiteralSupport.cpp.
Referenced by clang::NumericLiteralParser::GetFixedPointValue().
|
static |
Definition at line 58 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 345 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 90 of file LiteralSupport.cpp.
References Diag(), clang::isHexDigit(), and clang::isPrintable().
Referenced by clang::CharLiteralParser::CharLiteralParser(), clang::StringLiteralParser::getOffsetOfStringByte(), and clang::StringLiteralParser::StringLiteralParser().
|
static |
ProcessUCNEscape - Read the Universal Character Name, check constraints and return the UTF32.
Definition at line 273 of file LiteralSupport.cpp.
References Diag(), and clang::isHexDigit().
Referenced by clang::CharLiteralParser::CharLiteralParser(), EncodeUCNEscape(), and MeasureUCNEscape().
|
static |
Definition at line 1751 of file LiteralSupport.cpp.
References End, clang::Token::getLocation(), clang::StringLiteralParser::isAscii(), memcpy(), and clang::format::Tok.