diff options
Diffstat (limited to 'clang/lib/Parse/ParsePragma.h')
-rw-r--r-- | clang/lib/Parse/ParsePragma.h | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParsePragma.h b/clang/lib/Parse/ParsePragma.h new file mode 100644 index 0000000..ebb185a --- /dev/null +++ b/clang/lib/Parse/ParsePragma.h @@ -0,0 +1,127 @@ +//===---- ParserPragmas.h - Language specific pragmas -----------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines #pragma handlers for language specific pragmas. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_PARSE_PARSEPRAGMA_H +#define LLVM_CLANG_PARSE_PARSEPRAGMA_H + +#include "clang/Lex/Pragma.h" + +namespace clang { + class Sema; + class Parser; + +class PragmaAlignHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaAlignHandler(Sema &A) : PragmaHandler("align"), Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaGCCVisibilityHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaGCCVisibilityHandler(Sema &A) : PragmaHandler("visibility"), + Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaOptionsHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaOptionsHandler(Sema &A) : PragmaHandler("options"), + Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaPackHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaPackHandler(Sema &A) : PragmaHandler("pack"), + Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaMSStructHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaMSStructHandler(Sema &A) : PragmaHandler("ms_struct"), + Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaUnusedHandler : public PragmaHandler { + Sema &Actions; + Parser &parser; +public: + PragmaUnusedHandler(Sema &A, Parser& p) + : PragmaHandler("unused"), Actions(A), parser(p) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaWeakHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaWeakHandler(Sema &A) + : PragmaHandler("weak"), Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaRedefineExtnameHandler : public PragmaHandler { + Sema &Actions; +public: + explicit PragmaRedefineExtnameHandler(Sema &A) + : PragmaHandler("redefine_extname"), Actions(A) {} + + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + +class PragmaOpenCLExtensionHandler : public PragmaHandler { + Sema &Actions; + Parser &parser; +public: + PragmaOpenCLExtensionHandler(Sema &S, Parser& p) : + PragmaHandler("EXTENSION"), Actions(S), parser(p) {} + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + + +class PragmaFPContractHandler : public PragmaHandler { + Sema &Actions; + Parser &parser; +public: + PragmaFPContractHandler(Sema &S, Parser& p) : + PragmaHandler("FP_CONTRACT"), Actions(S), parser(p) {} + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + Token &FirstToken); +}; + + +} // end namespace clang + +#endif |