blob: 26ac8cbedb28345be2176ab7bae0a5fdad8c5bbf [file] [log] [blame]
zonr6315f762010-10-05 15:35:14 +08001#ifndef _SLANG_COMPILER_PRAGMA_HANDLER_H
2#define _SLANG_COMPILER_PRAGMA_HANDLER_H
Shih-wei Liao9ef2f782010-10-01 12:31:37 -07003
Shih-wei Liao462aefd2010-06-04 15:32:04 -07004#include <list>
5#include <string>
6
zonr6315f762010-10-05 15:35:14 +08007#include "clang/Lex/Pragma.h"
Shih-wei Liao462aefd2010-06-04 15:32:04 -07008
9namespace clang {
zonr6315f762010-10-05 15:35:14 +080010 class Token;
11 class Preprocessor;
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070012}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070013
14namespace slang {
15
Shih-wei Liao462aefd2010-06-04 15:32:04 -070016typedef std::list< std::pair<std::string, std::string> > PragmaList;
17
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070018class PragmaRecorder : public clang::PragmaHandler {
19 private:
20 PragmaList &mPragmas;
Shih-wei Liao462aefd2010-06-04 15:32:04 -070021
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070022 static bool GetPragmaNameFromToken(const clang::Token &Token,
23 std::string &PragmaName);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070024
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070025 static bool GetPragmaValueFromToken(const clang::Token &Token,
26 std::string &PragmaValue);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070027
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070028 public:
zonr6315f762010-10-05 15:35:14 +080029 explicit PragmaRecorder(PragmaList &Pragmas);
Shih-wei Liao462aefd2010-06-04 15:32:04 -070030
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070031 virtual void HandlePragma(clang::Preprocessor &PP,
32 clang::Token &FirstToken);
33};
Shih-wei Liao9ef2f782010-10-01 12:31:37 -070034}
Shih-wei Liao462aefd2010-06-04 15:32:04 -070035
zonr6315f762010-10-05 15:35:14 +080036#endif // _SLANG_COMPILER_PRAGMA_HANDLER_H