slang_rs_pragma_handler.h revision 6315f76e3cc6ff2d012d1183a0b030d4ff0dc808
1#ifndef _SLANG_COMILER_RS_PRAGMA_HANDLER_H
2#define _SLANG_COMILER_RS_PRAGMA_HANDLER_H
3
4#include <string>
5
6#include "clang/Lex/Pragma.h"
7
8namespace clang {
9  class Token;
10  class IdentifierInfo;
11  class Preprocessor;
12}
13
14namespace slang {
15
16  class RSContext;
17
18class RSPragmaHandler : public clang::PragmaHandler {
19 protected:
20  RSContext *mContext;
21
22  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  }
30
31  virtual void handleItem(const std::string &Item) { return; }
32
33  // Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i])
34  void handleItemListPragma(clang::Preprocessor &PP,
35                            clang::Token &FirstToken);
36
37  // Handle pragma like #pragma rs [name]
38  void handleNonParamPragma(clang::Preprocessor &PP,
39                            clang::Token &FirstToken);
40
41  // Handle pragma like #pragma rs [name] ("string literal")
42  void handleOptionalStringLiateralParamPragma(clang::Preprocessor &PP,
43                                               clang::Token &FirstToken);
44
45 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;
56};
57
58}   // namespace slang
59
60#endif  // _SLANG_COMILER_RS_PRAGMA_HANDLER_H
61