diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/ops/dispatch_json.rs | 16 | ||||
| -rw-r--r-- | cli/ops/dispatch_minimal.rs | 8 | ||||
| -rw-r--r-- | cli/ops/plugins.rs | 21 | ||||
| -rw-r--r-- | cli/ops/web_worker.rs | 18 | ||||
| -rw-r--r-- | cli/state.rs | 47 | ||||
| -rw-r--r-- | cli/web_worker.rs | 3 | ||||
| -rw-r--r-- | cli/worker.rs | 3 |
7 files changed, 85 insertions, 31 deletions
diff --git a/cli/ops/dispatch_json.rs b/cli/ops/dispatch_json.rs index b1a7bc723..bfffd6d09 100644 --- a/cli/ops/dispatch_json.rs +++ b/cli/ops/dispatch_json.rs @@ -41,11 +41,19 @@ struct AsyncArgs { promise_id: Option<u64>, } -pub fn json_op<D>(d: D) -> impl Fn(&[u8], Option<ZeroCopyBuf>) -> Op +pub fn json_op<D>( + d: D, +) -> impl Fn(&mut deno_core::Isolate, &[u8], Option<ZeroCopyBuf>) -> Op where - D: Fn(Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError>, + D: Fn( + &mut deno_core::Isolate, + Value, + Option<ZeroCopyBuf>, + ) -> Result<JsonOp, OpError>, { - move |control: &[u8], zero_copy: Option<ZeroCopyBuf>| { + move |isolate: &mut deno_core::Isolate, + control: &[u8], + zero_copy: Option<ZeroCopyBuf>| { let async_args: AsyncArgs = match serde_json::from_slice(control) { Ok(args) => args, Err(e) => { @@ -58,7 +66,7 @@ where let result = serde_json::from_slice(control) .map_err(OpError::from) - .and_then(|args| d(args, zero_copy)); + .and_then(|args| d(isolate, args, zero_copy)); // Convert to Op match result { diff --git a/cli/ops/dispatch_minimal.rs b/cli/ops/dispatch_minimal.rs index 7fdd12401..37907d60c 100644 --- a/cli/ops/dispatch_minimal.rs +++ b/cli/ops/dispatch_minimal.rs @@ -113,11 +113,15 @@ fn test_parse_min_record() { assert_eq!(parse_min_record(&buf), None); } -pub fn minimal_op<D>(d: D) -> impl Fn(&[u8], Option<ZeroCopyBuf>) -> Op +pub fn minimal_op<D>( + d: D, +) -> impl Fn(&mut deno_core::Isolate, &[u8], Option<ZeroCopyBuf>) -> Op where D: Fn(bool, i32, Option<ZeroCopyBuf>) -> MinimalOp, { - move |control: &[u8], zero_copy: Option<ZeroCopyBuf>| { + move |_isolate: &mut deno_core::Isolate, + control: &[u8], + zero_copy: Option<ZeroCopyBuf>| { let mut record = match parse_min_record(control) { Some(r) => r, None => { diff --git a/cli/ops/plugins.rs b/cli/ops/plugins.rs index 816c7ebb4..c0dffc90f 100644 --- a/cli/ops/plugins.rs +++ b/cli/ops/plugins.rs @@ -3,20 +3,21 @@ use crate::fs as deno_fs; use crate::op_error::OpError; use crate::ops::json_op; use crate::state::State; -use deno_core::*; +use deno_core::Isolate; +use deno_core::OpDispatcher; +use deno_core::OpId; +use deno_core::PluginInitContext; +use deno_core::PluginInitFn; +use deno_core::ZeroCopyBuf; use dlopen::symbor::Library; use std::collections::HashMap; use std::ffi::OsStr; use std::path::Path; -use std::rc::Rc; -pub fn init(i: &mut Isolate, s: &State, r: Rc<deno_core::OpRegistry>) { - let r_ = r; +pub fn init(i: &mut Isolate, s: &State) { i.register_op( "op_open_plugin", - s.core_op(json_op(s.stateful_op(move |state, args, zero_copy| { - op_open_plugin(&r_, state, args, zero_copy) - }))), + s.core_op(json_op(s.stateful_op2(op_open_plugin))), ); } @@ -52,7 +53,7 @@ struct OpenPluginArgs { } pub fn op_open_plugin( - registry: &Rc<deno_core::OpRegistry>, + isolate: &mut deno_core::Isolate, state: &State, args: Value, _zero_copy: Option<ZeroCopyBuf>, @@ -91,8 +92,8 @@ pub fn op_open_plugin( // The inclusion of prefix and rid is designed to avoid any // op name collision beyond the bound of a single loaded // plugin instance. - let op_id = registry - .register(&format!("plugin_{}_{}", rid, op.0), state.core_op(op.1)); + let op_id = isolate + .register_op(&format!("plugin_{}_{}", rid, op.0), state.core_op(op.1)); plugin_resource.ops.insert(op.0, op_id); } diff --git a/cli/ops/web_worker.rs b/cli/ops/web_worker.rs index 8cade7d40..ee376719f 100644 --- a/cli/ops/web_worker.rs +++ b/cli/ops/web_worker.rs @@ -12,7 +12,11 @@ use std::convert::From; pub fn web_worker_op<D>( sender: mpsc::Sender<WorkerEvent>, dispatcher: D, -) -> impl Fn(Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError> +) -> impl Fn( + &mut deno_core::Isolate, + Value, + Option<ZeroCopyBuf>, +) -> Result<JsonOp, OpError> where D: Fn( &mpsc::Sender<WorkerEvent>, @@ -20,7 +24,8 @@ where Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError>, { - move |args: Value, + move |_isolate: &mut deno_core::Isolate, + args: Value, zero_copy: Option<ZeroCopyBuf>| -> Result<JsonOp, OpError> { dispatcher(&sender, args, zero_copy) } } @@ -29,7 +34,11 @@ pub fn web_worker_op2<D>( handle: WebWorkerHandle, sender: mpsc::Sender<WorkerEvent>, dispatcher: D, -) -> impl Fn(Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError> +) -> impl Fn( + &mut deno_core::Isolate, + Value, + Option<ZeroCopyBuf>, +) -> Result<JsonOp, OpError> where D: Fn( WebWorkerHandle, @@ -38,7 +47,8 @@ where Option<ZeroCopyBuf>, ) -> Result<JsonOp, OpError>, { - move |args: Value, + move |_isolate: &mut deno_core::Isolate, + args: Value, zero_copy: Option<ZeroCopyBuf>| -> Result<JsonOp, OpError> { dispatcher(handle.clone(), &sender, args, zero_copy) diff --git a/cli/state.rs b/cli/state.rs index 82ac8c4c1..856190134 100644 --- a/cli/state.rs +++ b/cli/state.rs @@ -73,7 +73,7 @@ impl State { pub fn stateful_json_op<D>( &self, dispatcher: D, - ) -> impl Fn(&[u8], Option<ZeroCopyBuf>) -> Op + ) -> impl Fn(&mut deno_core::Isolate, &[u8], Option<ZeroCopyBuf>) -> Op where D: Fn(&State, Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError>, { @@ -85,18 +85,21 @@ impl State { pub fn core_op<D>( &self, dispatcher: D, - ) -> impl Fn(&[u8], Option<ZeroCopyBuf>) -> Op + ) -> impl Fn(&mut deno_core::Isolate, &[u8], Option<ZeroCopyBuf>) -> Op where - D: Fn(&[u8], Option<ZeroCopyBuf>) -> Op, + D: Fn(&mut deno_core::Isolate, &[u8], Option<ZeroCopyBuf>) -> Op, { let state = self.clone(); - move |control: &[u8], zero_copy: Option<ZeroCopyBuf>| -> Op { + move |isolate: &mut deno_core::Isolate, + control: &[u8], + zero_copy: Option<ZeroCopyBuf>| + -> Op { let bytes_sent_control = control.len() as u64; let bytes_sent_zero_copy = zero_copy.as_ref().map(|b| b.len()).unwrap_or(0) as u64; - let op = dispatcher(control, zero_copy); + let op = dispatcher(isolate, control, zero_copy); match op { Op::Sync(buf) => { @@ -162,15 +165,45 @@ impl State { pub fn stateful_op<D>( &self, dispatcher: D, - ) -> impl Fn(Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError> + ) -> impl Fn( + &mut deno_core::Isolate, + Value, + Option<ZeroCopyBuf>, + ) -> Result<JsonOp, OpError> where D: Fn(&State, Value, Option<ZeroCopyBuf>) -> Result<JsonOp, OpError>, { let state = self.clone(); - move |args: Value, + move |_isolate: &mut deno_core::Isolate, + args: Value, zero_copy: Option<ZeroCopyBuf>| -> Result<JsonOp, OpError> { dispatcher(&state, args, zero_copy) } } + + pub fn stateful_op2<D>( + &self, + dispatcher: D, + ) -> impl Fn( + &mut deno_core::Isolate, + Value, + Option<ZeroCopyBuf>, + ) -> Result<JsonOp, OpError> + where + D: Fn( + &mut deno_core::Isolate, + &State, + Value, + Option<ZeroCopyBuf>, + ) -> Result<JsonOp, OpError>, + { + let state = self.clone(); + move |isolate: &mut deno_core::Isolate, + args: Value, + zero_copy: Option<ZeroCopyBuf>| + -> Result<JsonOp, OpError> { + dispatcher(isolate, &state, args, zero_copy) + } + } } impl ModuleLoader for State { diff --git a/cli/web_worker.rs b/cli/web_worker.rs index 24318fc59..fc1575c5f 100644 --- a/cli/web_worker.rs +++ b/cli/web_worker.rs @@ -133,11 +133,10 @@ impl WebWorker { ops::fetch::init(isolate, &state); if has_deno_namespace { - let op_registry = isolate.op_registry.clone(); ops::runtime_compiler::init(isolate, &state); ops::fs::init(isolate, &state); ops::fs_events::init(isolate, &state); - ops::plugins::init(isolate, &state, op_registry); + ops::plugins::init(isolate, &state); ops::net::init(isolate, &state); ops::tls::init(isolate, &state); ops::os::init(isolate, &state); diff --git a/cli/worker.rs b/cli/worker.rs index 6f2818980..cdbf8c42d 100644 --- a/cli/worker.rs +++ b/cli/worker.rs @@ -222,7 +222,6 @@ impl MainWorker { let state_ = state.clone(); let mut worker = Worker::new(name, startup_data, state_); { - let op_registry = worker.isolate.op_registry.clone(); let isolate = &mut worker.isolate; ops::runtime::init(isolate, &state); ops::runtime_compiler::init(isolate, &state); @@ -231,7 +230,7 @@ impl MainWorker { ops::fs::init(isolate, &state); ops::fs_events::init(isolate, &state); ops::io::init(isolate, &state); - ops::plugins::init(isolate, &state, op_registry); + ops::plugins::init(isolate, &state); ops::net::init(isolate, &state); ops::tls::init(isolate, &state); ops::os::init(isolate, &state); |
