summaryrefslogtreecommitdiff
path: root/cli/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/state.rs')
-rw-r--r--cli/state.rs47
1 files changed, 40 insertions, 7 deletions
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 {