mirror of
https://github.com/denoland/deno.git
synced 2024-11-22 15:06:54 -05:00
Allow starting isolate from snapshot bytes on the heap (#5187)
This commit is contained in:
parent
d8f5b37218
commit
f6b617784f
1 changed files with 16 additions and 0 deletions
|
@ -125,6 +125,7 @@ impl From<Script<'_>> for OwnedScript {
|
|||
pub enum Snapshot {
|
||||
Static(&'static [u8]),
|
||||
JustCreated(v8::StartupData),
|
||||
Boxed(Box<[u8]>),
|
||||
}
|
||||
|
||||
/// Represents data used to initialize isolate at startup
|
||||
|
@ -250,6 +251,7 @@ impl CoreIsolate {
|
|||
params = match snapshot {
|
||||
Snapshot::Static(data) => params.snapshot_blob(data),
|
||||
Snapshot::JustCreated(data) => params.snapshot_blob(data),
|
||||
Snapshot::Boxed(data) => params.snapshot_blob(data),
|
||||
};
|
||||
true
|
||||
} else {
|
||||
|
@ -1175,6 +1177,20 @@ pub mod tests {
|
|||
let mut isolate2 = CoreIsolate::new(startup_data, false);
|
||||
js_check(isolate2.execute("check.js", "if (a != 3) throw Error('x')"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_from_boxed_snapshot() {
|
||||
let snapshot = {
|
||||
let mut isolate = CoreIsolate::new(StartupData::None, true);
|
||||
js_check(isolate.execute("a.js", "a = 1 + 2"));
|
||||
let snap: &[u8] = &*isolate.snapshot();
|
||||
Vec::from(snap).into_boxed_slice()
|
||||
};
|
||||
|
||||
let startup_data = StartupData::Snapshot(Snapshot::Boxed(snapshot));
|
||||
let mut isolate2 = CoreIsolate::new(startup_data, false);
|
||||
js_check(isolate2.execute("check.js", "if (a != 3) throw Error('x')"));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(piscisaureus): rusty_v8 should implement the Error trait on
|
||||
|
|
Loading…
Reference in a new issue