blob: 0feaa9919e8d41f97a8297b4bfaf1d7ee6d98da8 [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
28 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
29};
30
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000031class PragmaGCCVisibilityHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000032 Sema &Actions;
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000033public:
John McCallf312b1e2010-08-26 23:41:50 +000034 explicit PragmaGCCVisibilityHandler(Sema &A) : PragmaHandler("visibility"),
35 Actions(A) {}
Eli Friedmanaa8b0d12010-08-05 06:57:20 +000036
37 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
38};
39
Daniel Dunbar861800c2010-05-26 23:29:06 +000040class PragmaOptionsHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000041 Sema &Actions;
Daniel Dunbar861800c2010-05-26 23:29:06 +000042public:
John McCallf312b1e2010-08-26 23:41:50 +000043 explicit PragmaOptionsHandler(Sema &A) : PragmaHandler("options"),
44 Actions(A) {}
Daniel Dunbar861800c2010-05-26 23:29:06 +000045
46 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
47};
48
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000049class PragmaPackHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000050 Sema &Actions;
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000051public:
John McCallf312b1e2010-08-26 23:41:50 +000052 explicit PragmaPackHandler(Sema &A) : PragmaHandler("pack"),
53 Actions(A) {}
Mike Stump1eb44332009-09-09 15:08:12 +000054
55 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000056};
Mike Stump1eb44332009-09-09 15:08:12 +000057
Ted Kremenek4726d032009-03-23 22:28:25 +000058class PragmaUnusedHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000059 Sema &Actions;
Ted Kremenek4726d032009-03-23 22:28:25 +000060 Parser &parser;
61public:
John McCallf312b1e2010-08-26 23:41:50 +000062 PragmaUnusedHandler(Sema &A, Parser& p)
Argyrios Kyrtzidis9b36c3f2010-07-13 09:07:17 +000063 : PragmaHandler("unused"), Actions(A), parser(p) {}
Mike Stump1eb44332009-09-09 15:08:12 +000064
65 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
66};
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000067
Eli Friedman99914792009-06-05 00:49:58 +000068class PragmaWeakHandler : public PragmaHandler {
John McCallf312b1e2010-08-26 23:41:50 +000069 Sema &Actions;
Eli Friedman99914792009-06-05 00:49:58 +000070public:
John McCallf312b1e2010-08-26 23:41:50 +000071 explicit PragmaWeakHandler(Sema &A)
Argyrios Kyrtzidis9b36c3f2010-07-13 09:07:17 +000072 : PragmaHandler("weak"), Actions(A) {}
Mike Stump1eb44332009-09-09 15:08:12 +000073
74 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
Eli Friedman99914792009-06-05 00:49:58 +000075};
76
Daniel Dunbarfcdd8fe2008-10-04 19:21:03 +000077} // end namespace clang
78
79#endif