| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 1 | //===---- ParserPragmas.h - Language specific pragmas -----------*- C++ -*-===// | 
 | 2 | // | 
 | 3 | //                     The LLVM Compiler Infrastructure | 
 | 4 | // | 
 | 5 | // This file is distributed under the University of Illinois Open Source | 
 | 6 | // License. See LICENSE.TXT for details. | 
 | 7 | // | 
 | 8 | //===----------------------------------------------------------------------===// | 
 | 9 | // | 
 | 10 | // This file defines #pragma handlers for language specific pragmas. | 
 | 11 | // | 
 | 12 | //===----------------------------------------------------------------------===// | 
 | 13 |  | 
 | 14 | #ifndef LLVM_CLANG_PARSE_PARSEPRAGMA_H | 
 | 15 | #define LLVM_CLANG_PARSE_PARSEPRAGMA_H | 
 | 16 |  | 
 | 17 | #include "clang/Lex/Pragma.h" | 
 | 18 |  | 
 | 19 | namespace clang { | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 20 |   class Sema; | 
| Ted Kremenek | 4726d03 | 2009-03-23 22:28:25 +0000 | [diff] [blame] | 21 |   class Parser; | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 22 |  | 
| Daniel Dunbar | cbb98ed | 2010-07-31 19:17:07 +0000 | [diff] [blame] | 23 | class PragmaAlignHandler : public PragmaHandler { | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 24 |   Sema &Actions; | 
| Daniel Dunbar | cbb98ed | 2010-07-31 19:17:07 +0000 | [diff] [blame] | 25 | public: | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 26 |   explicit PragmaAlignHandler(Sema &A) : PragmaHandler("align"), Actions(A) {} | 
| Daniel Dunbar | cbb98ed | 2010-07-31 19:17:07 +0000 | [diff] [blame] | 27 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 28 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 29 |                             Token &FirstToken); | 
| Daniel Dunbar | cbb98ed | 2010-07-31 19:17:07 +0000 | [diff] [blame] | 30 | }; | 
 | 31 |  | 
| Eli Friedman | aa8b0d1 | 2010-08-05 06:57:20 +0000 | [diff] [blame] | 32 | class PragmaGCCVisibilityHandler : public PragmaHandler { | 
| Eli Friedman | aa8b0d1 | 2010-08-05 06:57:20 +0000 | [diff] [blame] | 33 | public: | 
| Benjamin Kramer | facde17 | 2012-06-06 17:32:50 +0000 | [diff] [blame] | 34 |   explicit PragmaGCCVisibilityHandler(Sema &/*A*/) | 
 | 35 |     : PragmaHandler("visibility") {} | 
| Eli Friedman | aa8b0d1 | 2010-08-05 06:57:20 +0000 | [diff] [blame] | 36 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 37 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 38 |                             Token &FirstToken); | 
| Eli Friedman | aa8b0d1 | 2010-08-05 06:57:20 +0000 | [diff] [blame] | 39 | }; | 
 | 40 |  | 
| Daniel Dunbar | 861800c | 2010-05-26 23:29:06 +0000 | [diff] [blame] | 41 | class PragmaOptionsHandler : public PragmaHandler { | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 42 |   Sema &Actions; | 
| Daniel Dunbar | 861800c | 2010-05-26 23:29:06 +0000 | [diff] [blame] | 43 | public: | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 44 |   explicit PragmaOptionsHandler(Sema &A) : PragmaHandler("options"), | 
 | 45 |                                            Actions(A) {} | 
| Daniel Dunbar | 861800c | 2010-05-26 23:29:06 +0000 | [diff] [blame] | 46 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 47 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 48 |                             Token &FirstToken); | 
| Daniel Dunbar | 861800c | 2010-05-26 23:29:06 +0000 | [diff] [blame] | 49 | }; | 
 | 50 |  | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 51 | class PragmaPackHandler : public PragmaHandler { | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 52 |   Sema &Actions; | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 53 | public: | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 54 |   explicit PragmaPackHandler(Sema &A) : PragmaHandler("pack"), | 
 | 55 |                                         Actions(A) {} | 
| Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 56 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 57 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 58 |                             Token &FirstToken); | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 59 | }; | 
| Fariborz Jahanian | 62c9258 | 2011-04-25 18:49:15 +0000 | [diff] [blame] | 60 |    | 
 | 61 | class PragmaMSStructHandler : public PragmaHandler { | 
 | 62 |   Sema &Actions; | 
 | 63 | public: | 
 | 64 |   explicit PragmaMSStructHandler(Sema &A) : PragmaHandler("ms_struct"), | 
 | 65 |   Actions(A) {} | 
 | 66 |      | 
 | 67 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 68 |                             Token &FirstToken); | 
 | 69 | }; | 
| Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 70 |  | 
| Ted Kremenek | 4726d03 | 2009-03-23 22:28:25 +0000 | [diff] [blame] | 71 | class PragmaUnusedHandler : public PragmaHandler { | 
| Ted Kremenek | 4726d03 | 2009-03-23 22:28:25 +0000 | [diff] [blame] | 72 | public: | 
| Benjamin Kramer | facde17 | 2012-06-06 17:32:50 +0000 | [diff] [blame] | 73 |   PragmaUnusedHandler(Sema &/*A*/) | 
 | 74 |     : PragmaHandler("unused") {} | 
| Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 75 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 76 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 77 |                             Token &FirstToken); | 
| Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 78 | }; | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 79 |  | 
| Eli Friedman | 9991479 | 2009-06-05 00:49:58 +0000 | [diff] [blame] | 80 | class PragmaWeakHandler : public PragmaHandler { | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 81 |   Sema &Actions; | 
| Eli Friedman | 9991479 | 2009-06-05 00:49:58 +0000 | [diff] [blame] | 82 | public: | 
| John McCall | f312b1e | 2010-08-26 23:41:50 +0000 | [diff] [blame] | 83 |   explicit PragmaWeakHandler(Sema &A) | 
| Argyrios Kyrtzidis | 9b36c3f | 2010-07-13 09:07:17 +0000 | [diff] [blame] | 84 |     : PragmaHandler("weak"), Actions(A) {} | 
| Mike Stump | 1eb4433 | 2009-09-09 15:08:12 +0000 | [diff] [blame] | 85 |  | 
| Douglas Gregor | 80c60f7 | 2010-09-09 22:45:38 +0000 | [diff] [blame] | 86 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 87 |                             Token &FirstToken); | 
| Eli Friedman | 9991479 | 2009-06-05 00:49:58 +0000 | [diff] [blame] | 88 | }; | 
 | 89 |  | 
| David Chisnall | 5f3c163 | 2012-02-18 16:12:34 +0000 | [diff] [blame] | 90 | class PragmaRedefineExtnameHandler : public PragmaHandler { | 
 | 91 |   Sema &Actions; | 
 | 92 | public: | 
 | 93 |   explicit PragmaRedefineExtnameHandler(Sema &A) | 
 | 94 |     : PragmaHandler("redefine_extname"), Actions(A) {} | 
 | 95 |  | 
 | 96 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 97 |                             Token &FirstToken); | 
 | 98 | }; | 
 | 99 |  | 
| Peter Collingbourne | f315fa8 | 2011-02-14 01:42:53 +0000 | [diff] [blame] | 100 | class PragmaOpenCLExtensionHandler : public PragmaHandler { | 
 | 101 |   Sema &Actions; | 
| Peter Collingbourne | f315fa8 | 2011-02-14 01:42:53 +0000 | [diff] [blame] | 102 | public: | 
| Benjamin Kramer | facde17 | 2012-06-06 17:32:50 +0000 | [diff] [blame] | 103 |   PragmaOpenCLExtensionHandler(Sema &A) : | 
 | 104 |     PragmaHandler("EXTENSION"), Actions(A) {} | 
| Peter Collingbourne | f315fa8 | 2011-02-14 01:42:53 +0000 | [diff] [blame] | 105 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 106 |                             Token &FirstToken); | 
 | 107 | }; | 
 | 108 |    | 
 | 109 |  | 
| Peter Collingbourne | 321b817 | 2011-02-14 01:42:35 +0000 | [diff] [blame] | 110 | class PragmaFPContractHandler : public PragmaHandler { | 
 | 111 |   Sema &Actions; | 
| Peter Collingbourne | 321b817 | 2011-02-14 01:42:35 +0000 | [diff] [blame] | 112 | public: | 
| Benjamin Kramer | facde17 | 2012-06-06 17:32:50 +0000 | [diff] [blame] | 113 |   PragmaFPContractHandler(Sema &A) : | 
 | 114 |     PragmaHandler("FP_CONTRACT"), Actions(A) {} | 
| Peter Collingbourne | 321b817 | 2011-02-14 01:42:35 +0000 | [diff] [blame] | 115 |   virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, | 
 | 116 |                             Token &FirstToken); | 
 | 117 | }; | 
 | 118 |    | 
 | 119 |  | 
| Daniel Dunbar | fcdd8fe | 2008-10-04 19:21:03 +0000 | [diff] [blame] | 120 | }  // end namespace clang | 
 | 121 |  | 
 | 122 | #endif |