blob: fef6960813d8af056dc05d12574ec20a4665d826 [file] [log] [blame]
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +00001//===---- 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
19namespace clang {
John McCallf312b1e2010-08-26 23:41:50 +000020 class Sema;
Ted Kremenek4726d032009-03-23 22:28:25 +000021 class Parser;
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000022
Daniel Dunbarcbb98ed2010-07-31 19:17:07 +000023class PragmaAlignHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000024 Sema &Actions;
Daniel Dunbarcbb98ed2010-07-31 19:17:07 +000025public:
John McCallf312b1e2010-08-26 23:41:50 +000026 explicit PragmaAlignHandler(Sema &A) : PragmaHandler("align"), Actions(A) {}
Daniel Dunbarcbb98ed2010-07-31 19:17:07 +000027
Douglas Gregor80c60f72010-09-09 22:45:38 +000028 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
29 Token &FirstToken);
Daniel Dunbarcbb98ed2010-07-31 19:17:07 +000030};
31
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000032class PragmaGCCVisibilityHandler : public PragmaHandler {
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000033public:
Benjamin Kramerfacde172012-06-06 17:32:50 +000034 explicit PragmaGCCVisibilityHandler(Sema &/*A*/)
35 : PragmaHandler("visibility") {}
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000036
Douglas Gregor80c60f72010-09-09 22:45:38 +000037 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
38 Token &FirstToken);
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000039};
40
Daniel Dunbar861800c2010-05-26 23:29:06 +000041class PragmaOptionsHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000042 Sema &Actions;
Daniel Dunbar861800c2010-05-26 23:29:06 +000043public:
John McCallf312b1e2010-08-26 23:41:50 +000044 explicit PragmaOptionsHandler(Sema &A) : PragmaHandler("options"),
45 Actions(A) {}
Daniel Dunbar861800c2010-05-26 23:29:06 +000046
Douglas Gregor80c60f72010-09-09 22:45:38 +000047 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
48 Token &FirstToken);
Daniel Dunbar861800c2010-05-26 23:29:06 +000049};
50
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000051class PragmaPackHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000052 Sema &Actions;
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000053public:
John McCallf312b1e2010-08-26 23:41:50 +000054 explicit PragmaPackHandler(Sema &A) : PragmaHandler("pack"),
55 Actions(A) {}
Mike Stump1eb44332009-09-09 15:08:12 +000056
Douglas Gregor80c60f72010-09-09 22:45:38 +000057 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
58 Token &FirstToken);
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000059};
Fariborz Jahanian62c92582011-04-25 18:49:15 +000060
61class PragmaMSStructHandler : public PragmaHandler {
62 Sema &Actions;
63public:
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 Stump1eb44332009-09-09 15:08:12 +000070
Ted Kremenek4726d032009-03-23 22:28:25 +000071class PragmaUnusedHandler : public PragmaHandler {
Ted Kremenek4726d032009-03-23 22:28:25 +000072public:
Benjamin Kramerfacde172012-06-06 17:32:50 +000073 PragmaUnusedHandler(Sema &/*A*/)
74 : PragmaHandler("unused") {}
Mike Stump1eb44332009-09-09 15:08:12 +000075
Douglas Gregor80c60f72010-09-09 22:45:38 +000076 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
77 Token &FirstToken);
Mike Stump1eb44332009-09-09 15:08:12 +000078};
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000079
Eli Friedman99914792009-06-05 00:49:58 +000080class PragmaWeakHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000081 Sema &Actions;
Eli Friedman99914792009-06-05 00:49:58 +000082public:
John McCallf312b1e2010-08-26 23:41:50 +000083 explicit PragmaWeakHandler(Sema &A)
Argyrios Kyrtzidis9b36c3f2010-07-13 09:07:17 +000084 : PragmaHandler("weak"), Actions(A) {}
Mike Stump1eb44332009-09-09 15:08:12 +000085
Douglas Gregor80c60f72010-09-09 22:45:38 +000086 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
87 Token &FirstToken);
Eli Friedman99914792009-06-05 00:49:58 +000088};
89
David Chisnall5f3c1632012-02-18 16:12:34 +000090class PragmaRedefineExtnameHandler : public PragmaHandler {
91 Sema &Actions;
92public:
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 Collingbournef315fa82011-02-14 01:42:53 +0000100class PragmaOpenCLExtensionHandler : public PragmaHandler {
101 Sema &Actions;
Peter Collingbournef315fa82011-02-14 01:42:53 +0000102public:
Benjamin Kramerfacde172012-06-06 17:32:50 +0000103 PragmaOpenCLExtensionHandler(Sema &A) :
104 PragmaHandler("EXTENSION"), Actions(A) {}
Peter Collingbournef315fa82011-02-14 01:42:53 +0000105 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
106 Token &FirstToken);
107};
108
109
Peter Collingbourne321b8172011-02-14 01:42:35 +0000110class PragmaFPContractHandler : public PragmaHandler {
111 Sema &Actions;
Peter Collingbourne321b8172011-02-14 01:42:35 +0000112public:
Benjamin Kramerfacde172012-06-06 17:32:50 +0000113 PragmaFPContractHandler(Sema &A) :
114 PragmaHandler("FP_CONTRACT"), Actions(A) {}
Peter Collingbourne321b8172011-02-14 01:42:35 +0000115 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
116 Token &FirstToken);
117};
118
119
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +0000120} // end namespace clang
121
122#endif