summaryrefslogtreecommitdiff
path: root/cli/js/dispatch_minimal.ts
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-03-08 13:09:22 +0100
committerGitHub <noreply@github.com>2020-03-08 13:09:22 +0100
commit1b6f8318750d319d689f7eeef9e7e1f2e56b94a6 (patch)
treeb2e182b77cfbcd25ee893113de9f61509e16e787 /cli/js/dispatch_minimal.ts
parentb9037c86ed8d1d55a59a1c1298fa12bbfcae6873 (diff)
reorg: move JS ops implementations to cli/js/ops/, part 1 (#4264)
Following JS ops were moved to separate files in cli/js/ops directory: - compiler - dispatch_json - dispatch_minimal - errors - fetch - fs_events - os - random - repl - resources - runtime_compiler - runtime - tty
Diffstat (limited to 'cli/js/dispatch_minimal.ts')
-rw-r--r--cli/js/dispatch_minimal.ts115
1 files changed, 0 insertions, 115 deletions
diff --git a/cli/js/dispatch_minimal.ts b/cli/js/dispatch_minimal.ts
deleted file mode 100644
index a62cc7c85..000000000
--- a/cli/js/dispatch_minimal.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
-import * as util from "./util.ts";
-import { core } from "./core.ts";
-import { TextDecoder } from "./web/text_encoding.ts";
-import { ErrorKind, errors, getErrorClass } from "./errors.ts";
-
-const promiseTableMin = new Map<number, util.Resolvable<RecordMinimal>>();
-// Note it's important that promiseId starts at 1 instead of 0, because sync
-// messages are indicated with promiseId 0. If we ever add wrap around logic for
-// overflows, this should be taken into account.
-let _nextPromiseId = 1;
-
-const decoder = new TextDecoder();
-
-function nextPromiseId(): number {
- return _nextPromiseId++;
-}
-
-export interface RecordMinimal {
- promiseId: number;
- arg: number;
- result: number;
- err?: {
- kind: ErrorKind;
- message: string;
- };
-}
-
-export function recordFromBufMinimal(ui8: Uint8Array): RecordMinimal {
- const header = ui8.subarray(0, 12);
- const buf32 = new Int32Array(
- header.buffer,
- header.byteOffset,
- header.byteLength / 4
- );
- const promiseId = buf32[0];
- const arg = buf32[1];
- const result = buf32[2];
- let err;
-
- if (arg < 0) {
- const kind = result as ErrorKind;
- const message = decoder.decode(ui8.subarray(12));
- err = { kind, message };
- } else if (ui8.length != 12) {
- throw new errors.InvalidData("BadMessage");
- }
-
- return {
- promiseId,
- arg,
- result,
- err
- };
-}
-
-function unwrapResponse(res: RecordMinimal): number {
- if (res.err != null) {
- throw new (getErrorClass(res.err.kind))(res.err.message);
- }
- return res.result;
-}
-
-const scratch32 = new Int32Array(3);
-const scratchBytes = new Uint8Array(
- scratch32.buffer,
- scratch32.byteOffset,
- scratch32.byteLength
-);
-util.assert(scratchBytes.byteLength === scratch32.length * 4);
-
-export function asyncMsgFromRust(ui8: Uint8Array): void {
- const record = recordFromBufMinimal(ui8);
- const { promiseId } = record;
- const promise = promiseTableMin.get(promiseId);
- promiseTableMin.delete(promiseId);
- util.assert(promise);
- promise.resolve(record);
-}
-
-export async function sendAsyncMinimal(
- opId: number,
- arg: number,
- zeroCopy: Uint8Array
-): Promise<number> {
- const promiseId = nextPromiseId(); // AKA cmdId
- scratch32[0] = promiseId;
- scratch32[1] = arg;
- scratch32[2] = 0; // result
- const promise = util.createResolvable<RecordMinimal>();
- const buf = core.dispatch(opId, scratchBytes, zeroCopy);
- if (buf) {
- const record = recordFromBufMinimal(buf);
- // Sync result.
- promise.resolve(record);
- } else {
- // Async result.
- promiseTableMin.set(promiseId, promise);
- }
-
- const res = await promise;
- return unwrapResponse(res);
-}
-
-export function sendSyncMinimal(
- opId: number,
- arg: number,
- zeroCopy: Uint8Array
-): number {
- scratch32[0] = 0; // promiseId 0 indicates sync
- scratch32[1] = arg;
- const res = core.dispatch(opId, scratchBytes, zeroCopy)!;
- const resRecord = recordFromBufMinimal(res);
- return unwrapResponse(resRecord);
-}