slang_rs_pragma_handler.h revision 462aefd62cc646d2ff753c1d003ef3cd7bbea26
1462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#ifndef _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP 2462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao# define _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP 3462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 4462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 5462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 6462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include "clang/Lex/Pragma.h" /* for class PragmaHandler */ 7462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 8462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 9462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 10462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass Token; 11462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass IdentifierInfo; 12462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass Preprocessor; 13462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 14462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao} /* namespace clang */ 15462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 16462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 17462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 18462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaousing namespace clang; 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSContext; 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 22462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSPragmaHandler : public PragmaHandler { 23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoprotected: 24462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSContext* mContext; 25462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 26462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSPragmaHandler(const IdentifierInfo* name, RSContext* Context) : PragmaHandler(name), mContext(Context) { return; } 27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 28462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao RSContext* getContext() const { return this->mContext; } 29462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 30462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao virtual void handleItem(const std::string& Item) { return; } 31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 32462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao /* Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i]) */ 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao void handleItemListPragma(Preprocessor& PP, Token& FirstToken); 34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 35462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaopublic: 36462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao static RSPragmaHandler* CreatePragmaExportVarHandler(RSContext* Context); 37462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao static RSPragmaHandler* CreatePragmaExportFuncHandler(RSContext* Context); 38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao static RSPragmaHandler* CreatePragmaExportTypeHandler(RSContext* Context); 39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 40462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao virtual void HandlePragma(Preprocessor& PP, Token& FirstToken) = 0; 41462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}; 42462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 43462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao} /* namespace slang */ 44462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 45462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#endif /* _SLANG_COMILER_RS_PRAGMA_HANDLER_HPP */ 46