summaryrefslogtreecommitdiff
path: root/src/snapshot_creator.cc
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2018-07-13 01:21:28 -0400
committerRyan Dahl <ry@tinyclouds.org>2018-07-18 15:43:50 -0400
commitc6ae3f7abce4b0b26c29fada76a0aed5c226fed7 (patch)
tree51903ba084046fa1249a7244e46e7a1fb309499c /src/snapshot_creator.cc
parent08606e40a81a02f95125747a472d14a80c22a925 (diff)
Add deno::Basename and deno::BinaryContentAsC utilies.
These are prep for code sharing with the asset code soon to land.
Diffstat (limited to 'src/snapshot_creator.cc')
-rw-r--r--src/snapshot_creator.cc59
1 files changed, 58 insertions, 1 deletions
diff --git a/src/snapshot_creator.cc b/src/snapshot_creator.cc
index cb5caf304..3aca7c3a8 100644
--- a/src/snapshot_creator.cc
+++ b/src/snapshot_creator.cc
@@ -1,6 +1,7 @@
// Copyright 2018 Ryan Dahl <ry@tinyclouds.org>
// All rights reserved. MIT License.
// Hint: --trace_serializer is a useful debugging flag.
+#include <fstream>
#include "deno.h"
#include "file_util.h"
#include "internal.h"
@@ -40,6 +41,61 @@ v8::StartupData MakeSnapshot(const char* js_filename, const char* js_source) {
return snapshot_blob;
}
+class StartupDataCppWriter {
+ public:
+ StartupDataCppWriter(const char* name, const char* filename,
+ const std::string& data)
+ : name_(name),
+ filename_(filename),
+ data_(data),
+ file_(filename_, std::ios::binary) {}
+
+ bool Write() {
+ if (file_.bad()) {
+ return false;
+ }
+ WritePrefix();
+ WriteData();
+ WriteSuffix();
+
+ file_.close();
+ // printf("Wrote %s %d %s \n", name_, data_.size(), filename_);
+ return !file_.bad();
+ }
+
+ private:
+ void WritePrefix() {
+ file_ << "// Autogenerated snapshot file. Do not edit.\n\n";
+ file_ << "#include \"third_party/v8/include/v8.h\"\n\n";
+ file_ << "namespace deno { \n\n";
+ }
+
+ void WriteSuffix() {
+ char buffer[500];
+ snprintf(buffer, sizeof(buffer), "v8::StartupData* StartupBlob_%s() {\n",
+ name_);
+ file_ << buffer;
+ snprintf(buffer, sizeof(buffer), " return &%s_blob;\n", name_);
+ file_ << buffer;
+ file_ << "}\n\n";
+ file_ << "} // namespace deno\n\n";
+ }
+
+ void WriteData() {
+ char buffer[500];
+ file_ << BinaryContentAsC(name_, data_);
+ snprintf(buffer, sizeof(buffer),
+ "static v8::StartupData %s_blob = { %s_data, %s_size };\n", name_,
+ name_, name_);
+ file_ << buffer;
+ }
+
+ const char* name_;
+ const char* filename_;
+ std::string data_;
+ std::ofstream file_;
+};
+
} // namespace deno
int main(int argc, char** argv) {
@@ -59,5 +115,6 @@ int main(int argc, char** argv) {
auto snapshot_blob = deno::MakeSnapshot(js_fn, js_source.c_str());
std::string snapshot_str(snapshot_blob.data, snapshot_blob.raw_size);
- CHECK(deno::WriteDataAsCpp("snapshot", snapshot_out_cc, snapshot_str));
+ deno::StartupDataCppWriter writer("snapshot", snapshot_out_cc, snapshot_str);
+ CHECK(writer.Write());
}