slang_rs_context.h revision d3f7527b105d21f1c69d3473eb88a762f2c3ab5a
1c383a500aa59423264811be3874461bf8adbfea0Zonr Chang/* 20a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines * Copyright 2010-2012, 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_CONTEXT_H_ // NOLINT 18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CONTEXT_H_ 19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 20e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include <cstdio> 21462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <list> 22e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include <map> 23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao#include <string> 24e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines 25e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include "clang/Lex/Preprocessor.h" 26be27482cdeaf08576bc39b72a15d35d13014a636Logan#include "clang/AST/Mangle.h" 27462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 28be27482cdeaf08576bc39b72a15d35d13014a636Logan#include "llvm/ADT/OwningPtr.h" 299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "llvm/ADT/StringSet.h" 309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "llvm/ADT/StringMap.h" 31462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 323fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines#include "slang_pragma_recorder.h" 333fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines 34462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace llvm { 356315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class LLVMContext; 3623c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines class DataLayout; 379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace llvm 38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 39462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang { 406315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class VarDecl; 416315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class ASTContext; 426315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class TargetInfo; 436315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class FunctionDecl; 446315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr class SourceManager; 459ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace clang 46462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 47462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang { 48a41ce1d98094da84643995d40d71c529905123fcZonr Chang class RSExportable; 49a41ce1d98094da84643995d40d71c529905123fcZonr Chang class RSExportVar; 50a41ce1d98094da84643995d40d71c529905123fcZonr Chang class RSExportFunc; 51593a894650e81be54173106ec266f0311cebebd3Stephen Hines class RSExportForEach; 52a41ce1d98094da84643995d40d71c529905123fcZonr Chang class RSExportType; 53462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 54462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaoclass RSContext { 559ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef llvm::StringSet<> NeedExportVarSet; 569ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef llvm::StringSet<> NeedExportFuncSet; 579ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef llvm::StringSet<> NeedExportTypeSet; 589ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 599ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 60a41ce1d98094da84643995d40d71c529905123fcZonr Chang typedef std::list<RSExportable*> ExportableList; 619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef std::list<RSExportVar*> ExportVarList; 629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef std::list<RSExportFunc*> ExportFuncList; 63593a894650e81be54173106ec266f0311cebebd3Stephen Hines typedef std::list<RSExportForEach*> ExportForEachList; 649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef llvm::StringMap<RSExportType*> ExportTypeMap; 659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao private: 679e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines clang::Preprocessor &mPP; 689e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines clang::ASTContext &mCtx; 699e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines const clang::TargetInfo &mTarget; 703fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines PragmaList *mPragmas; 714a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines unsigned int mTargetAPI; 724cc67fce91f43215d61b2695746eab102a3db516Stephen Hines std::vector<std::string> *mGeneratedFileNames; 739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 7423c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines llvm::DataLayout *mDataLayout; 759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao llvm::LLVMContext &mLLVMContext; 769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 77a41ce1d98094da84643995d40d71c529905123fcZonr Chang ExportableList mExportables; 78a41ce1d98094da84643995d40d71c529905123fcZonr Chang 799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao NeedExportTypeSet mNeedExportTypes; 809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::string *mLicenseNote; 829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::string mReflectJavaPackageName; 839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao std::string mReflectJavaPathName; 849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 850a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines std::string mRSPackageName; 860a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines 8796ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines int version; 8882754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines 8982754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines bool mIsCompatLib; 9082754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines 91be27482cdeaf08576bc39b72a15d35d13014a636Logan llvm::OwningPtr<clang::MangleContext> mMangleCtx; 9296ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines 939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool processExportVar(const clang::VarDecl *VD); 949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool processExportFunc(const clang::FunctionDecl *FD); 959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool processExportType(const llvm::StringRef &Name); 969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 97c17e198ffcd37bfc57e3add1f6eee952ae2a2eabStephen Hines void cleanupForEach(); 98c17e198ffcd37bfc57e3add1f6eee952ae2a2eabStephen Hines 999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ExportVarList mExportVars; 1009ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ExportFuncList mExportFuncs; 101593a894650e81be54173106ec266f0311cebebd3Stephen Hines ExportForEachList mExportForEach; 1029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ExportTypeMap mExportTypes; 1039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public: 1059e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines RSContext(clang::Preprocessor &PP, 1069e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines clang::ASTContext &Ctx, 1073fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines const clang::TargetInfo &Target, 1084cc67fce91f43215d61b2695746eab102a3db516Stephen Hines PragmaList *Pragmas, 1094a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines unsigned int TargetAPI, 1104cc67fce91f43215d61b2695746eab102a3db516Stephen Hines std::vector<std::string> *GeneratedFileNames); 1119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1129e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines inline clang::Preprocessor &getPreprocessor() const { return mPP; } 1139e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines inline clang::ASTContext &getASTContext() const { return mCtx; } 114be27482cdeaf08576bc39b72a15d35d13014a636Logan inline clang::MangleContext &getMangleContext() const { 115be27482cdeaf08576bc39b72a15d35d13014a636Logan return *mMangleCtx; 116f2174cfd6a556b51aadf2b8765e50df080e8f18eStephen Hines } 11723c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines inline const llvm::DataLayout *getDataLayout() const { return mDataLayout; } 1189ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline llvm::LLVMContext &getLLVMContext() const { return mLLVMContext; } 1199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const clang::SourceManager *getSourceManager() const { 1209e5b503349719144f63ccb7c62ee9c291a7d83b8Stephen Hines return &mPP.getSourceManager(); 1219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1229207a2e495c8363606861e4f034504ec5c153dabLogan Chien inline clang::DiagnosticsEngine *getDiagnostics() const { 1232ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines return &mPP.getDiagnostics(); 1242ef9bc0cfbca2152d972c0975005f8c897c2a42cStephen Hines } 1254a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines inline unsigned int getTargetAPI() const { 1264a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines return mTargetAPI; 1274a4bf92a8add68629a7e6e59ef81c3c3fe603a75Stephen Hines } 1289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline void setLicenseNote(const std::string &S) { 1309ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mLicenseNote = new std::string(S); 1319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline const std::string *getLicenseNote() const { return mLicenseNote; } 1339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1349ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline void addExportType(const std::string &S) { 1359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mNeedExportTypes.insert(S); 1369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 1379ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1389ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline void setReflectJavaPackageName(const std::string &S) { 1409ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao mReflectJavaPackageName = S; 1419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return; 1429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 143dde98533fad4c6534af537ae583aa4db35a1c699Tim Murray inline const std::string &getReflectJavaPackageName() const { 1444cc67fce91f43215d61b2695746eab102a3db516Stephen Hines return mReflectJavaPackageName; 1454cc67fce91f43215d61b2695746eab102a3db516Stephen Hines } 1469ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1470a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines inline void setRSPackageName(const std::string &S) { 1480a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines mRSPackageName = S; 1490a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines return; 1500a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines } 151dde98533fad4c6534af537ae583aa4db35a1c699Tim Murray inline const std::string &getRSPackageName() const { 1520a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines return mRSPackageName; 1530a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines } 1540a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines 155c808a99831115928b4648f4c8b86dc682594217aStephen Hines bool processExport(); 156a41ce1d98094da84643995d40d71c529905123fcZonr Chang inline void newExportable(RSExportable *E) { 157a41ce1d98094da84643995d40d71c529905123fcZonr Chang if (E != NULL) 158a41ce1d98094da84643995d40d71c529905123fcZonr Chang mExportables.push_back(E); 159a41ce1d98094da84643995d40d71c529905123fcZonr Chang } 160641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang typedef ExportableList::iterator exportable_iterator; 161641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang exportable_iterator exportable_begin() { 162641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang return mExportables.begin(); 163641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang } 164641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang exportable_iterator exportable_end() { 165641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang return mExportables.end(); 166641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang } 1679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef ExportVarList::const_iterator const_export_var_iterator; 1699ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_var_iterator export_vars_begin() const { 1709ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportVars.begin(); 1719ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1729ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_var_iterator export_vars_end() const { 1739ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportVars.end(); 1749ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1759ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline bool hasExportVar() const { 1769ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return !mExportVars.empty(); 1779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1789ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 1799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef ExportFuncList::const_iterator const_export_func_iterator; 1809ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_func_iterator export_funcs_begin() const { 1819ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportFuncs.begin(); 1829ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1839ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_func_iterator export_funcs_end() const { 1849ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportFuncs.end(); 1859ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 1869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline bool hasExportFunc() const { return !mExportFuncs.empty(); } 1879ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 188593a894650e81be54173106ec266f0311cebebd3Stephen Hines typedef ExportForEachList::const_iterator const_export_foreach_iterator; 189593a894650e81be54173106ec266f0311cebebd3Stephen Hines const_export_foreach_iterator export_foreach_begin() const { 190593a894650e81be54173106ec266f0311cebebd3Stephen Hines return mExportForEach.begin(); 191593a894650e81be54173106ec266f0311cebebd3Stephen Hines } 192593a894650e81be54173106ec266f0311cebebd3Stephen Hines const_export_foreach_iterator export_foreach_end() const { 193593a894650e81be54173106ec266f0311cebebd3Stephen Hines return mExportForEach.end(); 194593a894650e81be54173106ec266f0311cebebd3Stephen Hines } 195593a894650e81be54173106ec266f0311cebebd3Stephen Hines inline bool hasExportForEach() const { return !mExportForEach.empty(); } 196593a894650e81be54173106ec266f0311cebebd3Stephen Hines 1979ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef ExportTypeMap::iterator export_type_iterator; 1989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao typedef ExportTypeMap::const_iterator const_export_type_iterator; 1999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao export_type_iterator export_types_begin() { return mExportTypes.begin(); } 2009ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao export_type_iterator export_types_end() { return mExportTypes.end(); } 2019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_type_iterator export_types_begin() const { 2029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportTypes.begin(); 2039ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 2049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_type_iterator export_types_end() const { 2059ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportTypes.end(); 2069ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 2079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao inline bool hasExportType() const { return !mExportTypes.empty(); } 2089ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao export_type_iterator findExportType(const llvm::StringRef &TypeName) { 2099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportTypes.find(TypeName); 2109ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 2119ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const_export_type_iterator findExportType(const llvm::StringRef &TypeName) 2129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const { 2139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao return mExportTypes.find(TypeName); 2149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao } 2159ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 2169ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // Insert the specified Typename/Type pair into the map. If the key already 2179ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // exists in the map, return false and ignore the request, otherwise insert it 2189ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao // and return true. 2199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao bool insertExportType(const llvm::StringRef &TypeName, RSExportType *Type); 2209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 221b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao bool reflectToJava(const std::string &OutputPathBase, 2220a813a3ef2a82f19d7eab9e23ae8493197143803Stephen Hines const std::string &RSPackageName, 2239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao const std::string &InputFileName, 224925879fa622dda293806ed25b1ee63d2f4a8d65aStephen Hines const std::string &OutputBCFileName); 2259ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao 22696ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines int getVersion() const { return version; } 22796ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines void setVersion(int v) { 22896ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines version = v; 22996ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines return; 23096ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines } 23196ab06cbe40b2d73c0eb614f814cd761d8962b6bStephen Hines 23282754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines bool isCompatLib() const { return mIsCompatLib; } 23382754d87921c94e70562aa977cc92e28fc38b1d0Stephen Hines 2343fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines void addPragma(const std::string &T, const std::string &V) { 2353fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines mPragmas->push_back(make_pair(T, V)); 2363fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines } 2373fd0a94a5cf1656569b1aea07043cc63939dcb46Stephen Hines 238d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet // Report an error or a warning to the user. 239d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder Report(clang::DiagnosticsEngine::Level Level, 240d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet const char *Message); 241d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder Report(clang::DiagnosticsEngine::Level Level, 242d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet const clang::SourceLocation Loc, 243d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet const char *Message); 244d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet 245d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet // Utility functions to report errors and warnings to make the calling code 246d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet // easier to read. 247d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder ReportError(const char *Message) { 248d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet return Report(clang::DiagnosticsEngine::Error, Message); 249d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet } 250d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder ReportError(const clang::SourceLocation Loc, 251d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet const char *Message) { 252d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet return Report(clang::DiagnosticsEngine::Error, Loc, Message); 253d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet } 254d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder ReportWarning(const char *Message) { 255d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet return Report(clang::DiagnosticsEngine::Warning, Message); 256d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet } 257d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet clang::DiagnosticBuilder ReportWarning(const clang::SourceLocation Loc, 258d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet const char *Message) { 259d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet return Report(clang::DiagnosticsEngine::Warning, Loc, Message); 260d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet } 261d3f7527b105d21f1c69d3473eb88a762f2c3ab5aJean-Luc Brouillet 2629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao ~RSContext(); 263462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao}; 264462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 2659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao} // namespace slang 266462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao 267e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CONTEXT_H_ NOLINT 268