blob: 0188a75d88464f32ef4abb9f256ec14b31e984f7 [file] [log] [blame]
Shih-wei Liao462aefd2010-06-04 15:32:04 -07001#ifndef _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP
2# define _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP
3
4#include <string>
5
6#include "clang/Lex/Pragma.h" /* for class PragmaHandler */
7
8namespace clang {
9
10class Token;
11class IdentifierInfo;
12class Preprocessor;
13
14} /* namespace clang */
15
16namespace slang {
17
18using namespace clang;
19
20class RSContext;
21
22class RSPragmaHandler : public PragmaHandler {
23protected:
24 RSContext* mContext;
25
26 RSPragmaHandler(const IdentifierInfo* name, RSContext* Context) : PragmaHandler(name), mContext(Context) { return; }
27
28 RSContext* getContext() const { return this->mContext; }
29
30 virtual void handleItem(const std::string& Item) { return; }
31
32 /* Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i]) */
33 void handleItemListPragma(Preprocessor& PP, Token& FirstToken);
34
Victor Hsiehc6718b32010-06-23 09:29:44 +080035 /* Handle pragma like #pragma rs [name] */
36 void handleNonParamPragma(Preprocessor& PP, Token& FirstToken);
37
Victor Hsiehd8a0d182010-07-07 19:22:33 +080038 /* Handle pragma like #pragma rs [name] ("string literal") */
39 void handleOptionalStringLiateralParamPragma(Preprocessor& PP, Token& FirstToken);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070040public:
41 static RSPragmaHandler* CreatePragmaExportVarHandler(RSContext* Context);
Victor Hsiehc6718b32010-06-23 09:29:44 +080042 static RSPragmaHandler* CreatePragmaExportVarAllHandler(RSContext* Context);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070043 static RSPragmaHandler* CreatePragmaExportFuncHandler(RSContext* Context);
Victor Hsiehc6718b32010-06-23 09:29:44 +080044 static RSPragmaHandler* CreatePragmaExportFuncAllHandler(RSContext* Context);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070045 static RSPragmaHandler* CreatePragmaExportTypeHandler(RSContext* Context);
Shih-wei Liao537446c2010-06-11 16:05:55 -070046 static RSPragmaHandler* CreatePragmaJavaPackageNameHandler(RSContext* Context);
Victor Hsiehd8a0d182010-07-07 19:22:33 +080047 static RSPragmaHandler* CreatePragmaReflectLicenseHandler(RSContext* Context);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070048
49 virtual void HandlePragma(Preprocessor& PP, Token& FirstToken) = 0;
50};
51
52} /* namespace slang */
53
54#endif /* _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP */