mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 17:34:47 -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 {
|
pub enum Snapshot {
|
||||||
Static(&'static [u8]),
|
Static(&'static [u8]),
|
||||||
JustCreated(v8::StartupData),
|
JustCreated(v8::StartupData),
|
||||||
|
Boxed(Box<[u8]>),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents data used to initialize isolate at startup
|
/// Represents data used to initialize isolate at startup
|
||||||
|
@ -250,6 +251,7 @@ impl CoreIsolate {
|
||||||
params = match snapshot {
|
params = match snapshot {
|
||||||
Snapshot::Static(data) => params.snapshot_blob(data),
|
Snapshot::Static(data) => params.snapshot_blob(data),
|
||||||
Snapshot::JustCreated(data) => params.snapshot_blob(data),
|
Snapshot::JustCreated(data) => params.snapshot_blob(data),
|
||||||
|
Snapshot::Boxed(data) => params.snapshot_blob(data),
|
||||||
};
|
};
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
@ -1175,6 +1177,20 @@ pub mod tests {
|
||||||
let mut isolate2 = CoreIsolate::new(startup_data, false);
|
let mut isolate2 = CoreIsolate::new(startup_data, false);
|
||||||
js_check(isolate2.execute("check.js", "if (a != 3) throw Error('x')"));
|
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
|
// TODO(piscisaureus): rusty_v8 should implement the Error trait on
|
||||||
|
|
Loading…
Add table
Reference in a new issue