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