summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/cli_behavior.rs16
-rw-r--r--cli/compiler.rs6
-rw-r--r--cli/isolate.rs13
-rw-r--r--cli/main.rs5
-rw-r--r--cli/ops.rs2
-rw-r--r--cli/startup_data.rs21
-rw-r--r--cli/workers.rs15
7 files changed, 29 insertions, 49 deletions
diff --git a/cli/cli_behavior.rs b/cli/cli_behavior.rs
index 05f2cf006..860ec76ec 100644
--- a/cli/cli_behavior.rs
+++ b/cli/cli_behavior.rs
@@ -4,24 +4,16 @@ use crate::ops;
use deno::deno_buf;
use deno::Behavior;
use deno::Op;
-use deno::StartupData;
use std::sync::Arc;
/// Implements deno::Behavior for the main Deno command-line.
pub struct CliBehavior {
- startup_data: Option<StartupData>,
pub state: Arc<IsolateState>,
}
impl CliBehavior {
- pub fn new(
- startup_data: Option<StartupData>,
- state: Arc<IsolateState>,
- ) -> Self {
- Self {
- startup_data,
- state,
- }
+ pub fn new(state: Arc<IsolateState>) -> Self {
+ Self { state }
}
}
@@ -38,10 +30,6 @@ impl IsolateStateContainer for CliBehavior {
}
impl Behavior for CliBehavior {
- fn startup_data(&mut self) -> Option<StartupData> {
- self.startup_data.take()
- }
-
fn dispatch(
&mut self,
control: &[u8],
diff --git a/cli/compiler.rs b/cli/compiler.rs
index 3bf230bc3..e4d76c44c 100644
--- a/cli/compiler.rs
+++ b/cli/compiler.rs
@@ -17,7 +17,6 @@ use deno::Behavior;
use deno::Buf;
use deno::JSError;
use deno::Op;
-use deno::StartupData;
use futures::future::*;
use futures::sync::oneshot;
use futures::Future;
@@ -70,10 +69,6 @@ impl IsolateStateContainer for &CompilerBehavior {
}
impl Behavior for CompilerBehavior {
- fn startup_data(&mut self) -> Option<StartupData> {
- Some(startup_data::compiler_isolate_init())
- }
-
fn dispatch(
&mut self,
control: &[u8],
@@ -148,6 +143,7 @@ fn lazy_start(parent_state: Arc<IsolateState>) -> ResourceId {
cell
.get_or_insert_with(|| {
let worker_result = workers::spawn(
+ startup_data::compiler_isolate_init(),
CompilerBehavior::new(
parent_state.flags.clone(),
parent_state.argv.clone(),
diff --git a/cli/isolate.rs b/cli/isolate.rs
index 1d7201074..2e6d69d87 100644
--- a/cli/isolate.rs
+++ b/cli/isolate.rs
@@ -13,6 +13,7 @@ use deno;
use deno::deno_mod;
use deno::Behavior;
use deno::JSError;
+use deno::StartupData;
use futures::future::Either;
use futures::Async;
use futures::Future;
@@ -32,10 +33,10 @@ pub struct Isolate<B: Behavior> {
}
impl<B: DenoBehavior> Isolate<B> {
- pub fn new(behavior: B) -> Isolate<B> {
+ pub fn new(startup_data: StartupData, behavior: B) -> Isolate<B> {
let state = behavior.state().clone();
Self {
- inner: CoreIsolate::new(behavior),
+ inner: CoreIsolate::new(startup_data, behavior),
state,
}
}
@@ -270,8 +271,8 @@ mod tests {
let state = Arc::new(IsolateState::new(flags, rest_argv, None, false));
let state_ = state.clone();
tokio_util::run(lazy(move || {
- let cli = CliBehavior::new(None, state.clone());
- let mut isolate = Isolate::new(cli);
+ let cli = CliBehavior::new(state.clone());
+ let mut isolate = Isolate::new(StartupData::None, cli);
if let Err(err) = isolate.execute_mod(&filename, false) {
eprintln!("execute_mod err {:?}", err);
}
@@ -293,8 +294,8 @@ mod tests {
let state = Arc::new(IsolateState::new(flags, rest_argv, None, false));
let state_ = state.clone();
tokio_util::run(lazy(move || {
- let cli = CliBehavior::new(None, state.clone());
- let mut isolate = Isolate::new(cli);
+ let cli = CliBehavior::new(state.clone());
+ let mut isolate = Isolate::new(StartupData::None, cli);
if let Err(err) = isolate.execute_mod(&filename, false) {
eprintln!("execute_mod err {:?}", err);
}
diff --git a/cli/main.rs b/cli/main.rs
index 4d0ceab5a..bda4f7b8f 100644
--- a/cli/main.rs
+++ b/cli/main.rs
@@ -107,9 +107,8 @@ fn main() {
let state = Arc::new(IsolateState::new(flags, rest_argv, None, false));
let state_ = state.clone();
- let startup_data = startup_data::deno_isolate_init();
- let cli = CliBehavior::new(Some(startup_data), state_);
- let mut isolate = Isolate::new(cli);
+ let cli = CliBehavior::new(state_);
+ let mut isolate = Isolate::new(startup_data::deno_isolate_init(), cli);
let main_future = lazy(move || {
// Setup runtime.
diff --git a/cli/ops.rs b/cli/ops.rs
index 889061651..a0169d6ab 100644
--- a/cli/ops.rs
+++ b/cli/ops.rs
@@ -15,6 +15,7 @@ use crate::resolve_addr::resolve_addr;
use crate::resources;
use crate::resources::table_entries;
use crate::resources::Resource;
+use crate::startup_data;
use crate::tokio_util;
use crate::tokio_write;
use crate::version;
@@ -1865,6 +1866,7 @@ fn op_create_worker(
parent_state.argv.clone(),
);
match workers::spawn(
+ startup_data::deno_isolate_init(),
behavior,
&format!("USER-WORKER-{}", specifier),
workers::WorkerInit::Module(specifier.to_string()),
diff --git a/cli/startup_data.rs b/cli/startup_data.rs
index 61891ced4..1a77915e9 100644
--- a/cli/startup_data.rs
+++ b/cli/startup_data.rs
@@ -1,8 +1,7 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
-use deno::deno_buf;
use deno::{Script, StartupData};
-pub fn deno_isolate_init() -> StartupData {
+pub fn deno_isolate_init() -> StartupData<'static> {
if cfg!(feature = "no-snapshot-init") {
debug!("Deno isolate init without snapshots.");
#[cfg(not(feature = "check-only"))]
@@ -12,8 +11,8 @@ pub fn deno_isolate_init() -> StartupData {
let source_bytes = vec![];
StartupData::Script(Script {
- filename: "gen/cli/bundle/main.js".to_string(),
- source: std::str::from_utf8(&source_bytes[..]).unwrap().to_string(),
+ filename: "gen/cli/bundle/main.js",
+ source: std::str::from_utf8(&source_bytes[..]).unwrap(),
})
} else {
debug!("Deno isolate init with snapshots.");
@@ -23,13 +22,11 @@ pub fn deno_isolate_init() -> StartupData {
#[cfg(any(feature = "check-only", feature = "no-snapshot-init"))]
let data = vec![];
- unsafe {
- StartupData::Snapshot(deno_buf::from_raw_parts(data.as_ptr(), data.len()))
- }
+ StartupData::Snapshot(data)
}
}
-pub fn compiler_isolate_init() -> StartupData {
+pub fn compiler_isolate_init() -> StartupData<'static> {
if cfg!(feature = "no-snapshot-init") {
debug!("Compiler isolate init without snapshots.");
#[cfg(not(feature = "check-only"))]
@@ -41,8 +38,8 @@ pub fn compiler_isolate_init() -> StartupData {
let source_bytes = vec![];
StartupData::Script(Script {
- filename: "gen/cli/bundle/compiler.js".to_string(),
- source: std::str::from_utf8(&source_bytes[..]).unwrap().to_string(),
+ filename: "gen/cli/bundle/compiler.js",
+ source: std::str::from_utf8(&source_bytes[..]).unwrap(),
})
} else {
debug!("Deno isolate init with snapshots.");
@@ -54,8 +51,6 @@ pub fn compiler_isolate_init() -> StartupData {
#[cfg(any(feature = "check-only", feature = "no-snapshot-init"))]
let data = vec![];
- unsafe {
- StartupData::Snapshot(deno_buf::from_raw_parts(data.as_ptr(), data.len()))
- }
+ StartupData::Snapshot(data)
}
}
diff --git a/cli/workers.rs b/cli/workers.rs
index 02126f1e2..7c39a5d2e 100644
--- a/cli/workers.rs
+++ b/cli/workers.rs
@@ -7,7 +7,6 @@ use crate::isolate_state::IsolateStateContainer;
use crate::isolate_state::WorkerChannels;
use crate::ops;
use crate::resources;
-use crate::startup_data;
use deno::deno_buf;
use deno::Behavior;
use deno::Buf;
@@ -44,10 +43,6 @@ impl IsolateStateContainer for &UserWorkerBehavior {
}
impl Behavior for UserWorkerBehavior {
- fn startup_data(&mut self) -> Option<StartupData> {
- Some(startup_data::deno_isolate_init())
- }
-
fn dispatch(
&mut self,
control: &[u8],
@@ -83,7 +78,7 @@ pub struct Worker<B: WorkerBehavior> {
}
impl<B: WorkerBehavior> Worker<B> {
- pub fn new(mut behavior: B) -> Self {
+ pub fn new(startup_data: StartupData, mut behavior: B) -> Self {
let (worker_in_tx, worker_in_rx) = mpsc::channel::<Buf>(1);
let (worker_out_tx, worker_out_rx) = mpsc::channel::<Buf>(1);
@@ -92,7 +87,7 @@ impl<B: WorkerBehavior> Worker<B> {
behavior.set_internal_channels(internal_channels);
- let isolate = Isolate::new(behavior);
+ let isolate = Isolate::new(startup_data, behavior);
Worker {
isolate,
@@ -129,12 +124,13 @@ pub enum WorkerInit {
}
pub fn spawn<B: WorkerBehavior + 'static>(
+ startup_data: StartupData,
behavior: B,
worker_debug_name: &str,
init: WorkerInit,
) -> Result<Worker<B>, RustOrJsError> {
let state = behavior.state().clone();
- let mut worker = Worker::new(behavior);
+ let mut worker = Worker::new(startup_data, behavior);
worker
.execute(&format!("denoMain('{}')", worker_debug_name))
@@ -172,6 +168,7 @@ mod tests {
use crate::compiler::CompilerBehavior;
use crate::isolate_state::IsolateState;
use crate::js_errors::JSErrorColor;
+ use crate::startup_data;
use crate::tokio_util;
use futures::future::lazy;
use std::thread;
@@ -180,6 +177,7 @@ mod tests {
fn test_spawn() {
tokio_util::init(|| {
let worker_result = spawn(
+ startup_data::compiler_isolate_init(),
CompilerBehavior::new(
IsolateState::mock().flags.clone(),
IsolateState::mock().argv.clone(),
@@ -242,6 +240,7 @@ mod tests {
fn removed_from_resource_table_on_close() {
tokio_util::init(|| {
let worker_result = spawn(
+ startup_data::compiler_isolate_init(),
CompilerBehavior::new(
IsolateState::mock().flags.clone(),
IsolateState::mock().argv.clone(),