blob: 7cca40b3672752b61892d619c946020946dc146f [file] [log] [blame]
zonr6315f762010-10-05 15:35:14 +08001#ifndef _SLANG_COMILER_RS_PRAGMA_HANDLER_H
2#define _SLANG_COMILER_RS_PRAGMA_HANDLER_H
Shih-wei Liao462aefd2010-06-04 15:32:04 -07003
4#include <string>
5
Shih-wei Liao9ef2f782010-10-01 12:31:37 -07006#include "clang/Lex/Pragma.h"
Shih-wei Liao462aefd2010-06-04 15:32:04 -07007
8namespace clang {
zonr6315f762010-10-05 15:35:14 +08009 class Token;
10 class IdentifierInfo;
11 class Preprocessor;
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070012}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070013
14namespace slang {
15
zonr6315f762010-10-05 15:35:14 +080016 class RSContext;
Shih-wei Liao462aefd2010-06-04 15:32:04 -070017
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070018class RSPragmaHandler : public clang::PragmaHandler {
19 protected:
20 RSContext *mContext;
Shih-wei Liao462aefd2010-06-04 15:32:04 -070021
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070022 RSPragmaHandler(llvm::StringRef Name, RSContext *Context)
23 : clang::PragmaHandler(Name),
24 mContext(Context) {
25 return;
26 }
27 RSContext *getContext() const {
28 return this->mContext;
29 }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070030
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070031 virtual void handleItem(const std::string &Item) { return; }
Shih-wei Liao462aefd2010-06-04 15:32:04 -070032
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070033 // Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i])
34 void handleItemListPragma(clang::Preprocessor &PP,
35 clang::Token &FirstToken);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070036
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070037 // Handle pragma like #pragma rs [name]
38 void handleNonParamPragma(clang::Preprocessor &PP,
39 clang::Token &FirstToken);
Victor Hsiehc6718b32010-06-23 09:29:44 +080040
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070041 // Handle pragma like #pragma rs [name] ("string literal")
zonr6315f762010-10-05 15:35:14 +080042 void handleOptionalStringLiateralParamPragma(clang::Preprocessor &PP,
43 clang::Token &FirstToken);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070044
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070045 public:
46 static RSPragmaHandler *CreatePragmaExportVarHandler(RSContext *Context);
47 static RSPragmaHandler *CreatePragmaExportVarAllHandler(RSContext *Context);
48 static RSPragmaHandler *CreatePragmaExportFuncHandler(RSContext *Context);
49 static RSPragmaHandler *CreatePragmaExportFuncAllHandler(RSContext *Context);
50 static RSPragmaHandler *CreatePragmaExportTypeHandler(RSContext *Context);
51 static RSPragmaHandler *CreatePragmaJavaPackageNameHandler(RSContext *Context);
52 static RSPragmaHandler *CreatePragmaReflectLicenseHandler(RSContext *Context);
53
54 virtual void HandlePragma(clang::Preprocessor &PP,
55 clang::Token &FirstToken) = 0;
Shih-wei Liao462aefd2010-06-04 15:32:04 -070056};
57
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070058} // namespace slang
Shih-wei Liao462aefd2010-06-04 15:32:04 -070059
zonr6315f762010-10-05 15:35:14 +080060#endif // _SLANG_COMILER_RS_PRAGMA_HANDLER_H