1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 2c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Copyright 2010, The Android Open Source Project 3c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 4c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * you may not use this file except in compliance with the License. 6c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * You may obtain a copy of the License at 7c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 8c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * http://www.apache.org/licenses/LICENSE-2.0 9c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * 10c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * Unless required by applicable law or agreed to in writing, software 11c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS, 12c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * See the License for the specific language governing permissions and 14c383a500aa59423264811be3874461bf8adbfea0Zonr Chang * limitations under the License. 15c383a500aa59423264811be3874461bf8adbfea0Zonr Chang */ 16c383a500aa59423264811be3874461bf8adbfea0Zonr Chang 17e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_ // NOLINT 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_ 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 20462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 229ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "clang/Lex/Pragma.h" 23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 24462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 256315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class Token; 266315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class IdentifierInfo; 276315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class Preprocessor; 289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} 29462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 30462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 326315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class RSContext; 33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaoclass RSPragmaHandler : public clang::PragmaHandler { 359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao protected: 369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSContext *mContext; 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSPragmaHandler(llvm::StringRef Name, RSContext *Context) 399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao : clang::PragmaHandler(Name), 409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mContext(Context) { 419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao RSContext *getContext() const { 439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return this->mContext; 449ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 46796e7b1400d3f3f7c07496d88bb48129ea925bb9Jean-Luc Brouillet virtual void handleItem(const std::string &Item) { } 477aff4a0a124209fdf93ecbcd7aed701d39ba094bStephen Hines virtual void handleInt(clang::Preprocessor &PP, clang::Token &Tok, 48796e7b1400d3f3f7c07496d88bb48129ea925bb9Jean-Luc Brouillet const int v) { } 499ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 509ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i]) 519ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao void handleItemListPragma(clang::Preprocessor &PP, 529ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao clang::Token &FirstToken); 539ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 549ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Handle pragma like #pragma rs [name] 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao void handleNonParamPragma(clang::Preprocessor &PP, 569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao clang::Token &FirstToken); 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Handle pragma like #pragma rs [name] ("string literal") 599d2c0fa6490e09b3ff5603796bce42d97788e5c8Stephen Hines void handleOptionalStringLiteralParamPragma(clang::Preprocessor &PP, 6096ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines clang::Token &FirstToken); 6196ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines 6296ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines // Handle pragma like #pragma version (integer) 6396ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines void handleIntegerParamPragma(clang::Preprocessor &PP, 6496ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines clang::Token &FirstToken); 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao virtual void HandlePragma(clang::Preprocessor &PP, 68df5bcce1582d839eead432a5e24435236c90fb05Shih-wei Liao clang::PragmaIntroducerKind Introducer, 699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao clang::Token &FirstToken) = 0; 70462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}; 71462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 725210d103b523e1f7f8009f178a7face27fbff51eJean-Luc Brouillet// Add handlers for the RS pragmas to the preprocessor. These handlers 735210d103b523e1f7f8009f178a7face27fbff51eJean-Luc Brouillet// validate the pragmas and, if valid, set fields of the RSContext. 745210d103b523e1f7f8009f178a7face27fbff51eJean-Luc Brouilletvoid AddPragmaHandlers(clang::Preprocessor &PP, RSContext *RsContext); 755210d103b523e1f7f8009f178a7face27fbff51eJean-Luc Brouillet 769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace slang 77462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 78e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_ NOLINT 79