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_H_  // NOLINT
18e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#define _FRAMEWORKS_COMPILE_SLANG_SLANG_H_
19462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
206315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include <cstdio>
216315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include <string>
22e2e522f0d23c074ecd1025f1f2ed161ed485d9c8Ying Wang#include <vector>
23462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
2423c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines// Terrible workaround for TargetOptions.h not using llvm::RefCountedBase!
2523c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines#include "llvm/ADT/IntrusiveRefCntPtr.h"
2623c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hinesusing llvm::RefCountedBase;
2723c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines
28e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include "clang/Basic/TargetOptions.h"
299207a2e495c8363606861e4f034504ec5c153dabLogan Chien#include "clang/Lex/ModuleLoader.h"
30e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines
319ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "llvm/ADT/OwningPtr.h"
329ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao#include "llvm/ADT/StringRef.h"
33462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
34c460b37ffb50819a32c2a8967754b6f784b28263mkopec#include "llvm/Target/TargetMachine.h"
35c460b37ffb50819a32c2a8967754b6f784b28263mkopec
366315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr#include "slang_diagnostic_buffer.h"
37e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#include "slang_pragma_recorder.h"
38462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
399ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liaonamespace llvm {
40e8c263a1c5df81594cf302ecadd813909c894487Zonr Chang  class tool_output_file;
419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao}
42462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
43462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace clang {
449207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class ASTConsumer;
459207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class ASTContext;
469207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class Backend;
479207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class CodeGenOptions;
483a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  class Diagnostic;
499207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class DiagnosticsEngine;
503a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  class FileManager;
51df5bcce1582d839eead432a5e24435236c90fb05Shih-wei Liao  class FileSystemOptions;
526315f76e3cc6ff2d012d1183a0b030d4ff0dc808zonr  class LangOptions;
533a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  class Preprocessor;
549207a2e495c8363606861e4f034504ec5c153dabLogan Chien  class SourceManager;
553a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  class TargetInfo;
56e67239de8d94975e7e2216ee6860ae2e6cb8b15aStephen Hines}  // namespace clang
57462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
58462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liaonamespace slang {
59462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
609207a2e495c8363606861e4f034504ec5c153dabLogan Chienclass Slang : public clang::ModuleLoader {
619ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  static clang::LangOptions LangOpts;
629ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  static clang::CodeGenOptions CodeGenOpts;
639ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
649ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  static bool GlobalInitialized;
659ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  static void LLVMErrorHandler(void *UserData, const std::string &Message);
679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
683a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang public:
699207a2e495c8363606861e4f034504ec5c153dabLogan Chien  enum OutputType {
70cc0efad052e944f64bb71cfdaa8a825e30192e78Stephen Hines    OT_Dependency,
713a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_Assembly,
723a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_LLVMAssembly,
733a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_Bitcode,
743a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_Nothing,
753a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_Object,
763a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
773a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    OT_Default = OT_Bitcode
789207a2e495c8363606861e4f034504ec5c153dabLogan Chien  };
799ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
803a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang private:
81641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang  bool mInitialized;
82641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang
839207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // Diagnostics Mediator (An interface for both Producer and Consumer)
849207a2e495c8363606861e4f034504ec5c153dabLogan Chien  llvm::OwningPtr<clang::Diagnostic> mDiag;
859207a2e495c8363606861e4f034504ec5c153dabLogan Chien
869207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // Diagnostics Engine (Producer and Diagnostics Reporter)
878f4d972ef6c6796ffdde603e456979a7004d1e20Stephen Hines  clang::DiagnosticsEngine *mDiagEngine;
889207a2e495c8363606861e4f034504ec5c153dabLogan Chien
899207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // Diagnostics Consumer
909207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // NOTE: The ownership is taken by mDiagEngine after creation.
913a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  DiagnosticBuffer *mDiagClient;
929207a2e495c8363606861e4f034504ec5c153dabLogan Chien
939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  // The target being compiled for
9423c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines  llvm::IntrusiveRefCntPtr<clang::TargetOptions> mTargetOpts;
959ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  llvm::OwningPtr<clang::TargetInfo> mTarget;
969207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void createTarget(std::string const &Triple, std::string const &CPU,
979207a2e495c8363606861e4f034504ec5c153dabLogan Chien                    std::vector<std::string> const &Features);
989ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
999ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1009207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // File manager (for prepocessor doing the job such as header file search)
1019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  llvm::OwningPtr<clang::FileManager> mFileMgr;
102df5bcce1582d839eead432a5e24435236c90fb05Shih-wei Liao  llvm::OwningPtr<clang::FileSystemOptions> mFileSysOpt;
1033a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  void createFileManager();
1049ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1059207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1069207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // Source manager (responsible for the source code handling)
1079ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  llvm::OwningPtr<clang::SourceManager> mSourceMgr;
1083a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  void createSourceManager();
1099ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1109207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1119207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // Preprocessor (source code preprocessor)
1129ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  llvm::OwningPtr<clang::Preprocessor> mPP;
1139ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  void createPreprocessor();
1149ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1159207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1169207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // AST context (the context to hold long-lived AST nodes)
1179ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  llvm::OwningPtr<clang::ASTContext> mASTContext;
1183a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  void createASTContext();
1199ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1209207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1219207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // AST consumer, responsible for code generation
1223a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  llvm::OwningPtr<clang::ASTConsumer> mBackend;
1239ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1249207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1259207a2e495c8363606861e4f034504ec5c153dabLogan Chien  // File names
1269ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  std::string mInputFileName;
1279ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  std::string mOutputFileName;
128b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao
1290b7ef1a176b9ddd1e0d437efdce20743373fd7dbStephen Hines  std::string mDepOutputFileName;
130cc0efad052e944f64bb71cfdaa8a825e30192e78Stephen Hines  std::string mDepTargetBCFileName;
131b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao  std::vector<std::string> mAdditionalDepTargets;
1324cc67fce91f43215d61b2695746eab102a3db516Stephen Hines  std::vector<std::string> mGeneratedFileNames;
1339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1343a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  OutputType mOT;
1359ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1369ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  // Output stream
137e8c263a1c5df81594cf302ecadd813909c894487Zonr Chang  llvm::OwningPtr<llvm::tool_output_file> mOS;
1389207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1390b7ef1a176b9ddd1e0d437efdce20743373fd7dbStephen Hines  // Dependency output stream
140e8c263a1c5df81594cf302ecadd813909c894487Zonr Chang  llvm::OwningPtr<llvm::tool_output_file> mDOS;
1419ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1429ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  std::vector<std::string> mIncludePaths;
1439ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1443a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang protected:
1453a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  PragmaList mPragmas;
1463a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
1479207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::DiagnosticsEngine &getDiagnostics() { return *mDiagEngine; }
1489207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::TargetInfo const &getTargetInfo() const { return *mTarget; }
1499207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::FileManager &getFileManager() { return *mFileMgr; }
1509207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::SourceManager &getSourceManager() { return *mSourceMgr; }
1519207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::Preprocessor &getPreprocessor() { return *mPP; }
1529207a2e495c8363606861e4f034504ec5c153dabLogan Chien  clang::ASTContext &getASTContext() { return *mASTContext; }
1533a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
1549207a2e495c8363606861e4f034504ec5c153dabLogan Chien  inline clang::TargetOptions const &getTargetOptions() const
15523c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines    { return *mTargetOpts.getPtr(); }
1563a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
1573a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  virtual void initDiagnostic() {}
1583a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  virtual void initPreprocessor() {}
1593a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  virtual void initASTContext() {}
1603a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
1619207a2e495c8363606861e4f034504ec5c153dabLogan Chien  virtual clang::ASTConsumer *
1629207a2e495c8363606861e4f034504ec5c153dabLogan Chien    createBackend(const clang::CodeGenOptions& CodeGenOpts,
1639207a2e495c8363606861e4f034504ec5c153dabLogan Chien                  llvm::raw_ostream *OS,
1649207a2e495c8363606861e4f034504ec5c153dabLogan Chien                  OutputType OT);
1653a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang
1669ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao public:
1679ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  static const llvm::StringRef PragmaMetadataName;
1689ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
169b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao  static void GlobalInitialization();
170b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao
171641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang  Slang();
172641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang
173641558f02fe6ce0ee3ae5076eb366c25e2ad5903Zonr Chang  void init(const std::string &Triple, const std::string &CPU,
1748f4d972ef6c6796ffdde603e456979a7004d1e20Stephen Hines            const std::vector<std::string> &Features,
1758f4d972ef6c6796ffdde603e456979a7004d1e20Stephen Hines            clang::DiagnosticsEngine *DiagEngine,
1768f4d972ef6c6796ffdde603e456979a7004d1e20Stephen Hines            DiagnosticBuffer *DiagClient);
1779ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
17823c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines  virtual clang::ModuleLoadResult loadModule(
17923c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines      clang::SourceLocation ImportLoc,
18023c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines      clang::ModuleIdPath Path,
18123c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines      clang::Module::NameVisibilityKind VK,
18223c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines      bool IsInclusionDirective);
1839207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1843a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  bool setInputSource(llvm::StringRef InputFile, const char *Text,
1853a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang                      size_t TextLength);
1869ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1873a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  bool setInputSource(llvm::StringRef InputFile);
1889ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1899207a2e495c8363606861e4f034504ec5c153dabLogan Chien  std::string const &getInputFileName() const { return mInputFileName; }
1909ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1919207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void setIncludePaths(const std::vector<std::string> &IncludePaths) {
192b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao    mIncludePaths = IncludePaths;
1939ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  }
1949ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1959207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void setOutputType(OutputType OT) { mOT = OT; }
1969ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
1970b7ef1a176b9ddd1e0d437efdce20743373fd7dbStephen Hines  bool setOutput(const char *OutputFile);
1989207a2e495c8363606861e4f034504ec5c153dabLogan Chien
1999207a2e495c8363606861e4f034504ec5c153dabLogan Chien  std::string const &getOutputFileName() const {
2003a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang    return mOutputFileName;
2019ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  }
2029ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
2030b7ef1a176b9ddd1e0d437efdce20743373fd7dbStephen Hines  bool setDepOutput(const char *OutputFile);
2049207a2e495c8363606861e4f034504ec5c153dabLogan Chien
2059207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void setDepTargetBC(const char *TargetBCFile) {
206b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao    mDepTargetBCFileName = TargetBCFile;
207b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao  }
2089207a2e495c8363606861e4f034504ec5c153dabLogan Chien
2099207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void setAdditionalDepTargets(
2109207a2e495c8363606861e4f034504ec5c153dabLogan Chien      std::vector<std::string> const &AdditionalDepTargets) {
211b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao    mAdditionalDepTargets = AdditionalDepTargets;
212b81c6a4cbd9c08e0b20ea4fbc615b416ac1bc9ecShih-wei Liao  }
2139207a2e495c8363606861e4f034504ec5c153dabLogan Chien
2149207a2e495c8363606861e4f034504ec5c153dabLogan Chien  void appendGeneratedFileName(std::string const &GeneratedFileName) {
2154cc67fce91f43215d61b2695746eab102a3db516Stephen Hines    mGeneratedFileNames.push_back(GeneratedFileName);
2164cc67fce91f43215d61b2695746eab102a3db516Stephen Hines  }
217cc0efad052e944f64bb71cfdaa8a825e30192e78Stephen Hines
218cc0efad052e944f64bb71cfdaa8a825e30192e78Stephen Hines  int generateDepFile();
2199207a2e495c8363606861e4f034504ec5c153dabLogan Chien
2209ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  int compile();
2219ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao
2229207a2e495c8363606861e4f034504ec5c153dabLogan Chien  char const *getErrorMessage() { return mDiagClient->str().c_str(); }
2234c9f742efa36b1037acc640184681d421aa0f6baShih-wei Liao
224c460b37ffb50819a32c2a8967754b6f784b28263mkopec  void setDebugMetadataEmission(bool EmitDebug);
225c460b37ffb50819a32c2a8967754b6f784b28263mkopec
226c460b37ffb50819a32c2a8967754b6f784b28263mkopec  void setOptimizationLevel(llvm::CodeGenOpt::Level OptimizationLevel);
227c460b37ffb50819a32c2a8967754b6f784b28263mkopec
2289ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  // Reset the slang compiler state such that it can be reused to compile
2299ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao  // another file
2303a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  virtual void reset();
231462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
2323a9ca1f0d6bd8f12c2bb2adea51f95c255996180Zonr Chang  virtual ~Slang();
2339ef2f785e0cc490af678dfd685995dec787321ffShih-wei Liao};
234462aefd62cc646d2ff753c1d003ef3cd7bbea26Shih-wei Liao
235e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines}  // namespace slang
236e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines
237e639eb5caa2c386b4a60659a4929e8a6141a2cbeStephen Hines#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_H_  NOLINT
238