blob: 1d66277d33e5ae2b0e93bc5e960c1f2aeab315e6 [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 {
20 class Action;
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 {
24 Action &Actions;
25public:
26 explicit PragmaAlignHandler(Action &A) : PragmaHandler("align"), Actions(A) {}
27
28 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
29};
30
Daniel Dunbar75c9be72010-05-26 23:29:06 +000031class PragmaOptionsHandler : public PragmaHandler {
32 Action &Actions;
33public:
Argyrios Kyrtzidis36745fd2010-07-13 09:07:17 +000034 explicit PragmaOptionsHandler(Action &A) : PragmaHandler("options"),
35 Actions(A) {}
Daniel Dunbar75c9be72010-05-26 23:29:06 +000036
37 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
38};
39
Daniel Dunbar921b9682008-10-04 19:21:03 +000040class PragmaPackHandler : public PragmaHandler {
41 Action &Actions;
42public:
Argyrios Kyrtzidis36745fd2010-07-13 09:07:17 +000043 explicit PragmaPackHandler(Action &A) : PragmaHandler("pack"),
44 Actions(A) {}
Mike Stump11289f42009-09-09 15:08:12 +000045
46 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
Daniel Dunbar921b9682008-10-04 19:21:03 +000047};
Mike Stump11289f42009-09-09 15:08:12 +000048
Ted Kremenekfd14fad2009-03-23 22:28:25 +000049class PragmaUnusedHandler : public PragmaHandler {
50 Action &Actions;
51 Parser &parser;
52public:
Argyrios Kyrtzidis36745fd2010-07-13 09:07:17 +000053 PragmaUnusedHandler(Action &A, Parser& p)
54 : PragmaHandler("unused"), Actions(A), parser(p) {}
Mike Stump11289f42009-09-09 15:08:12 +000055
56 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
57};
Daniel Dunbar921b9682008-10-04 19:21:03 +000058
Eli Friedmanf5867dd2009-06-05 00:49:58 +000059class PragmaWeakHandler : public PragmaHandler {
60 Action &Actions;
61public:
Argyrios Kyrtzidis36745fd2010-07-13 09:07:17 +000062 explicit PragmaWeakHandler(Action &A)
63 : PragmaHandler("weak"), Actions(A) {}
Mike Stump11289f42009-09-09 15:08:12 +000064
65 virtual void HandlePragma(Preprocessor &PP, Token &FirstToken);
Eli Friedmanf5867dd2009-06-05 00:49:58 +000066};
67
Daniel Dunbar921b9682008-10-04 19:21:03 +000068} // end namespace clang
69
70#endif