From 9c33e02eb384f9a9833773c43eda349b0efff73b Mon Sep 17 00:00:00 2001 From: Simon Schuster <git@rationality.eu> Date: Sat, 13 May 2017 00:39:31 +0200 Subject: [PATCH] Add `#pragma platina callee` to the frontend. What it says on the tin. Parsing only. --- include/clang/Basic/Attr.td | 2 +- include/clang/Parse/Parser.h | 1 + lib/Parse/ParsePragma.cpp | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 5a16f53208..e03bc9b30a 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -2183,7 +2183,7 @@ def Loopbound : Attr { def Platina : Attr { // #pragma platina guard <str> - let Spellings = [Pragma<"platina", "guard">]; + let Spellings = [Pragma<"platina", "guard">, Pragma<"platina", "callee">]; let Args = [IdentifierArgument<"Type">, StringArgument<"PlatinaExpr">]; let Documentation = [Undocumented]; diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 5ab03ecfc4..26b8d18f20 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -169,6 +169,7 @@ class Parser : public CodeCompletionHandler { std::unique_ptr<PragmaHandler> OptimizeHandler; std::unique_ptr<PragmaHandler> LoopboundHandler; std::unique_ptr<PragmaHandler> PlatinaGuardHandler; + std::unique_ptr<PragmaHandler> PlatinaCalleeHandler; std::unique_ptr<PragmaHandler> PlatinHandler; std::unique_ptr<PragmaHandler> LoopHintHandler; std::unique_ptr<PragmaHandler> UnrollHintHandler; diff --git a/lib/Parse/ParsePragma.cpp b/lib/Parse/ParsePragma.cpp index 90ace83078..659a333e1b 100644 --- a/lib/Parse/ParsePragma.cpp +++ b/lib/Parse/ParsePragma.cpp @@ -163,6 +163,10 @@ struct PragmaPlatinaGuardHandler : public PragmaPlatinaHandler { PragmaPlatinaGuardHandler() : PragmaPlatinaHandler("guard") {} }; +struct PragmaPlatinaCalleeHandler : public PragmaPlatinaHandler { + PragmaPlatinaCalleeHandler() : PragmaPlatinaHandler("callee") {} +}; + struct PragmaPlatinHandler : public PragmaHandler { PragmaPlatinHandler() : PragmaHandler("platin") { } void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, @@ -264,6 +268,9 @@ void Parser::initializePragmaHandlers() { PlatinaGuardHandler.reset(new PragmaPlatinaGuardHandler()); PP.AddPragmaHandler("platina", PlatinaGuardHandler.get()); + PlatinaCalleeHandler.reset(new PragmaPlatinaCalleeHandler()); + PP.AddPragmaHandler("platina", PlatinaCalleeHandler.get()); + PlatinHandler.reset(new PragmaPlatinHandler()); PP.AddPragmaHandler(PlatinHandler.get()); @@ -347,6 +354,9 @@ void Parser::resetPragmaHandlers() { PP.RemovePragmaHandler("platina", PlatinaGuardHandler.get()); PlatinaGuardHandler.reset(); + PP.RemovePragmaHandler("platina", PlatinaCalleeHandler.get()); + PlatinaCalleeHandler.reset(); + PP.RemovePragmaHandler("clang", LoopHintHandler.get()); LoopHintHandler.reset(); -- GitLab