summaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
Diffstat (limited to 'cli')
-rw-r--r--cli/ops/dispatch_json.rs16
-rw-r--r--cli/ops/dispatch_minimal.rs8
-rw-r--r--cli/ops/plugins.rs21
-rw-r--r--cli/ops/web_worker.rs18
-rw-r--r--cli/state.rs47
-rw-r--r--cli/web_worker.rs3
-rw-r--r--cli/worker.rs3
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);