summaryrefslogtreecommitdiff
path: root/cli/ops/compiler.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-07-23 15:29:36 +0200
committerGitHub <noreply@github.com>2020-07-23 15:29:36 +0200
commitb449964d1a8d87d53350c0f9adcf1227e6fd3eef (patch)
treec192a67245e0b3bec7af13680f7c0bd2a134db00 /cli/ops/compiler.rs
parente18e46a3b3f734d1c848b80a16d11810597b49f4 (diff)
refactor: remove more compiler runtime code (#6841)
Diffstat (limited to 'cli/ops/compiler.rs')
-rw-r--r--cli/ops/compiler.rs52
1 files changed, 51 insertions, 1 deletions
diff --git a/cli/ops/compiler.rs b/cli/ops/compiler.rs
index 9e56ef436..5af2f5eb0 100644
--- a/cli/ops/compiler.rs
+++ b/cli/ops/compiler.rs
@@ -1,8 +1,20 @@
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
+use super::dispatch_json::{JsonOp, Value};
+use crate::op_error::OpError;
+use crate::ops::json_op;
+use crate::ops::JsonOpDispatcher;
use crate::state::State;
use deno_core::CoreIsolate;
+use deno_core::CoreIsolateState;
+use deno_core::ZeroCopyBuf;
+use std::sync::Arc;
+use std::sync::Mutex;
-pub fn init(i: &mut CoreIsolate, _s: &State) {
+pub fn init(
+ i: &mut CoreIsolate,
+ _s: &State,
+ response: Arc<Mutex<Option<String>>>,
+) {
let custom_assets = std::collections::HashMap::new();
// TODO(ry) use None.
// TODO(bartlomieju): is this op even required?
@@ -10,4 +22,42 @@ pub fn init(i: &mut CoreIsolate, _s: &State) {
"op_fetch_asset",
crate::op_fetch_asset::op_fetch_asset(custom_assets),
);
+
+ i.register_op(
+ "op_compiler_respond",
+ json_op(compiler_op(response, op_compiler_respond)),
+ );
+}
+
+pub fn compiler_op<D>(
+ response: Arc<Mutex<Option<String>>>,
+ dispatcher: D,
+) -> impl JsonOpDispatcher
+where
+ D: Fn(
+ Arc<Mutex<Option<String>>>,
+ Value,
+ &mut [ZeroCopyBuf],
+ ) -> Result<JsonOp, OpError>,
+{
+ move |_isolate_state: &mut CoreIsolateState,
+ args: Value,
+ zero_copy: &mut [ZeroCopyBuf]|
+ -> Result<JsonOp, OpError> {
+ dispatcher(response.clone(), args, zero_copy)
+ }
+}
+
+fn op_compiler_respond(
+ response: Arc<Mutex<Option<String>>>,
+ args: Value,
+ _zero_copy: &mut [ZeroCopyBuf],
+) -> Result<JsonOp, OpError> {
+ let mut r = response.lock().unwrap();
+ assert!(
+ r.is_none(),
+ "op_compiler_respond found unexpected existing compiler output"
+ );
+ *r = Some(args.to_string());
+ Ok(JsonOp::Sync(json!({})))
}