From 48bf419669694802f82b418b901cb282957fb64f Mon Sep 17 00:00:00 2001 From: andy finch Date: Tue, 19 Mar 2019 20:55:59 -0400 Subject: Separate behavior for the compiler isolate (#1973) --- cli/isolate.rs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'cli/isolate.rs') diff --git a/cli/isolate.rs b/cli/isolate.rs index 379203dd3..50cafc6c9 100644 --- a/cli/isolate.rs +++ b/cli/isolate.rs @@ -1,33 +1,37 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -use crate::cli::Cli; use crate::compiler::compile_sync; use crate::compiler::ModuleMetaData; use crate::errors::DenoError; use crate::errors::RustOrJsError; use crate::isolate_state::IsolateState; +use crate::isolate_state::IsolateStateContainer; use crate::js_errors; use crate::msg; use deno_core; use deno_core::deno_mod; +use deno_core::Behavior; use deno_core::JSError; use futures::Async; use futures::Future; use std::sync::Arc; -type CoreIsolate = deno_core::Isolate; +pub trait DenoBehavior: Behavior + IsolateStateContainer + Send {} +impl DenoBehavior for T where T: Behavior + IsolateStateContainer + Send {} + +type CoreIsolate = deno_core::Isolate; /// Wraps deno_core::Isolate to provide source maps, ops for the CLI, and /// high-level module loading -pub struct Isolate { - inner: CoreIsolate, +pub struct Isolate { + inner: CoreIsolate, state: Arc, } -impl Isolate { - pub fn new(cli: Cli) -> Isolate { - let state = cli.state.clone(); +impl Isolate { + pub fn new(behavior: B) -> Isolate { + let state = behavior.state().clone(); Self { - inner: CoreIsolate::new(cli), + inner: CoreIsolate::new(behavior), state, } } @@ -150,7 +154,7 @@ impl Isolate { } } -impl Future for Isolate { +impl Future for Isolate { type Item = (); type Error = JSError; @@ -170,7 +174,7 @@ fn fetch_module_meta_data_and_maybe_compile( || state.flags.recompile { debug!(">>>>> compile_sync START"); - out = compile_sync(state, specifier, &referrer, &out); + out = compile_sync(state.clone(), specifier, &referrer, &out); debug!(">>>>> compile_sync END"); state.dir.code_cache(&out)?; } @@ -180,8 +184,8 @@ fn fetch_module_meta_data_and_maybe_compile( #[cfg(test)] mod tests { use super::*; + use crate::cli_behavior::CliBehavior; use crate::flags; - use crate::permissions::DenoPermissions; use crate::tokio_util; use futures::future::lazy; use std::sync::atomic::Ordering; @@ -199,7 +203,7 @@ mod tests { let state = Arc::new(IsolateState::new(flags, rest_argv, None)); let state_ = state.clone(); tokio_util::run(lazy(move || { - let cli = Cli::new(None, state.clone(), DenoPermissions::default()); + let cli = CliBehavior::new(None, state.clone()); let mut isolate = Isolate::new(cli); if let Err(err) = isolate.execute_mod(&filename, false) { eprintln!("execute_mod err {:?}", err); @@ -222,7 +226,7 @@ mod tests { let state = Arc::new(IsolateState::new(flags, rest_argv, None)); let state_ = state.clone(); tokio_util::run(lazy(move || { - let cli = Cli::new(None, state.clone(), DenoPermissions::default()); + let cli = CliBehavior::new(None, state.clone()); let mut isolate = Isolate::new(cli); if let Err(err) = isolate.execute_mod(&filename, false) { eprintln!("execute_mod err {:?}", err); -- cgit v1.2.3