| //===- subzero/src/WasmTranslator.h - WASM to Subzero Translation ---------===// | 
 | // | 
 | //                        The Subzero Code Generator | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | /// | 
 | /// \file | 
 | /// \brief Declares a driver for translating Wasm bitcode into PNaCl bitcode. | 
 | /// | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef SUBZERO_SRC_WASMTRANSLATOR_H | 
 | #define SUBZERO_SRC_WASMTRANSLATOR_H | 
 |  | 
 | #if ALLOW_WASM | 
 |  | 
 | #include "IceGlobalContext.h" | 
 | #include "IceTranslator.h" | 
 |  | 
 | #ifdef __clang__ | 
 | #pragma clang diagnostic push | 
 | #pragma clang diagnostic ignored "-Wunused-parameter" | 
 | #endif // __clang__ | 
 |  | 
 | #include "llvm/Support/StreamingMemoryObject.h" | 
 |  | 
 | #ifdef __clang__ | 
 | #pragma clang diagnostic pop | 
 | #endif // __clang__ | 
 |  | 
 | namespace v8 { | 
 | namespace internal { | 
 | class Zone; | 
 | namespace wasm { | 
 | struct FunctionBody; | 
 | } // end of namespace wasm | 
 | } // end of namespace internal | 
 | } // end of namespace v8 | 
 |  | 
 | namespace Ice { | 
 |  | 
 | class WasmTranslator : public Translator { | 
 |   WasmTranslator() = delete; | 
 |   WasmTranslator(const WasmTranslator &) = delete; | 
 |   WasmTranslator &operator=(const WasmTranslator &) = delete; | 
 |  | 
 |   template <typename F = std::function<void(Ostream &)>> void log(F Fn) { | 
 |     if (BuildDefs::dump() && (getFlags().getVerbose() & IceV_Wasm)) { | 
 |       Fn(Ctx->getStrDump()); | 
 |       Ctx->getStrDump().flush(); | 
 |     } | 
 |   } | 
 |  | 
 | public: | 
 |   explicit WasmTranslator(GlobalContext *Ctx); | 
 |  | 
 |   void translate(const std::string &IRFilename, | 
 |                  std::unique_ptr<llvm::DataStreamer> InputStream); | 
 |  | 
 |   /// Translates a single Wasm function. | 
 |   /// | 
 |   /// Parameters: | 
 |   ///   Zone - an arena for the V8 code to allocate from. | 
 |   ///   Body - information about the function to translate | 
 |   std::unique_ptr<Cfg> | 
 |   translateFunction(v8::internal::Zone *Zone, | 
 |                     v8::internal::wasm::FunctionBody &Body); | 
 |  | 
 | private: | 
 |   std::vector<uint8_t> Buffer; | 
 | }; | 
 | } | 
 |  | 
 | #endif // ALLOW_WASM | 
 |  | 
 | #endif // SUBZERO_SRC_WASMTRANSLATOR_H |