zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 1 | #include "slang_rs_pragma_handler.h" |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 2 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 3 | #include "clang/Basic/TokenKinds.h" |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 4 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 5 | #include "clang/Lex/LiteralSupport.h" |
| 6 | #include "clang/Lex/Preprocessor.h" |
| 7 | #include "clang/Lex/Token.h" |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 8 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 9 | #include "slang_rs_context.h" |
| 10 | |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 11 | using namespace slang; |
| 12 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 13 | namespace { // Anonymous namespace |
| 14 | |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 15 | class RSExportVarPragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 16 | private: |
| 17 | void handleItem(const std::string &Item) { |
| 18 | mContext->addExportVar(Item); |
| 19 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 20 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 21 | public: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 22 | RSExportVarPragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 23 | : RSPragmaHandler(Name, Context) { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 24 | return; |
| 25 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 26 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 27 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 28 | this->handleItemListPragma(PP, FirstToken); |
| 29 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 30 | }; |
| 31 | |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 32 | class RSExportVarAllPragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 33 | public: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 34 | RSExportVarAllPragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 35 | : RSPragmaHandler(Name, Context) { return; } |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 36 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 37 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 38 | this->handleNonParamPragma(PP, FirstToken); |
| 39 | mContext->setExportAllNonStaticVars(true); |
| 40 | } |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 41 | }; |
| 42 | |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 43 | class RSExportFuncPragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 44 | private: |
| 45 | void handleItem(const std::string &Item) { |
| 46 | mContext->addExportFunc(Item); |
| 47 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 48 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 49 | public: |
| 50 | RSExportFuncPragmaHandler(llvm::StringRef Name, |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 51 | RSContext *Context) |
| 52 | : RSPragmaHandler(Name, Context) { return; } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 53 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 54 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 55 | this->handleItemListPragma(PP, FirstToken); |
| 56 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 57 | }; |
| 58 | |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 59 | class RSExportFuncAllPragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 60 | public: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 61 | RSExportFuncAllPragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 62 | : RSPragmaHandler(Name, Context) { return; } |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 63 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 64 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 65 | this->handleNonParamPragma(PP, FirstToken); |
| 66 | mContext->setExportAllNonStaticFuncs(true); |
| 67 | } |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 68 | }; |
| 69 | |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 70 | class RSExportTypePragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 71 | private: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 72 | void handleItem(const std::string &Item) { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 73 | mContext->addExportType(Item); |
| 74 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 75 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 76 | public: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 77 | RSExportTypePragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 78 | : RSPragmaHandler(Name, Context) { return; } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 79 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 80 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 81 | this->handleItemListPragma(PP, FirstToken); |
| 82 | } |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 83 | }; |
| 84 | |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 85 | class RSJavaPackageNamePragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 86 | public: |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 87 | RSJavaPackageNamePragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 88 | : RSPragmaHandler(Name, Context) { return; } |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 89 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 90 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 91 | // FIXME: Need to validate the extracted package name from paragma. |
| 92 | // Currently "all chars" specified in pragma will be treated as package |
| 93 | // name. |
| 94 | // |
| 95 | // 18.1 The Grammar of the Java Programming Language |
| 96 | // (http://java.sun.com/docs/books/jls/third_edition/html/syntax.html#18.1) |
| 97 | // |
| 98 | // CompilationUnit: |
| 99 | // [[Annotations] package QualifiedIdentifier ; ] {ImportDeclaration} |
| 100 | // {TypeDeclaration} |
| 101 | // |
| 102 | // QualifiedIdentifier: |
| 103 | // Identifier { . Identifier } |
| 104 | // |
| 105 | // Identifier: |
| 106 | // IDENTIFIER |
| 107 | // |
| 108 | // 3.8 Identifiers |
| 109 | // (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.8) |
| 110 | // |
| 111 | // |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 112 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 113 | clang::Token &PragmaToken = FirstToken; |
| 114 | std::string PackageName; |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 115 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 116 | // Skip first token, "java_package_name" |
| 117 | PP.LexUnexpandedToken(PragmaToken); |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 118 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 119 | // Now, the current token must be clang::tok::lpara |
| 120 | if (PragmaToken.isNot(clang::tok::l_paren)) |
| 121 | return; |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 122 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 123 | while (PragmaToken.isNot(clang::tok::eom)) { |
| 124 | // Lex package name |
| 125 | PP.LexUnexpandedToken(PragmaToken); |
| 126 | |
| 127 | bool Invalid; |
| 128 | std::string Spelling = PP.getSpelling(PragmaToken, &Invalid); |
| 129 | if (!Invalid) |
| 130 | PackageName.append(Spelling); |
| 131 | |
| 132 | // Pre-mature end (syntax error will be triggered by preprocessor later) |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 133 | if (PragmaToken.is(clang::tok::eom) || PragmaToken.is(clang::tok::eof)) { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 134 | break; |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 135 | } else { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 136 | // Next token is ')' (end of paragma) |
| 137 | const clang::Token &NextTok = PP.LookAhead(0); |
| 138 | if (NextTok.is(clang::tok::r_paren)) { |
| 139 | mContext->setReflectJavaPackageName(PackageName); |
| 140 | // Lex until meets clang::tok::eom |
| 141 | do { |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 142 | PP.LexUnexpandedToken(PragmaToken); |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 143 | } while (PragmaToken.isNot(clang::tok::eom)); |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 144 | break; |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 145 | } |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 146 | } |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 147 | } |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 148 | return; |
| 149 | } |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 150 | }; |
| 151 | |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 152 | class RSReflectLicensePragmaHandler : public RSPragmaHandler { |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 153 | private: |
| 154 | void handleItem(const std::string &Item) { |
| 155 | mContext->setLicenseNote(Item); |
| 156 | } |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 157 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 158 | public: |
| 159 | RSReflectLicensePragmaHandler(llvm::StringRef Name, RSContext *Context) |
| 160 | : RSPragmaHandler(Name, Context) { return; } |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 161 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 162 | void HandlePragma(clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 163 | this->handleOptionalStringLiateralParamPragma(PP, FirstToken); |
| 164 | } |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 165 | }; |
| 166 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 167 | } // Anonymous namespace |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 168 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 169 | RSPragmaHandler * |
| 170 | RSPragmaHandler::CreatePragmaExportVarHandler(RSContext *Context) { |
| 171 | return new RSExportVarPragmaHandler("export_var", Context); |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 172 | } |
| 173 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 174 | RSPragmaHandler * |
| 175 | RSPragmaHandler::CreatePragmaExportVarAllHandler(RSContext *Context) { |
| 176 | return new RSExportVarPragmaHandler("export_var_all", Context); |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 177 | } |
| 178 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 179 | RSPragmaHandler * |
| 180 | RSPragmaHandler::CreatePragmaExportFuncHandler(RSContext *Context) { |
| 181 | return new RSExportFuncPragmaHandler("export_func", Context); |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 182 | } |
| 183 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 184 | RSPragmaHandler * |
| 185 | RSPragmaHandler::CreatePragmaExportFuncAllHandler(RSContext *Context) { |
| 186 | return new RSExportFuncPragmaHandler("export_func_all", Context); |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 187 | } |
| 188 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 189 | RSPragmaHandler * |
| 190 | RSPragmaHandler::CreatePragmaExportTypeHandler(RSContext *Context) { |
| 191 | return new RSExportTypePragmaHandler("export_type", Context); |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 192 | } |
| 193 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 194 | RSPragmaHandler * |
| 195 | RSPragmaHandler::CreatePragmaJavaPackageNameHandler(RSContext *Context) { |
| 196 | return new RSJavaPackageNamePragmaHandler("java_package_name", Context); |
Shih-wei Liao | 537446c | 2010-06-11 16:05:55 -0700 | [diff] [blame] | 197 | } |
| 198 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 199 | RSPragmaHandler * |
| 200 | RSPragmaHandler::CreatePragmaReflectLicenseHandler(RSContext *Context) { |
| 201 | return new RSJavaPackageNamePragmaHandler("set_reflect_license", Context); |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 202 | } |
| 203 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 204 | void RSPragmaHandler::handleItemListPragma(clang::Preprocessor &PP, |
| 205 | clang::Token &FirstToken) { |
| 206 | clang::Token &PragmaToken = FirstToken; |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 207 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 208 | // Skip first token, like "export_var" |
| 209 | PP.LexUnexpandedToken(PragmaToken); |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 210 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 211 | // Now, the current token must be clang::tok::lpara |
| 212 | if (PragmaToken.isNot(clang::tok::l_paren)) |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 213 | return; |
Shih-wei Liao | 462aefd | 2010-06-04 15:32:04 -0700 | [diff] [blame] | 214 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 215 | while (PragmaToken.isNot(clang::tok::eom)) { |
| 216 | // Lex variable name |
| 217 | PP.LexUnexpandedToken(PragmaToken); |
| 218 | if (PragmaToken.is(clang::tok::identifier)) |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 219 | this->handleItem(PP.getSpelling(PragmaToken)); |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 220 | else |
| 221 | break; |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 222 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 223 | assert(PragmaToken.isNot(clang::tok::eom)); |
| 224 | |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 225 | PP.LexUnexpandedToken(PragmaToken); |
| 226 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 227 | if (PragmaToken.isNot(clang::tok::comma)) |
| 228 | break; |
| 229 | } |
| 230 | return; |
| 231 | } |
| 232 | |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 233 | void RSPragmaHandler::handleNonParamPragma(clang::Preprocessor &PP, |
| 234 | clang::Token &FirstToken) { |
| 235 | clang::Token &PragmaToken = FirstToken; |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 236 | |
| 237 | // Skip first token, like "export_var_all" |
| 238 | PP.LexUnexpandedToken(PragmaToken); |
| 239 | |
| 240 | // Should be end immediately |
| 241 | if (PragmaToken.isNot(clang::tok::eom)) |
| 242 | fprintf(stderr, "RSPragmaHandler::handleNonParamPragma: " |
| 243 | "expected a clang::tok::eom\n"); |
| 244 | return; |
| 245 | } |
| 246 | |
| 247 | void RSPragmaHandler::handleOptionalStringLiateralParamPragma( |
| 248 | clang::Preprocessor &PP, clang::Token &FirstToken) { |
| 249 | clang::Token &PragmaToken = FirstToken; |
| 250 | |
| 251 | // Skip first token, like "set_reflect_license" |
| 252 | PP.LexUnexpandedToken(PragmaToken); |
| 253 | |
| 254 | // Now, the current token must be clang::tok::lpara |
| 255 | if (PragmaToken.isNot(clang::tok::l_paren)) |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 256 | return; |
Victor Hsieh | c6718b3 | 2010-06-23 09:29:44 +0800 | [diff] [blame] | 257 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 258 | // If not ')', eat the following string literal as the license |
| 259 | PP.LexUnexpandedToken(PragmaToken); |
| 260 | if (PragmaToken.isNot(clang::tok::r_paren)) { |
| 261 | // Eat the whole string literal |
| 262 | clang::StringLiteralParser StringLiteral(&PragmaToken, 1, PP); |
| 263 | if (StringLiteral.hadError) |
| 264 | fprintf(stderr, "RSPragmaHandler::handleOptionalStringLiateralParamPragma" |
| 265 | ": illegal string literal\n"); |
| 266 | else |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 267 | this->handleItem(std::string(StringLiteral.GetString())); |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 268 | |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 269 | // The current token should be clang::tok::r_para |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 270 | PP.LexUnexpandedToken(PragmaToken); |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 271 | if (PragmaToken.isNot(clang::tok::r_paren)) |
| 272 | fprintf(stderr, "RSPragmaHandler::handleOptionalStringLiateralParamPragma" |
| 273 | ": expected a ')'\n"); |
| 274 | } else { |
| 275 | // If no argument, remove the license |
zonr | 6315f76 | 2010-10-05 15:35:14 +0800 | [diff] [blame] | 276 | this->handleItem(""); |
Shih-wei Liao | 9ef2f78 | 2010-10-01 12:31:37 -0700 | [diff] [blame] | 277 | } |
Victor Hsieh | d8a0d18 | 2010-07-07 19:22:33 +0800 | [diff] [blame] | 278 | } |