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