From 33c8d790c3d358a475c9ba828043e2c19e8d4b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20Sj=C3=B6green?= Date: Fri, 6 Aug 2021 23:28:10 +0200 Subject: feat: ffi to replace plugins (#11152) This commit removes implementation of "native plugins" and replaces it with FFI API. Effectively "Deno.openPlugin" API was replaced with "Deno.dlopen" API. --- extensions/ffi/00_ffi.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 extensions/ffi/00_ffi.js (limited to 'extensions/ffi/00_ffi.js') diff --git a/extensions/ffi/00_ffi.js b/extensions/ffi/00_ffi.js new file mode 100644 index 000000000..3c4112a47 --- /dev/null +++ b/extensions/ffi/00_ffi.js @@ -0,0 +1,30 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +"use strict"; + +((window) => { + const core = window.Deno.core; + + class DynamicLibrary { + #rid; + symbols = {}; + + constructor(path, symbols) { + this.#rid = core.opSync("op_ffi_load", { path, symbols }); + + for (const symbol in symbols) { + this.symbols[symbol] = (...parameters) => + core.opSync("op_ffi_call", { rid: this.#rid, symbol, parameters }); + } + } + + close() { + core.close(this.#rid); + } + } + + function dlopen(path, symbols) { + return new DynamicLibrary(path, symbols); + } + + window.__bootstrap.ffi = { dlopen }; +})(this); -- cgit v1.2.3