diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/cli_behavior.rs | 16 | ||||
-rw-r--r-- | cli/compiler.rs | 6 | ||||
-rw-r--r-- | cli/isolate.rs | 13 | ||||
-rw-r--r-- | cli/main.rs | 5 | ||||
-rw-r--r-- | cli/ops.rs | 2 | ||||
-rw-r--r-- | cli/startup_data.rs | 21 | ||||
-rw-r--r-- | cli/workers.rs | 15 |
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(), |