forked from OSchip/llvm-project
Added preproc callback for pragma directives.
llvm-svn: 186770
This commit is contained in:
parent
72d74057ea
commit
5afb04abaf
|
@ -19,6 +19,7 @@
|
||||||
#include "clang/Basic/SourceLocation.h"
|
#include "clang/Basic/SourceLocation.h"
|
||||||
#include "clang/Lex/DirectoryLookup.h"
|
#include "clang/Lex/DirectoryLookup.h"
|
||||||
#include "clang/Lex/ModuleLoader.h"
|
#include "clang/Lex/ModuleLoader.h"
|
||||||
|
#include "clang/Lex/Pragma.h"
|
||||||
#include "llvm/ADT/StringRef.h"
|
#include "llvm/ADT/StringRef.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -155,6 +156,11 @@ public:
|
||||||
virtual void Ident(SourceLocation Loc, const std::string &str) {
|
virtual void Ident(SourceLocation Loc, const std::string &str) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// \brief Callback invoked when start reading any pragma directive.
|
||||||
|
virtual void PragmaDirective(SourceLocation Loc,
|
||||||
|
PragmaIntroducerKind Introducer) {
|
||||||
|
}
|
||||||
|
|
||||||
/// \brief Callback invoked when a \#pragma comment directive is read.
|
/// \brief Callback invoked when a \#pragma comment directive is read.
|
||||||
virtual void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
|
virtual void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
|
||||||
const std::string &Str) {
|
const std::string &Str) {
|
||||||
|
|
|
@ -1457,7 +1457,8 @@ private:
|
||||||
void HandleElifDirective(Token &Tok);
|
void HandleElifDirective(Token &Tok);
|
||||||
|
|
||||||
// Pragmas.
|
// Pragmas.
|
||||||
void HandlePragmaDirective(unsigned Introducer);
|
void HandlePragmaDirective(SourceLocation IntroducerLoc,
|
||||||
|
PragmaIntroducerKind Introducer);
|
||||||
public:
|
public:
|
||||||
void HandlePragmaOnce(Token &OnceTok);
|
void HandlePragmaOnce(Token &OnceTok);
|
||||||
void HandlePragmaMark();
|
void HandlePragmaMark();
|
||||||
|
|
|
@ -757,7 +757,7 @@ void Preprocessor::HandleDirective(Token &Result) {
|
||||||
|
|
||||||
// C99 6.10.6 - Pragma Directive.
|
// C99 6.10.6 - Pragma Directive.
|
||||||
case tok::pp_pragma:
|
case tok::pp_pragma:
|
||||||
return HandlePragmaDirective(PIK_HashPragma);
|
return HandlePragmaDirective(SavedHash.getLocation(), PIK_HashPragma);
|
||||||
|
|
||||||
// GNU Extensions.
|
// GNU Extensions.
|
||||||
case tok::pp_import:
|
case tok::pp_import:
|
||||||
|
|
|
@ -101,7 +101,11 @@ void PragmaNamespace::HandlePragma(Preprocessor &PP,
|
||||||
|
|
||||||
/// HandlePragmaDirective - The "\#pragma" directive has been parsed. Lex the
|
/// HandlePragmaDirective - The "\#pragma" directive has been parsed. Lex the
|
||||||
/// rest of the pragma, passing it to the registered pragma handlers.
|
/// rest of the pragma, passing it to the registered pragma handlers.
|
||||||
void Preprocessor::HandlePragmaDirective(unsigned Introducer) {
|
void Preprocessor::HandlePragmaDirective(SourceLocation IntroducerLoc,
|
||||||
|
PragmaIntroducerKind Introducer) {
|
||||||
|
if (Callbacks)
|
||||||
|
Callbacks->PragmaDirective(IntroducerLoc, Introducer);
|
||||||
|
|
||||||
if (!PragmasEnabled)
|
if (!PragmasEnabled)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -109,7 +113,7 @@ void Preprocessor::HandlePragmaDirective(unsigned Introducer) {
|
||||||
|
|
||||||
// Invoke the first level of pragma handlers which reads the namespace id.
|
// Invoke the first level of pragma handlers which reads the namespace id.
|
||||||
Token Tok;
|
Token Tok;
|
||||||
PragmaHandlers->HandlePragma(*this, PragmaIntroducerKind(Introducer), Tok);
|
PragmaHandlers->HandlePragma(*this, Introducer, Tok);
|
||||||
|
|
||||||
// If the pragma handler didn't read the rest of the line, consume it now.
|
// If the pragma handler didn't read the rest of the line, consume it now.
|
||||||
if ((CurTokenLexer && CurTokenLexer->isParsingPreprocessorDirective())
|
if ((CurTokenLexer && CurTokenLexer->isParsingPreprocessorDirective())
|
||||||
|
@ -287,7 +291,7 @@ void Preprocessor::Handle_Pragma(Token &Tok) {
|
||||||
EnterSourceFileWithLexer(TL, 0);
|
EnterSourceFileWithLexer(TL, 0);
|
||||||
|
|
||||||
// With everything set up, lex this as a #pragma directive.
|
// With everything set up, lex this as a #pragma directive.
|
||||||
HandlePragmaDirective(PIK__Pragma);
|
HandlePragmaDirective(PragmaLoc, PIK__Pragma);
|
||||||
|
|
||||||
// Finally, return whatever came after the pragma directive.
|
// Finally, return whatever came after the pragma directive.
|
||||||
return Lex(Tok);
|
return Lex(Tok);
|
||||||
|
@ -336,7 +340,7 @@ void Preprocessor::HandleMicrosoft__pragma(Token &Tok) {
|
||||||
EnterTokenStream(TokArray, PragmaToks.size(), true, true);
|
EnterTokenStream(TokArray, PragmaToks.size(), true, true);
|
||||||
|
|
||||||
// With everything set up, lex this as a #pragma directive.
|
// With everything set up, lex this as a #pragma directive.
|
||||||
HandlePragmaDirective(PIK___pragma);
|
HandlePragmaDirective(PragmaLoc, PIK___pragma);
|
||||||
|
|
||||||
// Finally, return whatever came after the pragma directive.
|
// Finally, return whatever came after the pragma directive.
|
||||||
return Lex(Tok);
|
return Lex(Tok);
|
||||||
|
|
Loading…
Reference in New Issue