#include #include #include #include #include #include #include "cache_builder.h" #include "libplatform/libplatform.h" #include "v8.h" using node::native_module::CodeCacheBuilder; using v8::ArrayBuffer; using v8::Context; using v8::HandleScope; using v8::Isolate; using v8::Local; #ifdef _WIN32 #include #include #include int wmain(int argc, wchar_t* argv[]) { #else // UNIX int main(int argc, char* argv[]) { #endif // _WIN32 v8::V8::SetFlagsFromString("--random_seed=42"); if (argc < 2) { std::cerr << "Usage: " << argv[0] << " \n"; return 1; } std::ofstream out; out.open(argv[1], std::ios::out | std::ios::binary); if (!out.is_open()) { std::cerr << "Cannot open " << argv[1] << "\n"; return 1; } std::unique_ptr platform = v8::platform::NewDefaultPlatform(); v8::V8::InitializePlatform(platform.get()); v8::V8::Initialize(); // Create a new Isolate and make it the current one. Isolate::CreateParams create_params; create_params.array_buffer_allocator = ArrayBuffer::Allocator::NewDefaultAllocator(); Isolate* isolate = Isolate::New(create_params); { Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); v8::Local context = v8::Context::New(isolate); v8::Context::Scope context_scope(context); // The command line flags are part of the code cache's checksum so reset // --random_seed= to its default value before creating the code cache. v8::V8::SetFlagsFromString("--random_seed=0"); std::string cache = CodeCacheBuilder::Generate(context); out << cache; out.close(); } v8::V8::ShutdownPlatform(); return 0; }