diff options
Diffstat (limited to 'contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h')
-rw-r--r-- | contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h | 51 |
1 files changed, 43 insertions, 8 deletions
diff --git a/contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h b/contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h index bc1754614ad9..e1626a7870bb 100644 --- a/contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h +++ b/contrib/llvm-project/clang/include/clang/Parse/RAIIObjectsForParser.h @@ -11,8 +11,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_LIB_PARSE_RAIIOBJECTSFORPARSER_H -#define LLVM_CLANG_LIB_PARSE_RAIIOBJECTSFORPARSER_H +#ifndef LLVM_CLANG_PARSE_RAIIOBJECTSFORPARSER_H +#define LLVM_CLANG_PARSE_RAIIOBJECTSFORPARSER_H #include "clang/Parse/ParseDiagnostic.h" #include "clang/Parse/Parser.h" @@ -201,9 +201,11 @@ namespace clang { ParsingDeclRAIIObject ParsingRAII; public: - ParsingDeclarator(Parser &P, const ParsingDeclSpec &DS, DeclaratorContext C) - : Declarator(DS, C), ParsingRAII(P, &DS.getDelayedDiagnosticPool()) { - } + ParsingDeclarator(Parser &P, const ParsingDeclSpec &DS, + const ParsedAttributes &DeclarationAttrs, + DeclaratorContext C) + : Declarator(DS, DeclarationAttrs, C), + ParsingRAII(P, &DS.getDelayedDiagnosticPool()) {} const ParsingDeclSpec &getDeclSpec() const { return static_cast<const ParsingDeclSpec&>(Declarator::getDeclSpec()); @@ -228,9 +230,10 @@ namespace clang { ParsingDeclRAIIObject ParsingRAII; public: - ParsingFieldDeclarator(Parser &P, const ParsingDeclSpec &DS) - : FieldDeclarator(DS), ParsingRAII(P, &DS.getDelayedDiagnosticPool()) { - } + ParsingFieldDeclarator(Parser &P, const ParsingDeclSpec &DS, + const ParsedAttributes &DeclarationAttrs) + : FieldDeclarator(DS, DeclarationAttrs), + ParsingRAII(P, &DS.getDelayedDiagnosticPool()) {} const ParsingDeclSpec &getDeclSpec() const { return static_cast<const ParsingDeclSpec&>(D.getDeclSpec()); @@ -306,6 +309,25 @@ namespace clang { ~ParsingOpenMPDirectiveRAII() { restore(); } }; + /// Activates OpenACC parsing mode to preseve OpenACC specific annotation + /// tokens. + class ParsingOpenACCDirectiveRAII { + Parser &P; + bool OldVal; + + public: + ParsingOpenACCDirectiveRAII(Parser &P, bool Value = true) + : P(P), OldVal(P.OpenACCDirectiveParsing) { + P.OpenACCDirectiveParsing = Value; + } + + /// This can be used to restore the state early, before the dtor + /// is run. + void restore() { P.OpenMPDirectiveParsing = OldVal; } + + ~ParsingOpenACCDirectiveRAII() { restore(); } + }; + /// RAII object that makes '>' behave either as an operator /// or as the closing angle bracket for a template argument list. class GreaterThanIsOperatorScope { @@ -338,6 +360,19 @@ namespace clang { } }; + class OffsetOfStateRAIIObject { + Sema::OffsetOfKind &OffsetOfState; + Sema::OffsetOfKind OldValue; + + public: + OffsetOfStateRAIIObject(Parser &P, Sema::OffsetOfKind Value) + : OffsetOfState(P.OffsetOfState), OldValue(P.OffsetOfState) { + OffsetOfState = Value; + } + + ~OffsetOfStateRAIIObject() { OffsetOfState = OldValue; } + }; + /// RAII object that makes sure paren/bracket/brace count is correct /// after declaration/statement parsing, even when there's a parsing error. class ParenBraceBracketBalancer { |