blob: 841a60be7ba181e14d8b3af066f5381b767b529f [file] [log] [blame]
Daniel Dunbar921b9682008-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 McCallfaf5fb42010-08-26 23:41:50 +000020 class Sema;
Ted Kremenekfd14fad2009-03-23 22:28:25 +000021 class Parser;
Daniel Dunbar921b9682008-10-04 19:21:03 +000022
Daniel Dunbarcb82acb2010-07-31 19:17:07 +000023class PragmaAlignHandler : public PragmaHandler {
Daniel Dunbarcb82acb2010-07-31 19:17:07 +000024public:
Eli Friedman68be1642012-10-04 02:36:51 +000025 explicit PragmaAlignHandler() : PragmaHandler("align") {}
Daniel Dunbarcb82acb2010-07-31 19:17:07 +000026
Douglas Gregorc7d65762010-09-09 22:45:38 +000027 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
28 Token &FirstToken);
Daniel Dunbarcb82acb2010-07-31 19:17:07 +000029};
30
Eli Friedman570024a2010-08-05 06:57:20 +000031class PragmaGCCVisibilityHandler : public PragmaHandler {
Eli Friedman570024a2010-08-05 06:57:20 +000032public:
Eli Friedman68be1642012-10-04 02:36:51 +000033 explicit PragmaGCCVisibilityHandler() : PragmaHandler("visibility") {}
Eli Friedman570024a2010-08-05 06:57:20 +000034
Douglas Gregorc7d65762010-09-09 22:45:38 +000035 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
36 Token &FirstToken);
Eli Friedman570024a2010-08-05 06:57:20 +000037};
38
Daniel Dunbar75c9be72010-05-26 23:29:06 +000039class PragmaOptionsHandler : public PragmaHandler {
Daniel Dunbar75c9be72010-05-26 23:29:06 +000040public:
Eli Friedman68be1642012-10-04 02:36:51 +000041 explicit PragmaOptionsHandler() : PragmaHandler("options") {}
Daniel Dunbar75c9be72010-05-26 23:29:06 +000042
Douglas Gregorc7d65762010-09-09 22:45:38 +000043 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
44 Token &FirstToken);
Daniel Dunbar75c9be72010-05-26 23:29:06 +000045};
46
Daniel Dunbar921b9682008-10-04 19:21:03 +000047class PragmaPackHandler : public PragmaHandler {
Daniel Dunbar921b9682008-10-04 19:21:03 +000048public:
Eli Friedman68be1642012-10-04 02:36:51 +000049 explicit PragmaPackHandler() : PragmaHandler("pack") {}
Mike Stump11289f42009-09-09 15:08:12 +000050
Douglas Gregorc7d65762010-09-09 22:45:38 +000051 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
52 Token &FirstToken);
Daniel Dunbar921b9682008-10-04 19:21:03 +000053};
Fariborz Jahanian743dda42011-04-25 18:49:15 +000054
55class PragmaMSStructHandler : public PragmaHandler {
Fariborz Jahanian743dda42011-04-25 18:49:15 +000056public:
Eli Friedman68be1642012-10-04 02:36:51 +000057 explicit PragmaMSStructHandler() : PragmaHandler("ms_struct") {}
Fariborz Jahanian743dda42011-04-25 18:49:15 +000058
59 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
60 Token &FirstToken);
61};
Mike Stump11289f42009-09-09 15:08:12 +000062
Ted Kremenekfd14fad2009-03-23 22:28:25 +000063class PragmaUnusedHandler : public PragmaHandler {
Ted Kremenekfd14fad2009-03-23 22:28:25 +000064public:
Eli Friedman68be1642012-10-04 02:36:51 +000065 PragmaUnusedHandler() : PragmaHandler("unused") {}
Mike Stump11289f42009-09-09 15:08:12 +000066
Douglas Gregorc7d65762010-09-09 22:45:38 +000067 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
68 Token &FirstToken);
Mike Stump11289f42009-09-09 15:08:12 +000069};
Daniel Dunbar921b9682008-10-04 19:21:03 +000070
Eli Friedmanf5867dd2009-06-05 00:49:58 +000071class PragmaWeakHandler : public PragmaHandler {
Eli Friedmanf5867dd2009-06-05 00:49:58 +000072public:
Eli Friedman68be1642012-10-04 02:36:51 +000073 explicit PragmaWeakHandler() : PragmaHandler("weak") {}
Mike Stump11289f42009-09-09 15:08:12 +000074
Douglas Gregorc7d65762010-09-09 22:45:38 +000075 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
76 Token &FirstToken);
Eli Friedmanf5867dd2009-06-05 00:49:58 +000077};
78
David Chisnall0867d9c2012-02-18 16:12:34 +000079class PragmaRedefineExtnameHandler : public PragmaHandler {
David Chisnall0867d9c2012-02-18 16:12:34 +000080public:
Eli Friedman68be1642012-10-04 02:36:51 +000081 explicit PragmaRedefineExtnameHandler() : PragmaHandler("redefine_extname") {}
David Chisnall0867d9c2012-02-18 16:12:34 +000082
83 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
84 Token &FirstToken);
85};
86
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +000087class PragmaOpenCLExtensionHandler : public PragmaHandler {
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +000088public:
Eli Friedman68be1642012-10-04 02:36:51 +000089 PragmaOpenCLExtensionHandler() : PragmaHandler("EXTENSION") {}
Peter Collingbourne7ce13fc2011-02-14 01:42:53 +000090 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
91 Token &FirstToken);
92};
93
94
Peter Collingbourne564c0fa2011-02-14 01:42:35 +000095class PragmaFPContractHandler : public PragmaHandler {
Peter Collingbourne564c0fa2011-02-14 01:42:35 +000096public:
Eli Friedman68be1642012-10-04 02:36:51 +000097 PragmaFPContractHandler() : PragmaHandler("FP_CONTRACT") {}
Peter Collingbourne564c0fa2011-02-14 01:42:35 +000098 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
99 Token &FirstToken);
100};
Alexey Bataeva769e072013-03-22 06:34:35 +0000101
102class PragmaNoOpenMPHandler : public PragmaHandler {
103public:
104 PragmaNoOpenMPHandler() : PragmaHandler("omp") { }
105 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
106 Token &FirstToken);
107};
108
109class PragmaOpenMPHandler : public PragmaHandler {
110public:
111 PragmaOpenMPHandler() : PragmaHandler("omp") { }
112 virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
113 Token &FirstToken);
114};
Peter Collingbourne564c0fa2011-02-14 01:42:35 +0000115
Daniel Dunbar921b9682008-10-04 19:21:03 +0000116} // end namespace clang
117
118#endif