diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2019-06-04 19:35:51 +0200 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-07-08 18:18:28 -0400 |
commit | d641782c823317a2d2f64d646a0d5b8b6c22b771 (patch) | |
tree | a03beb0939a46333636d0de68eee052978103cfe /core/snapshot_creator.rs | |
parent | 79c3439f269f1e0e24003518e363988fa4f1da33 (diff) |
Rewrite snapshot_creator in Rust
Diffstat (limited to 'core/snapshot_creator.rs')
-rw-r--r-- | core/snapshot_creator.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/core/snapshot_creator.rs b/core/snapshot_creator.rs new file mode 100644 index 000000000..1d43b9174 --- /dev/null +++ b/core/snapshot_creator.rs @@ -0,0 +1,44 @@ +// Note: This is a nearly identical rewrite of core/libdeno/snapshot_creator.cc +// but in Rust. +// +// This snapshot program is considered "basic" because the code being +// snapshotted cannot call ops. + +extern crate deno; + +use deno::js_check; +use deno::Isolate; +use deno::StartupData; +use std::env; +use std::io::Write; + +fn main() { + let args: Vec<String> = env::args().collect(); + // NOTE: `--help` arg will display V8 help and exit + let args = deno::v8_set_flags(args); + + let (snapshot_out_bin, js_filename) = if args.len() == 3 { + (args[1].clone(), args[2].clone()) + } else { + eprintln!("Usage: snapshot_creator <out_filename> <js_filename>"); + std::process::exit(1); + }; + + let js_source = + std::fs::read(&js_filename).expect("couldn't read js_filename"); + let js_source_str = std::str::from_utf8(&js_source).unwrap(); + + let will_snapshot = true; + let mut isolate = Isolate::new(StartupData::None, will_snapshot); + + js_check(isolate.execute(&js_filename, js_source_str)); + + let snapshot = isolate.snapshot().expect("error snapshotting"); + + let mut out_file = std::fs::File::create(snapshot_out_bin).unwrap(); + let snapshot_slice = + unsafe { std::slice::from_raw_parts(snapshot.data_ptr, snapshot.data_len) }; + out_file + .write_all(snapshot_slice) + .expect("Failed to write snapshot file"); +} |