clang  3.9.0
Enumerations | Functions
Lexer.cpp File Reference
#include "clang/Lex/Lexer.h"
#include "UnicodeCharSets.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/CodeCompletionHandler.h"
#include "clang/Lex/LexDiagnostic.h"
#include "clang/Lex/LiteralSupport.h"
#include "clang/Lex/Preprocessor.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/MemoryBuffer.h"
#include <cstring>
Include dependency graph for Lexer.cpp:

Go to the source code of this file.

Enumerations

enum  PreambleDirectiveKind
 

Functions

static size_t getSpellingSlow (const Token &Tok, const char *BufPtr, const LangOptions &LangOpts, char *Spelling)
 Slow case of getSpelling. More...
 
static SourceLocation getBeginningOfFileToken (SourceLocation Loc, const SourceManager &SM, const LangOptions &LangOpts)
 
static CharSourceRange makeRangeFromFileLocs (CharSourceRange Range, const SourceManager &SM, const LangOptions &LangOpts)
 
static LLVM_ATTRIBUTE_NOINLINE
SourceLocation 
GetMappedTokenLoc (Preprocessor &PP, SourceLocation FileLoc, unsigned CharNo, unsigned TokLen)
 GetMappedTokenLoc - If lexing out of a 'mapped buffer', where we pretend the lexer buffer was all expanded at a single point, perform the mapping. More...
 
static char GetTrigraphCharForLetter (char Letter)
 GetTrigraphCharForLetter - Given a character that occurs after a ?? pair, return the decoded trigraph letter it corresponds to, or '\0' if nothing. More...
 
static char DecodeTrigraphChar (const char *CP, Lexer *L)
 DecodeTrigraphChar - If the specified character is a legal trigraph when prefixed with ??, emit a trigraph warning. More...
 
static bool isAllowedIDChar (uint32_t C, const LangOptions &LangOpts)
 
static bool isAllowedInitiallyIDChar (uint32_t C, const LangOptions &LangOpts)
 
static CharSourceRange makeCharRange (Lexer &L, const char *Begin, const char *End)
 
static void maybeDiagnoseIDCharCompat (DiagnosticsEngine &Diags, uint32_t C, CharSourceRange Range, bool IsFirst)
 
static bool isEndOfBlockCommentWithEscapedNewLine (const char *CurPtr, Lexer *L)
 isBlockCommentEndOfEscapedNewLine - Return true if the specified newline character (either \n or \r) is part of an escaped newline sequence. More...
 
static const char * FindConflictEnd (const char *CurPtr, const char *BufferEnd, ConflictMarkerKind CMK)
 Find the end of a version control conflict marker. More...
 

Enumeration Type Documentation

Definition at line 529 of file Lexer.cpp.

Function Documentation

static char DecodeTrigraphChar ( const char *  CP,
Lexer L 
)
static

DecodeTrigraphChar - If the specified character is a legal trigraph when prefixed with ??, emit a trigraph warning.

If trigraphs are enabled, return the result character. Finally, emit a warning about trigraph use whether trigraphs are enabled or not.

Definition at line 1118 of file Lexer.cpp.

References clang::Lexer::Diag(), clang::Lexer::getLangOpts(), GetTrigraphCharForLetter(), and clang::PreprocessorLexer::isLexingRawMode().

static const char* FindConflictEnd ( const char *  CurPtr,
const char *  BufferEnd,
ConflictMarkerKind  CMK 
)
static

Find the end of a version control conflict marker.

Definition at line 2609 of file Lexer.cpp.

References clang::CMK_Perforce.

static SourceLocation getBeginningOfFileToken ( SourceLocation  Loc,
const SourceManager SM,
const LangOptions LangOpts 
)
static
static SourceLocation GetMappedTokenLoc ( Preprocessor PP,
SourceLocation  FileLoc,
unsigned  CharNo,
unsigned  TokLen 
)
static

GetMappedTokenLoc - If lexing out of a 'mapped buffer', where we pretend the lexer buffer was all expanded at a single point, perform the mapping.

This is currently only used for _Pragma implementation, so it is the slow path of the hot getSourceLocation method. Do not allow it to be inlined.

Definition at line 1045 of file Lexer.cpp.

References clang::SourceLocation::getLocWithOffset(), clang::Preprocessor::getSourceManager(), clang::SourceLocation::isMacroID(), and SM.

Referenced by clang::Lexer::getSourceLocation().

static size_t getSpellingSlow ( const Token Tok,
const char *  BufPtr,
const LangOptions LangOpts,
char *  Spelling 
)
static

Slow case of getSpelling.

Extract the characters comprising the spelling of this token from the provided input buffer.

Definition at line 231 of file Lexer.cpp.

References clang::Lexer::getCharAndSizeNoWarn(), clang::Token::getKind(), clang::Token::getLength(), clang::tok::isStringLiteral(), Length, and clang::Token::needsCleaning().

Referenced by clang::Lexer::getSpelling().

static char GetTrigraphCharForLetter ( char  Letter)
static

GetTrigraphCharForLetter - Given a character that occurs after a ?? pair, return the decoded trigraph letter it corresponds to, or '\0' if nothing.

Definition at line 1099 of file Lexer.cpp.

Referenced by DecodeTrigraphChar().

static bool isAllowedIDChar ( uint32_t  C,
const LangOptions LangOpts 
)
static
static bool isAllowedInitiallyIDChar ( uint32_t  C,
const LangOptions LangOpts 
)
static
static bool isEndOfBlockCommentWithEscapedNewLine ( const char *  CurPtr,
Lexer L 
)
static

isBlockCommentEndOfEscapedNewLine - Return true if the specified newline character (either \n or \r) is part of an escaped newline sequence.

Issue a diagnostic if so. We know that the newline is inside of a block comment.

Definition at line 2210 of file Lexer.cpp.

References clang::Lexer::Diag(), clang::Lexer::getLangOpts(), clang::isHorizontalWhitespace(), and clang::PreprocessorLexer::isLexingRawMode().

static CharSourceRange makeCharRange ( Lexer L,
const char *  Begin,
const char *  End 
)
inlinestatic
static CharSourceRange makeRangeFromFileLocs ( CharSourceRange  Range,
const SourceManager SM,
const LangOptions LangOpts 
)
static
static void maybeDiagnoseIDCharCompat ( DiagnosticsEngine Diags,
uint32_t  C,
CharSourceRange  Range,
bool  IsFirst 
)
static