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