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