//===- 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